Войти
ПрограммированиеФорумЗвук

OpenAL заикается звук при низком фпс

Страницы: 1 2 Следующая »
#0
16:58, 21 июля 2013

делаю стрим ogg


#  define OPENAL_STREAM_BUFFER_COUNT 4
#  define OPENAL_STREAM_BUFFER_SIZE (48000)

4 буфера по 48000 каждый (пробовал разные вариации)

апдейчу звук в отдельном потоке

HANDLE handle = CreateThread( NULL, 0, &s_tread_job, (LPVOID)_thread, 0, NULL);

    while( m_running == true )
    {
            printf("ThreadTaskSoundBufferUpdate %p\n"
                , this
                );

      soundBuffer->update();

            if( m_running == true )
            {
          THREAD_SERVICE(m_serviceProvider)
            ->sleep( 10 );
            }
    }

но фоновая музыка все равно заикается, трещит
репродюсится если в task manager выставить 1 ядро (задать соответствие) и менять приоритеты, со временем музыка становится нормальной

FPS при этом 20-40

если компьютер изначально 1 ядерный (ноут) то это постояно идет, подскажите в чем может быть причина ((

стрим буффер
https://svn.code.sf.net/p/menge-engine/code/trunk/src/System/OALS… ferStream.cpp

соурс звука
https://svn.code.sf.net/p/menge-engine/code/trunk/src/System/OALS… undSource.cpp


#1
17:02, 21 июля 2013

повысь приоритет потока.
и по моему буфер довольно велик. у тебя слип 10 мс, то есть размер буфера нужно сделать на 10 мс.
ну и слиптайм расчитывать в зависимости от того сколько заняло чтение

#2
17:03, 21 июля 2013

Pushkoff
странно что когда я из слабого приоритета ставлю в большой, то тоже реагирует рывками

#3
17:05, 21 июля 2013

IROV..
48к это очень много. это 500мс звука. начини с кусков размером в 1 фпс.

#4
17:07, 21 июля 2013

IROV..
сейчас у меня 700 fps,

SetThreadPriority( handle, THREAD_PRIORITY_TIME_CRITICAL );

поставил, без изменений (

#5
17:08, 21 июля 2013

Pushkoff
а как его посчитать?

#6
17:26, 21 июля 2013

О как интересно, это не зависит даже от того стрим не стрим, перевел сейчас все на "без стримовое" все равно тоже самое
именно если поставить 1 ядро (
звук начинает трещать и заикаться, хотя запускаю другую игру делаю тоже самое - и все ок

З.Ы. соврал, без стрима все ок ^_^
З.Ы. рано радовался (ложно положительно), странно ведет себя короче.... даже без стрима трещит (

#7
20:41, 21 июля 2013

у меня была аналогичная проблема, оказалось dll которую я использовал была софтварная, замена на хардварную все решила

#8
20:51, 21 июля 2013

Mikey
а где найти хардварную? )))

#9
21:47, 21 июля 2013

не бывает хардварного vorbis
но есть реализация без использования float называется thremor

IROV..
меряй тайминги. что именно жрет время, чтение и декодировка или вывод

#10
22:04, 21 июля 2013

подпишусь..

#11
22:08, 21 июля 2013

IROV..
скомпиль сорцы с креатива, должно быть openal32.dll + wrap_oal.dll

#12
0:49, 22 июля 2013

попробуй waveOut* функциями вывести звук

#13
13:14, 22 июля 2013

проблему нашел уже ближе к ночи ^_^ давненько так не смеялся
все дело в том что openal-soft делает

+ Показать
  длл с именем openal32.dll
и моя доблесная программа загружала ее.... из c:/windows/systems32 а вот почему там длл которая портит звук я уже не знаю :)

лечение? переименовал в openal32s.dll

кстати прочитал что родная openal32.dll в винде хп, на многих старых карточках дает такие бяки, что и подтверждает претензии

#14
14:22, 22 июля 2013

IROV..

все дело в том что openal-soft делает
длл с именем openal32.dll

openal32.dll - это стандартное название библиотеки OpenAL. В систему OpenAL может быть установлена из инсталлятора от Creative (входил в кучу старых игр на OpenAL), а также в комплекте с драйверами на звуковую карту (все Creative, ASUS Xonar D2X, возможно другие) - которые теоретически могут задействовать аппаратную обработку звука (OpenAL эффекты, фильтры, может и ещё что-то).

OpenAL soft всё делает внутри себя, а на выход через поддерживаемое API (зависит от системы - DirectSound, ALSA, ...) выводит уже обработанный звук.
В большинстве случаев достаточно положить openal32.dll рядом с executable приложения, и никакие левые библиотеки из system32 не будут загружаться (смотри приоритет загрузки DLL библиотек).

Что касается глюков, то OpenAL soft - самая адекватная реализация OpenAL, но если ваше приложение глючит, это ещё не означает, что вы сделали всё правильно.
Кроме того, некоторые вещи в спецификациях OpenAL написаны странно.
В своё время мне пришлось переписать стриминг специально из-за дурацкой реализации стандартной OpenAL в Mac OS X (хотя он работал без сбоев на OpenAL soft и OpenAL от ASUS).

Страницы: 1 2 Следующая »
ПрограммированиеФорумЗвук

Тема в архиве.