Вопрос эмуляторописателям (или просто программистам)
Posted: 06 Apr 2009, 08:01
есть основной цикл программы, подготавливающий буфер аудио-данных:
есть обработчик прерывания звукового устройства (например аудиокодек. Прерывание по высокому уровню ножки DREQ - когда данные нужно зохавоть):
тоесть Buf - буфер из 32 байт, по прерыванию засылаем 32 байта в mp3 декодер (по даташиту именно столько можно слать без опроса DREQ)
проблема в том что функция MakeSoundBuffer или остальная часть в программе в главном цикле - очень медленна - буфер не успевает построиться полностью, когда mp3-кодер его уже требует.
в итоге вместо непрерываного звука слышен хрип.
что делать?
как следует организовать программу по заполнению буфера/чтению из него?
32 байта это ведь мало?
- Code: Select all
while(1)
{
MakeSoundBuffer(Buf);
...
}
есть обработчик прерывания звукового устройства (например аудиокодек. Прерывание по высокому уровню ножки DREQ - когда данные нужно зохавоть):
- Code: Select all
EXEPTION Handler()
{
for(i=0;i<32;i++) SPISend(Buf[i]);
EOI();
}
тоесть Buf - буфер из 32 байт, по прерыванию засылаем 32 байта в mp3 декодер (по даташиту именно столько можно слать без опроса DREQ)
проблема в том что функция MakeSoundBuffer или остальная часть в программе в главном цикле - очень медленна - буфер не успевает построиться полностью, когда mp3-кодер его уже требует.
в итоге вместо непрерываного звука слышен хрип.
что делать?
как следует организовать программу по заполнению буфера/чтению из него?
32 байта это ведь мало?