Сообщение от
SAM style
Закоммитил следующее
- Добавлен вывод на 48000Гц
- Обновление окна выведено в свой поток. Если до следующего раза нарисоваться не успело, оно пропускается.
Обновления каких-нибудь либ были? Если да, можно попробовать пересобрать эмуль целиком (make clean && make). У меня иногда такое бывает после обновления - звук заикается, кнопки не работают...
Чтобы узнать степень заполнения буфера, можно в sound.cpp в sndFillToEnd() раскомментить строку
printf("tail: %i\n",sndChunks - smpCount);. Если в консоль польются нули - буфер заполняется как надо. sndChunks - вычисленное кол-во сэмплов в буфере на 1/50 сек, smpCount - счетчик сэмплов, в начале кадра обнуляется.
Теперь по пунктам. Либы не обновлялись. Вчера игрался с кодом и смотрел что как.
Первое:
Код:
if ((err = snd_pcm_set_params(alsaHandle,SND_PCM_FORMAT_U8,SND_PCM_ACCESS_RW_INTERLEAVED,sndChans,sndRate,1,100000)) < 0) {
последнее число, а именно 0.1 сек - слишком большая задержка и в результате у меня звук играется не подряд, а с паузами. При этом, если эту задержку уменьшить, то щелчки учащаются.
Второе:
Код:
SDL_MixAudio(stream,sndBuffer,len,SDL_MIX_MAXVOLUME);
Вот эту строку надо заменить на простое
Код:
memcpy(stream, sndBuffer, len);
. Исходя из документации MixAudio нужен только если идет микширование каналов. У тебя его нет. Ты микшишь до этого в момент генерации.
Третье:
Под SDL такое впечатление что звук играет медленнее, как-бы заторможенно. При этом он еще и хрипит. Такое ощущение что там либо с порядком байт что-то не то, либо он модулируется чем-то... Я не понял в чем дело пока. Надо пытаться слить буфер в файл и попробовать так проиграть.