Просмотр полной версии : TurboSound на Windows Mobile
теперь можно слушать pt3, vtx и pt3-ts на телефонах и КПК, установив мой плагин для gsplayer 2.25
в архив также включен плагин для Winamp, проигрывающий ещё и PT2, в дополнение к VTX, PT3
последняя версия 2.3:
http://zx.pk.ru/attachment.php?attachmentid=19938&d=1281806044
страница на sourceforge:
http://sf.net/projects/zxssk/
теперь можно слушать vtx и ts-vtx на телефонах и КПК, установив мой плагин для gsplayer 2.25. если открываем файл с именем <song>1.vtx, то плагин автоматически пытается подгрузить <song>2.vtx для ts-режима. не находит - играет обычный трёхканальный модуль
А может сделать новую версию VTX, для 6 каналов?
Тогда и в AY Emul будет чуть проще поддержать TS.
ch41ns4w
24.02.2007, 21:15
а для симбы?
ну вот, опять симбоводы остались с носом. 8(
кто-ж им виноват, что симбоводы сами себе ленивые буратины ))
А может сделать новую версию VTX, для 6 каналов?
Тогда и в AY Emul будет чуть проще поддержать TS.
была такая идея - в заголовок вместо ay/ym ставить ts (подразумевается 2 чипа ym, так на ay нет кажется ts). даже в плагине сначала зарегистрировал два расширения: vtx и tvx (для удобства отбора файлов). но потом стало лениво делать конвертор, это надо ж распаковать lha, перемешать каналы, запаковать lzw-методом. лишние 2 часа на написание/отладку, поэтому оно пошло ф топку. кстати, если надумаете делать такой формат, сделайте плиз дельта-кодирование данных перед сжатием (хранить не вывод в регистр AY, а разность с предыдущим значением). это улучшит сжатие. естественно, применять только для ts-vtx ради совместимости
А есть ли версия плеера под Windows SmartPhone, те которые без стилуса. Везде под КПК. Он запускается, но рулить нечем.. :frown:
что было, под то и написал. зоопарка устройств у меня нет. вообще, в gsplayer можно назначить кнопки на все действия. вопрос только в том, что для этого нужен стилус. попробуй разобраться, где он хранит настройки (м.б. в реестре) и сразу прописать нужные
плохо что в архиве нет jar-файла, было бы неплохо если бы на моем Motorola C650 можно было послушать AY
плохо что в архиве нет jar-файла, было бы неплохо если бы на моем Motorola C650 можно было послушать AY
Jar файл это под яву.... А данный плеер под мобильную винду написан...
Короче открыл недокументированную возможность данного Plugin-a.
Он подходит к музыкальному проигрывателю MiniLyrics Magic (MS Smartphone). Просто кидаем файл gsvtxs.dll в папку с программой.
Единственное, что проигрыватель файлы по маске *.vtx отсекает, поэтому нужно создавать плейлист чем нибудь другим. (я в блокноте сделал, можно WinAmp-ом). И вот его уже загружаем в проигрыватель..
Работает замечательно! :v2_thumb:
переписал Бульбовский pt3-плеер с паскаля на си. добавил в плагин поддержку форматов pt3 и pt3-TurboSound. turbo-sound в режиме двух vtx-файлов убрал, потому что изврат и все ts-мелодии и так выложены в виде pt3-исходников
изучается спрос на winamp-плагин с аналогичным функционалом (плюc pt2). мне не нужен из-за наличия AY_Emul, но написать несложно, потому что всё готово - только прикрутить winamp sdk
переписал Бульбовский pt3-плеер с паскаля на си.
Поздравляю, ты третий человек, который сделал этот за последние два года... :v2_wink:
А вот сделать DLL с AY эмулятором внутри для написания своего софта (трекера в первую очередь) похоже никто не в состоянии.
изучается спрос на winamp-плагин с аналогичным функционалом (плюc pt2). мне не нужен из-за наличия AY_Emul, но написать несложно, потому что всё готово - только прикрутить winamp sdk
Среди меня спрос есть. Это было бы очень удобно.
В идеале плагин со всеми форматами, которые играет AY_Emul,
но плагин pt2, pt3 и pt3-TurboSound - тоже отлично.
Поздравляю, ты третий человек, который сделал этот за последние два года... :v2_wink:
а где ещё две попытки? ;)
А вот сделать DLL с AY эмулятором внутри для написания своего софта (трекера в первую очередь) похоже никто не в состоянии.
зачем DLL, если есть исходники?
эту свою либу я делаю максимально изолированной. можно или получать семплы взамен на вывод в ay-регистры, или углубляться насколько надо, микшируя несколько источников в один буфер (как делает unreal, собирая большую кучу устройств), или задавая вывод в каждй регистр с точностью до такта
Среди меня спрос есть. Это было бы очень удобно.
сделал.
В идеале плагин со всеми форматами, которые играет AY_Emul,
переписать всё на си слишком.. можно попробовать скомпилить весь ay_emul в DLL-файл с одной экспортируемой функцией - конвертировать в VTX или что-то подобное универсальное, а плагин играет уже только VTX из буфера в памяти
сделал.
Winamp плагин не видит.:v2_conf2:
Версия 5.572. Версия 2.76 тоже.
переписать всё на си слишком.. можно попробовать скомпилить весь ay_emul в DLL-файл с одной экспортируемой функцией - конвертировать в VTX или что-то подобное универсальное, а плагин играет уже только VTX из буфера в памяти
Это вариант. Промежуточным форматом может быть например WAV.
Winamp плагин не видит.:v2_conf2:
Версия 5.572. Версия 2.76 тоже.
я проверял на 5.32.
SDK с сайта скачана последняя, датирована версией 5.5
а в списке input плагинов есть строчка?
Это вариант. Промежуточным форматом может быть например WAV.
слишком долго в него конвертить, с высоким качеством - несколько секунд.
расход памяти сейчас конечно пофиг
upd: скачал с сайта версию 5.581 - плагин в ней работает
единственное неудобство - если winamp установлен в program files (x86), то нужно копировать плагин в папку plugins, перейдя в режим администратора (иначе результат непредсказуем - от отказа в копировании до копирования в теневую roaming папку, файлы в которой видны только программе, выполнившей копирование
Winamp 5.54
Замечательно работает...
попробовал в AIMP 2.61.560, плагин видится, но играть файлы отказывается, говорит unsupported file format [Code: 41]
ps: файлики взял из папки bin/music
а в списке input плагинов есть строчка?
upd: скачал с сайта версию 5.581 - плагин в ней работает
единственное неудобство - если winamp установлен в program files (x86), то нужно копировать плагин в папку plugins, перейдя в режим администратора (иначе результат непредсказуем - от отказа в копировании до копирования в теневую roaming папку, файлы в которой видны только программе, выполнившей копирование
Так и знал, что такие вопросы возникнут.:v2_biggr:
По порядку (вдруг где ступил):
файл in_pt3ts.dll скопировал в папку C:\Program Files\Winamp\Plugins. Он скопировался именно туда. Я его там вижу среди других in_* плагинов.
Запустил winamp, Залез в Preferences->InputPlugins, его там нет.
Это и имел в виду под словами "winamp не видит".
Проверил права доступа этого файла. Они такие же, как и у остальных плагинов.
Может дело в том, что винамр не с нуля установленный, а новые версии много лет ставились поверх старых? Врядли. Попробую сегодня на работе на чистом winamp'e.
Конфликтует с другими плагинами? Тоже врядли. Убрал все in-плагины, кроме pt3ts. Пустой список.
Мистика прямо.:v2_conf2:
слишком долго в него конвертить, с высоким качеством - несколько секунд.
расход памяти сейчас конечно пофиг
Я думал наоборот быстрее.
По порядку (вдруг где ступил):
файл in_pt3ts.dll скопировал в папку C:\Program Files\Winamp\Plugins. Он скопировался именно туда. Я его там вижу среди других in_* плагинов.
если windows 7, то попробуй запустить проводник windows (или far - что удобнее) с правами администратора и посмотреть наличие файла
я уже видел такой фокус - под одним юзером program files и system32 отличается от того, что видно под другим юзером
ну и универсальное решение - держать ходовой, часто меняющийся софт не в program files, а своей папке с программами
---------- Post added at 11:18 ---------- Previous post was at 11:08 ----------
попробовал в AIMP 2.61.560, плагин видится, но играть файлы отказывается, говорит unsupported file format [Code: 41]
скорее всего причина в том, что я сделал unicode-плагин (на случай, если у кого-то китайские буквы в названиях папок). плагин отмечается флажком IN_VER в заголовке структуры In_Module.
если очень хочется, убери #define UNICODE_INPUT_PLUGIN в исходнике плагина и MultiByteToWideChar в getfileinfo замени на strcpy. в остальном без изменений - библиотека плеера одинаково работает с unicode и ansi
если windows 7, то попробуй запустить проводник windows (или far - что удобнее) с правами администратора и посмотреть наличие файла
я уже видел такой фокус - под одним юзером program files и system32 отличается от того, что видно под другим юзером
ну и универсальное решение - держать ходовой, часто меняющийся софт не в program files, а своей папке с программами
WinServer2k3 (может в этом дело?). Скопировал под админом. Смотрю в TotalCmd. Запускаю тоже под админом. В папке файл есть, в списке плагинов - нет.
WinServer2k3 (может в этом дело?). Скопировал под админом. Смотрю в TotalCmd. Запускаю тоже под админом. В папке файл есть, в списке плагинов - нет.
да, вероятно.
я скомпилил с использованием crt из стандартной dll (msvcr90.dll).
для старых вендов надо установить Visual C++ 2008 redistributable:
http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en
Попробовал на работе. WinXP SP3.
Работает. :v2_thumb: Но есть глюки.
Для vtx в плейлисте не отображается длительность.
При попытке проигрывания файла Regret.pt3 из приложенной папки Music winamp вылетает с ошибкой (не каждый раз, а только если перед ним пару-тройку других файлов проиграть).
Можно пару пожеланий к плагину? :v2_rolley
При попытке проигрывания файла Regret.pt3 из приложенной папки Music winamp вылетает с ошибкой
это плохо. я надеялся, что всё отлажено. буду тестировать ещё
Для pt2 в плейлисте тоже не отображается длительность.
Только для pt3.
В этом файле лишние щелчки:
В этом файле лишние щелчки:
заметил и не только на этом. почему-то только в ts-режиме. первое подозрение - клиппирование при сложении каналов, когда каналов много. буду разбираться
падает если закрыть winamp, открыть заново (при этом остаётся прежний плейлист) и нажать "информация о файле", не запуская проигрывание никакого файла. вечером эту дыру заделаю
падает если закрыть winamp, открыть заново (при этом остаётся прежний плейлист) и нажать "информация о файле", не запуская проигрывание никакого файла. вечером эту дыру заделаю
Попробовал несколько раз. У меня не падает. Показывает инфу нормально.
А можно в "информацию о файле" добавить имя файла с путем?
скорее всего причина в том, что я сделал unicode-плагин (на случай, если у кого-то китайские буквы в названиях папок). плагин отмечается флажком IN_VER в заголовке структуры In_Module.
если очень хочется, убери #define UNICODE_INPUT_PLUGIN в исходнике плагина и MultiByteToWideChar в getfileinfo замени на strcpy. в остальном без изменений - библиотека плеера одинаково работает с unicode и ansi
шаман! так оно и было... аимп теперь играет
для старых вендов надо установить Visual C++ 2008 redistributable:
http://www.microsoft.com/downloads/d...displaylang=en
Установил. Теперь и дома все заработало.
SMT, Огромное спасибо!!!
Для vtx в плейлисте не отображается длительность
исправил
Для pt2 в плейлисте тоже не отображается длительность.
Только для pt3.
pt2 играется Z80-плеером и чтобы посмотреть длительность, нужно эмулировать плеер до зацикливания. я посчитал, что слишком ресурсоёмкая операция, чтобы делать её для каждого файла в плейлисте. длина показывается только для того pt2, который начинаем играть
В этом файле лишние щелчки
нашёл опечатку (как и предполагал, в клиппировании), исправил
Попробовал несколько раз. У меня не падает. Показывает инфу нормально
понял, в чём дело. падало, когда файла уже нет на диске, а в плейлисте он остался. исправил
А можно в "информацию о файле" добавить имя файла с путем?
как не хотелось делать отдельный диалог для свойств файла, но пришлось :)
кто пользуется плагином для GSPlayer, обновляейтесь - убраны щелчки на turbosound песнях
а можно маленькую просьбу? если еще будут апдейты, то строить еще и ansi версию плагина.
заранее спасибо
а можно маленькую просьбу? если еще будут апдейты, то строить еще и ansi версию плагина.
заранее спасибо
договорились ))
но winamp-плагин я развивать не хотел (из-за наличия ay_emul), он просто как бонус к GS-плагину. поэтому апдейты будут только в случае вылавливания/исправления глюков
---------- Post added 11.08.2010 at 00:43 ---------- Previous post was 10.08.2010 at 23:18 ----------
кстати, если кто-то использует GSPlayer на PocketPC, у меня есть собственная сборка этого плеера с одной интересной фичей ;)
зачем DLL, если есть исходники?
Не все пишут на С.
а где ещё две попытки?
AY Fly и ZX Tune
Winamp'овский плагин работает отлично.:v2_thumb:
:v2_yahoo::v2_walkm::v2_yahoo:
Щелчков нет.
На файле Regret.pt3 не вылетает.
Длительность vtx есть.
длина показывается только для того pt2, который начинаем играть
Только в главном окне winamp'а. В плейлисте не показывается. Но это мелочи.
Не все пишут на С.
и чем тогда поможет DLL? к ActionScript или Java прикручивать сишную DLL - это бред
AY Fly и ZX Tune
любопытно. полазил по ихним темам, но не нашёл сишных исходников pt3-плеера :)
не нашёл сишных исходников pt3-плеера
Есть C++ исходник. Вполне себе. Или самоцель- именно сишный код со сваленными в кучу эмуляцией проца, аука и еще тыщи фич?
Есть C++ исходник. Вполне себе. Или самоцель- именно сишный код со сваленными в кучу эмуляцией проца, аука и еще тыщи фич?
чисто из любопытства, я бы посмотрел ;)
чисто из любопытства, я бы посмотрел
AYFly: http://code.google.com/p/ayfly/source/browse/trunk/src/libayfly/players/PT3Play.h
ZXTune: http://code.google.com/p/zxtune/source/browse/trunk/src/core/plugins/players/pt3_supp.cpp
Разумеется, там еще обвязка в обоих случаях имеется.
и чем тогда поможет DLL?
C луны свалился?
Сегодня существует сотни различных языков, большинство могут юзать DLL.
это бред
Это (http://zxpress.ru/temp/ascii8_votepack_pc_src.zip) бред?
Сегодня существует сотни различных языков, большинство могут юзать DLL.
Ага. А на мой вопрос о желательном интерфейсе к этой библиотеке в ответ сначала получил молчание, а потом нечто вроде "Ну чтоб за%%ись делала".
И после всего этого, конечно
сделать DLL с AY эмулятором внутри для написания своего софта (трекера в первую очередь) похоже никто не в состоянии.
хотя есть уже тот же ayfly-dll-library
хотя есть уже тот же ayfly-dll-library
AY FLY та функция которую можно было бы юзать в трекере ГЛЮЧИТ (сжирает весь проц или что-то в этом роде). Мы с Ande'ром пытались ее починить, но он в скорости отошел от дел и больше не возвращался.
Ага. А на мой вопрос о желательном интерфейсе к этой библиотеке
Что касается проигрывания - меня устраивает реализация AY Fly, там все варианты предусмотрены, и загрузка по имени файла и из памяти и тп.
---------- Post added at 18:30 ---------- Previous post was at 18:18 ----------
Вот тестовый код для AY Fly:
Global song, wnid, a_vol.c = 15
#Window_0 = 1
ProcedureC.l IM2()
Static first, adr
If first=0:
adr = GetFunction(1, "ay_writeay")
first = 1
EndIf
a_freq = 612
CallCFunctionFast(adr, song, 0 , a_freq & $0000FF00, 0)
CallCFunctionFast(adr, song, 1 , a_freq & $000000FF, 0)
CallCFunctionFast(adr, song, 8 , a_vol, 0)
CallCFunctionFast(adr, song, 7 , %00111000, 0)
If a_vol: a_vol - 1: EndIf
EndProcedure
OpenWindow(#Window_0, 387, 71, 256, 192, "retracker", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
wnid = WindowID(#Window_0)
OpenLibrary(1, "ayfly.dll")
song = CallCFunction(1, "ay_initemptysong", 44100, @IM2())
CallCFunction(1, "ay_sethwnd", song, wnid)
CallCFunction(1, "ay_startsong" ,song)
Repeat
Event = WaitWindowEvent()
Select Event
Case #WM_LBUTTONDOWN
a_vol = 15
Case #PB_Event_CloseWindow: End
EndSelect
ForEver
Насколько я сейчас понимаю IM2 это функция которую 50 раз в секунду вызывает AY Fly.
---------- Post added at 18:35 ---------- Previous post was at 18:30 ----------
Для современного трекера это маловато, нужна возможность проигрывать Didital и подмешивать Beeper. Как это реализовать в реалиях Windows я хз (звуковые буферы и т.п.)
C луны свалился?
Сегодня существует сотни различных языков, большинство могут юзать DLL.
imho, формат DLL как универсальный формат исполняемого кода своё отживает, потому что активно наступают динамические языки со сборщиками мусора, и они плохо дружат с сишными указателями на куски памяти
Это (http://zxpress.ru/temp/ascii8_votepack_pc_src.zip) бред?
маргинальный pb :)
AY FLY та функция которую можно было бы юзать в трекере ГЛЮЧИТ
Какая именно?
---------- Post added at 18:53 ---------- Previous post was at 18:51 ----------
imho, формат DLL как универсальный формат исполняемого кода своё отживает, потому что активно наступают динамические языки со сборщиками мусора, и они плохо дружат с сишными указателями на куски памяти
И какие есть альтернативы?
Какая именно?
Откуда я знаю что именно там глючит? :)
Смотри код выше.
Как я уже сказал, относительно трекера это не совсем то что хотелось бы иметь.
(писать очередной Vortex с 50hz AY смысла нет)
Откуда я знаю что именно там глючит?
Еще раз вопрос перечитай, плиз)
Еще раз вопрос перечитай, плиз)
ay_writeay
И какие есть альтернативы?
велосипедная куча библиотек вокруг каждой платформы. дотнетчики пишут своё, джависты - своё, питоновцы - своё и т.д.
я зачекаутил ayfly и zxtune и ужаснулся - сколько же всего понаписано, и я всё туда же, клепать велосипеды ))
так что будущее за избыточностью и велосипедами
я зачекаутил ayfly и zxtune
Более того. Было еще минимум две версии переписанного AY Emul на C, делалось для Chiptune musicdisk и еще чего то.
Для современного трекера это маловато, нужна возможность проигрывать Didital и подмешивать Beeper. Как это реализовать в реалиях Windows я хз (звуковые буферы и т.п.)
согласен, для плеера, эмулятора и трекера нужны разные либы с разными АПИ. для трекера подойдёт что-то вроде BASS. то есть, манипуляция со звуком должна быть на уровне семплов, каналов и эффектов
создал семпл (цифровой или AY-like), поставил его играться в канал, и накладываешь эффекты прямо во время воспроизведения
ay_writeay
А как можно на основе работы только с регистрами сделать трекер?
согласен, для плеера, эмулятора и трекера нужны разные либы с разными АПИ. для трекера подойдёт что-то вроде BASS. то есть, манипуляция со звуком должна быть на уровне семплов, каналов и эффектов
ZXTune преобразовывает модули в полноценный трекерный формат, с семплами орнаментами и прочими паттернами.
А как можно на основе работы только с регистрами сделать трекер?
Так же как это делалось на спектруме. ;)
Так же как это делалось на спектруме.
Понятно. Проблемы с терминологией. Тебе от библиотеки нужен был только эмулятор самого чипа, а не трекинг или еще что-то...
Понятно. Проблемы с терминологией. Тебе от библиотеки нужен был только эмулятор самого чипа, а не трекинг или еще что-то...
Конечно.
Понятно. Проблемы с терминологией. Тебе от библиотеки нужен был только эмулятор самого чипа, а не трекинг или еще что-то...
а я тоже понял неправильно, из-за этой цитаты:
Для современного трекера это маловато, нужна возможность проигрывать Didital и подмешивать Beeper. Как это реализовать в реалиях Windows я хз (звуковые буферы и т.п.)
а я тоже понял неправильно, из-за этой цитаты:
Совменные ZX кодеры не могут даже AY эмулятор оформить в виде DLL, что уж говорить про функции "трекинга"?
если я правильно понял newart, ему нужно именно то, что есть в моей библиотеке :v2_yahoo:
то есть,
1) функция out_reg(t, num_reg, value), которая симулирует вывод в регистр на точно заданной микросекунде (все t должны неубывать. в идеале - строго возрастать)
2) возможность спросить у чипа: эй, а сколько семплов у тебя уже готово с учётом последнего t, на котором была запись?
3) возможность получить N семплов из буфера. но не больше, чем уже готово
---------- Post added at 21:14 ---------- Previous post was at 21:06 ----------
... а может быь и нет. может, newart-у нужен "живой" AY. чтобы DLL сама крутила цикл в отдельном потоке, сама постоянно выводила звук, а код трекера в реальном времени писал в регистры и не заморачивался с буферами и звукокартами :confused:
Совменные ZX кодеры не могут даже AY эмулятор оформить в виде DLL
А каким боком умение написать DLL относится к кодингу на ZX?
... а может быь и нет. может, newart-у нужен "живой" AY. чтобы DLL сама крутила цикл в отдельном потоке, сама постоянно выводила звук, а код трекера в реальном времени писал в регистры и не заморачивался с буферами и звукокартами
...А может быть ворона, а может быть собака, а может быть корова! (что тоже хорошо :) )
У меня несколько частей в либе:
IO(read data) => Core{Process(search and convert raw data to track) => Tracking(interpret track data to device commands)} => Device(convert commands to sound dump) => Sound{Mixer(mix multichannel data to stereo)=>Backend(play sound)}
Эти части достаточно самостоятельны и отвязаны друг от друга. Путем адаптации любую из них можно юзать.
... а может быь и нет. может, newart-у нужен "живой" AY. чтобы DLL сама крутила цикл в отдельном потоке, сама постоянно выводила звук, а код трекера в реальном времени писал в регистры и не заморачивался с буферами и звукокартами
Зависит от задачи:
1. если делаем аналог Vortex, то достаточно AY эмулятора, который все делает сам, единсвенное что делаю я это устанавливаю регистры AY раз в 1/50с через callback функцию либы.
2. Если хочется возможность смешивать звук с Beeper (а ведь хочется), то нужна еще одна callback функция, в которой я накладывал бы семпл Beeper'a (генерируя его сам) на семпл AY сгеренрированый либой и она бы уже все это выводила в карту.
3. Beeper'a мало, хочется из 3-х AY каналов иметь хотя бы один цифровой. Тогда вариант со смешиванием семплов уже не подходит. Нужна видимо вот такая функция "функция out_reg(t, num_reg, value), которая симулирует вывод в регистр на точно заданной микросекунде (все t должны неубывать. в идеале - строго возрастать)" вместе с функционалом первого варианта. Если либа знает что такое Beeper, то возможно второй вариант по уму надо реализовывать через out_reg(beeper).
Зависит от задачи:
2. Если хочется возможность смешивать звук с Beeper (а ведь хочется), то нужна еще одна callback функция, в которой я накладывал бы семпл Beeper'a (генерируя его сам) на семпл AY сгеренрированый либой и она бы уже все это выводила в карту.
а вот это может обернуться проблемами. "сэмпл бипера", сделанный отдельно, без синхронизации всех генераторов звука, может не совпадать с длиной семпла AY. или погрешности окрулений кол-ва семплов в пересчёте на тики Z80/AY будет набегать и щёлкать периодически. можно не ставить себе цель микшировать всё в один буфер, а выводить несколько звуков одновременно, отдав микширование на откуп венде
3. Beeper'a мало, хочется из 3-х AY каналов иметь хотя бы один цифровой. Тогда вариант со смешиванием семплов уже не подходит. Нужна видимо вот такая функция "функция out_reg(t, num_reg, value), которая симулирует вывод в регистр на точно заданной микросекунде (все t должны неубывать. в идеале - строго возрастать)" вместе с функционалом первого варианта. Если либа знает что такое Beeper, то возможно второй вариант по уму надо реализовывать через out_reg(beeper).
именно так я и сделал
например, вывод в sound_drive:
update(t, left_vol, right_vol)
причём эмулятор AY - на выходе тот же sound_drive. он говорит звуковому движку, на каком такте AY поменялись регистры ЦАПов и всё
самое вкусное - если выводить с частотой 200KHz, либа сама красиво переведёт в 44.1/48/96 или сколько ей сказали при старте
именно так я и сделал
например, вывод в sound_drive:
update(t, left_vol, right_vol)
причём эмулятор AY - на выходе тот же sound_drive. он говорит звуковому движку, на каком такте AY поменялись регистры ЦАПов и всё
самое вкусное - если выводить с частотой 200KHz, либа сама красиво переведёт в 44.1/48/96 или сколько ей сказали при старте
Здорово.
Но посолько либы нет, остается только облизываться и смотреть как буржуи клепают очередной ретро[*****]трекер.
Здорово.
Но посолько либы нет, остается только облизываться и смотреть как буржуи клепают очередной ретро[*****]трекер.
это потому что задача неразрешимая в рамках имеющихся либ. с одной стороны, ты хочешь потактовую точность, а с другой стороны, не хочешь возиться со звуковыми буферами, а чтобы само играло
если играет само, асинхронно, то и точность плюс-минус лапоть. единственный выход - трекерное АПИ аля BASS. ты точно задаёшь параметры семпла (например, для бипера - амплитуду, скважность и т.п. для цифрового AY-семпла - сами данные семпла и частоту дискретизации), а потом, когда захочешь, ставишь семпл в канал. но такой подход потребует существенного дописывания библиотек
---------- Post added at 23:42 ---------- Previous post was at 23:35 ----------
хотя... не нужно делать метод "получить буффер", а нужно сделать метод "проиграть то, что накопилось в буфере". метод сделать синхронным: пока не доиграет - не возвращается. чтобы сами звуковые данные к тебе не приходили
если есть желание этим пользоваться, могу на выходных попробовать завернуть в DLL
хотя... не нужно делать метод "получить буффер", а нужно сделать метод "проиграть то, что накопилось в буфере". метод сделать синхронным: пока не доиграет - не возвращается. чтобы сами звуковые данные к тебе не приходили
C моей стороны это как будет выглядеть?
C моей стороны это как будет выглядеть?
как-то так:
hMixer = create_mixer(44100, 100000 /* размер буфера в семплах */);
hBeeper = create_render(hMixer, 3500000 /* тактовая частота, в которой меряется beeper_tick */ );
beeper_tick = 0;
hAY = create_ay(hMixer, 3500000);
ay_tick = 0;
// зададим какой-нибудь тон и пусть играет. больше регистры трогать не будем
set_reg(hAY, 1, 10);
set_reg(hAY, 8, 15);
set_reg(hAY, 7, 254);
begin:
// на бипере будем играть прерывистые гудки
// пошёл гудок
x=0
for i=0 to 1000000 step 500
update(hBeeper, beeper_tick);
set_volume(hBeeper, x, x); // ставим x в левый и правый канал
x = 5000-x; // инвертируем бит на бипере
beeper_tick = beeper_tick + 500; // 500 тактов между фронтами = 3.5khz
next i
// пошла пауза
beeper_tick = beeper_tick + 1000000
update(hBeeper, beeper_tick);
play(hMixer); // здесь play ничего не проиграет, потому что к миксеру привязано два устройства, а вывод прошёл только в одно (play играет семплы до минимального из update-тиков всех устройств на миксере)
// теперь играем AY
// поскольку мы договорились, что он будет играть ровный тон,
// пусть всё делает сам - регистры не трогаем
ay_tick = ay_tick + 2000000; // важно: со времененм не должно сильно отставать или убегать от beeper_tick
update(hAY, ay_tick);
play(hMixer); // выводим, сколько накопилось. в принципе, можно вызывать вообще после любого update() - хуже не будет
goto begin; // зацикливаем
beeper_tick и ay_tick - это 64-битные переменные. бейсик это поддерживает?
для использования в трекере тебе всё-таки придётся писать BASS-оподобный движок )) чтобы он сам крутился в цикле и делал нужные update() на девайсах, анализируя, какие семплы в каких каналах сейчас играют. всё это ещё должно быть интерактивным, играть от кнопок юзера. не пугает?
set_volume(hBeeper, x, x); // ставим x в левый и правый канал
Откуда у 1-битного бипера левый и правый канал?
---------- Post added at 01:08 ---------- Previous post was at 01:07 ----------
beeper_tick и ay_tick - это 64-битные переменные. бейсик это поддерживает?
Конечно.
Откуда у 1-битного бипера левый и правый канал?
универсальная функция, для эмуляции любых девайсов с ЦАПами от бипера до стерео-ковокса, саунд-драйва и т.д.. для бипера L и R надо ставить одинаковые
А что физически делают функции update и play?
А что физически делают функции update и play?
update(hDevice, t) эмулирует устройство от предыдущего такта t0 до текушего t. у каждого девайса есть свой указатель записи в буфер миксера. все семплы, сгенерированные за период от t0 до t записываются (точнее, выполняется операция сложения) в буфер миксера.
play(hMixer) смотрит указатели записи всех девайсов на миксере, выбирает из них минимальный. у миксера есть указатель чтения из буфера. в буфере проссумированы и готовы к выводу семплы всех устройств от указателя чтения до минимального из указателей записи. этот фрагмент извлекается из буфера и ставится в очередь WAV-плеера. указатель чтения увеличивается на число семплов, переданных плееру.
можно для удобства разделить play на 2 функции:
get_ready_samples(hMixer) - чтобы узнать, сколько семплов в буфере готовы и play_samples(hMixer, n), чтобы передать из буфера миксера в плеер n семплов начиная от позиции чтения и увеличить позицию чтения на n
обнаружена и исправлена ошибка в определении длины трека, из-за которой некоторые треки обрезались где-то в середине
добавлена не-юникодная сборка Winamp-плагина для использования с AIMP2
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot