Собрал накопленное с предыдущего раза.
[ win32 ][ deb x86 Qt ]
Собрал накопленное с предыдущего раза.
[ win32 ][ deb x86 Qt ]
Все любят гипножабу
В исходники не глядел (не под рукой), можно на пальцах как работа с буфером сделана ? По уму нужно делать два буфера, и пока один проигрывается заполнять второй, а потом менять их местами.
Кстати есть мысль что эмуляцию AY лучше попробовать сделать через OPL2 (11-голосным FM синтезатором можно выкружить очень много, а по ресурсожоркости копейки). Тем более что он во всех звуковухах урожденно YM3812 совместимый и так или иначе преемственность есть нативная.
На пальцах всё, кроме SDL действует так: есть таймер, по сигналу которого буфер отправляется на проигрывание и выдаётся сигнал на начало эмуляции (от INT до INT), во время эмуляции этот же буфер заполняется. Для SDL работает его собственный callback.
Надо попробовать с двумя буферами. Хотя, мне всё равно сложно решать проблему, не имея её - даже на ноутбуке (2-ядерник intel), когда с отрисовкой по Qt эмулятор жрёт 45%, звук не хрипит и не заикается!
Все любят гипножабу
Да не в скорости проца проблема. Проблема заключается в том, что у тебя генерация буфера привязана к 50Гц, а реально он может проигрываться быстрее. Вот похоже у меня такая фигня с ALSA и происходит. Что с SDL не так я пока не знаю. Небыло времени для экспериментов. Плюс к тому, у тебя циклический буфер нихрена не циклический 8). Я не вкурил нафига ты его сбрасываешь каждый раз после проигрывания.
Посмотри сорцы zemu. Там правда только SDL версия, но там у меня все работает как часы.
Тут важно понять, хрипит из-за клиппинга, или заикается из-за того что успевает выплюнуть буфер раньше чем новый подготовится.
В первом случае причиной может быть целочисленное переполнение из-за микширования и/или ресэмплинга, второй вобщем-то очевиден сам по себе.
Попробуем так... build 20130110
- За кадр звуковой буфер не заполняется больше положеного.
- ALSA выводит звук так же, как SDL - из кольцевого буфера в промежуточный вытаскивается определенное кол-во байт и отправляются на проигрывание
- Исправил переинициализацию памяти выше 128К при смене профиля.
- Возможность всегда запускаться на профиле default, а не на последнем выбраном (галка Options->Xpeccy->Profiles->Start on default)
Последний раз редактировалось SAM style; 10.01.2013 в 17:09.
Все любят гипножабу
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Вот два буфера как раз нужны чтобы ничего не вытаскивать и не складывать. Поменял указатель - буфер новый вместо старого. пока один играется, второй наполняется.
А кстати зачем буфер именно кольцевой ? При переполнении буфера звук все равно испортится, только в случае кольцевого буфера у него будет съедаться начало, а в случае линейного - конец. Что при восприятии на слух абсолютно не принципиально, все равно будет "дырка" в звуке, но линейный буфер проще закодить и работать с ним быстрее из-за отстутствия "заворота".
Все любят гипножабу
А что у тебя вынесено в отдельный поток? Непосредственно генерация звука или воспроизведение результата этой генерации?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)