Schrijver
| Эмуляция MSX на плейерах MP4
| cax
 msx professional Berichten: 1011 | Geplaatst: 08 Mei 2007, 13:15   | Есть такая операционка для портативных плейеров, называется Rockbox.
Работает на множестве устройств, включая iPod-ы всех мастей и мою Sansa E260.
Я сейчас работаю над портированием эмулятора fMSX для Rockbox, и уже есть кое-какие результаты. Хотел бы узнать, нужно ли это кому-либо кроме меня ?
| | cax
 msx professional Berichten: 1011 | Geplaatst: 02 Juni 2007, 11:27   | По следам темы про портинг fMSX на Sansa E200 на английской части форума:
fms, если уж мы решили обсуждать fMSX на Sansa в форуме, то я бы предпочёл говорить по-русски
На данный момент я наблюдаю вот что: на самом девайсе (в отличие от симулятора девайса на PC) эмуляция идёт медленнее реального времени, и, соответствено, сэмплы вырабатываются медленнее, чем воспроизводятся.
Так что, похоже, пришло время заняться профайлингом и оптимизациями.
| | fms msx user Berichten: 42 | Geplaatst: 03 Juni 2007, 15:21   | Quote:
| fms, если уж мы решили обсуждать fMSX на Sansa в форуме, то я бы предпочёл говорить по-русски
|
Ну по-русски так по-русски - нам татарам все равно.
Quote:
| На данный момент я наблюдаю вот что: на самом девайсе (в отличие от симулятора девайса на PC) эмуляция идёт медленнее реального времени, и, соответствено, сэмплы вырабатываются медленнее, чем воспроизводятся.
|
Хехе, Сахачка, ты забываешь одну вещь: сэмплы в звуковом frameworkе, приходящем с fMSXом, вырабатываются ровно в одном месте - в функции RenderAudio(). И единственными параметрами этой функции являются частоты и громкости звука по каналам. Если ты будешь вызывать эту функцию каждый раз, когда предыдущий аудио буфер кончил играться (то есть в callbackе), то абсолютно никаких проблем с качеством звука у тебя быть не должно. То есть мелодия может играться медленно, но без помех. Так что, попробуй перенести вызов RenderAudio() в callback и проверь что callback у тебя вызывается именно по прерываниям (иначе от всего rockboxовского audio api придется отказаться).
Quote:
| Так что, похоже, пришло время заняться профайлингом и оптимизациями.
|
Ну, это никогда не помешает, хотя в данном случае проблема видимо не в этом. | | cax
 msx professional Berichten: 1011 | Geplaatst: 03 Juni 2007, 16:18   | Сегодня я поставил обновлённый Рокбокс - в нём что-то починили, и всё стало работать намного быстрее, и несмотря на то, что, как оказалось, у нас есть не 100MHz, а только 75, я уже вижу, что скорости хватает. Но всё-таки я что-то сильно начудачил... в общем, как только упрусь лбом и смогу объяснить чётко в чём затык, сразу отпишусь. Спасибо ещё раз за помощь.
| | cax
 msx professional Berichten: 1011 | Geplaatst: 03 Juni 2007, 19:23   | На данный момент имеем: если засунуть в Keyboard() один вызов RenderAudio(GetFreeAudio()), то я слышу утроенный звук - например, при стрельбе - каждый выстрел 3 раза. При отладке видно, что сэмплов недостаёт, и буфер отыгрывается по нескольку раз с одним содержимым.
Если же я вызову RenderAudio 3 раза подряд, то звук получается правильный, но медленный.
Впрочем, на FastForward он звучит даже слегка быстрее, чем надо.
Кстати, совсем не слышны звуковые эффекты (например, в фоновой мелодии Maze Of Galious нет ударных) - похоже я что-то ещё налажал.
| | fms msx user Berichten: 42 | Geplaatst: 04 Juni 2007, 09:01   | Quote:
| На данный момент имеем: если засунуть в Keyboard() один вызов RenderAudio(GetFreeAudio()), то я слышу утроенный звук - например, при стрельбе - каждый выстрел 3 раза. При отладке видно, что сэмплов недостаёт, и буфер отыгрывается по нескольку раз с одним содержимым. Если же я вызову RenderAudio 3 раза подряд, то звук получается правильный, но медленный.
Впрочем, на FastForward он звучит даже слегка быстрее, чем надо.
|
Ну понятно. Смотри: проиграв кусок буфера, ты его не чистишь, поэтому если новых данных ты туда записать не успел, то буфер играется снова и снова. А записать туда из Keyboard() оно не успевает.
А теперь решение: как я говорил в прошлый раз, перенеси вызов RenderAudio() в audio callback. Тогда, независимо от эмулятора, твой аудио буфер всегда будет полон. О результатах доложи
Quote:
|
Кстати, совсем не слышны звуковые эффекты (например, в фоновой мелодии Maze Of Galious нет ударных) - похоже я что-то ещё налажал.
|
Видимо что-то с SCC, или же SetSound() не вызваны были (они устанавливают тип звука для каждого канала, по умолчанию это SND_MELODIC). Не заморачивайся этим пока. | |
| |
| |