Воспроизведение музыки в программах на Ассемблере
Использование музыки в ваших программах несомненно добавит им привлекательности. Особенно если речь идет о компьютерных играх или кейгенах :) Для различных форматов музыки используются различные библиотеки, в том числе и самописные. Самописные, как правило, приватные и доступны только ограниченному кругу лиц, а качественных и удобных из числа публичных всего две - BASS и uFMOD.Для качественной музыки используется внешняя библиотека BASS, последняя версия 2.4.2. Это кроссплатформенная библиотека для воспроизведения потоковой музыки (MP3, MP2, MP1, OGG, WAV, AIFF), трекерной (XM, IT, S3M, MOD, MTM, UMX), Internet-вещания (HTTP, FTP), а также некоторых других форматов через внешние модули расширения. При всем богатстве функционала библиотека занимает всего около 100 килобайт на диске. Библиотека обычно используется в аудиоплеерах и компьютерных играх. Скачать последнюю версию можно с офсайта, в архиве имеется подробнейшая документация по всем API библиотеки. Дополнительные модули расширения можно скачать оттуда же с офсайта. Для нас особый интерес представляет пример использования API библиотеки BASS на Flat Assembler'е, скачать его можно также с офсайта. Это плеер с минимальными функциями, но в архиве содержатся необходимые inc-файлы, которые надо будет поместить в соответствующие папки FASM для использования в других проектах. Минусы использования библиотеки BASS в том, что в любом случае приходится таскать за собой 100-килобайтный файл bass.dll. Для больших проектов это погоды не сделает, а для небольших может оказаться критичным. Конечно, можно хранить файл bass.dll внутри исполняемого файла и записывать в системную директорию по мере надобности (именно так и поступает патчер dUP2), но многие антивирусы расценят подобную активность как подозрительную. Со всеми вытекающими. Также к недостаткам можно отнести закрытый код библиотеки и навешанный на нее протектор.
Для трекерной музыки, а также в проектах, когда размер имеет значение, лучше использовать библиотеку uFMOD, последняя версия на момент публикации 1.25.2. Это компактная, шустрая, надежная, мультиплатформенная библиотека для качественного воспроизведения аудио в формате XM, разработанная полностью на ассемблере. XM-модуль может храниться в отдельном файле, в ресурсах или быть предварительно загружен в память. Поддерживаются также битые и не совсем стандартные файлы. Библиотека бесплатна для любого использования, распространяется с открытым исходным кодом и примерами для различных компиляторов, в том числе для FASM. Скачать библиотеку можно с офсайта. В своих проектах я использую именно uFMOD, поэтому настроил ее для своего удобства следующим образом. Пути в файле конфигурации настроены как я уже писал раньше в статье про установку FASM. Структура программы с использованием музыки получается примерно такая (оставлены только участки кода, непосредственно отвечающие за музыку):
Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- ; Подключить музыкальный файл
- xm file '%music%\jamers.xm'
- xm_length = $ - xm
- ; Сегмент кода
- section '.code' code readable executable
- ; Запустить файл на воспроизведение
- stdcall uFMOD_PlaySong, xm, xm_length, XM_MEMORY
- ....
- ; Тут какие-то действия программы
- ....
- ; Остановить воспроизведение
- stdcall uFMOD_PlaySong, 0, 0, 0
- ; Таблица импорта
- section '.idata' import data readable writeable
- ; Подключить функции для работы со звуком
- library winmm,'WINMM.DLL'
- include "apia\winmm.inc"
- ; Подключить все необходимые модули uFMOD
- include '%ufmod%\ufmod.inc'
Code (Assembler) : Убрать нумерацию
- ;--------------------------------------
- ; Файл winmm.inc
- ;--------------------------------------
- import winmm,\
- waveOutGetPosition,'waveOutGetPosition',\
- waveOutOpen,'waveOutOpen',\
- waveOutPrepareHeader,'waveOutPrepareHeader',\
- waveOutReset,'waveOutReset',\
- waveOutUnprepareHeader,'waveOutUnprepareHeader',\
- waveOutWrite,'waveOutWrite',\
- waveOutClose,'waveOutClose'
Code (Assembler) : Убрать нумерацию
- ;--------------------------------------
- ; Файл ufmod.inc
- ;--------------------------------------
- include '%ufmod%\eff.inc'
- include '%ufmod%\data.inc'
- macro PUBLIC symbol {} ; hide all publics
- macro thnk nm { nm equ [nm] }
- include '%ufmod%\fasm.asm'
Code (Assembler) : Убрать нумерацию
- ;--------------------------------------
- ; Файл data.inc
- ;--------------------------------------
- ; uFMOD setup:
- UF_OUTPUT equ WINMM ; Set output driver to WINMM (WINMM, OPENAL, DIRECTSOUND)
- UF_FREQ equ 48000 ; Set sampling rate to 48KHz (22050, 44100, 48000)
- UF_RAMP equ STRONG ; Select STRONG interpolation (NONE, WEAK, STRONG)
- UF_UFS equ ANSI ; Select ANSI encoding (ANSI, UNICODE)
- UD_MODE equ UNSAFE ; Select UNSAFE mode (NORMAL, UNSAFE, BENCHMARK)
- VB6 equ 0 ; Disable VisualBasic 6 extensions
- PBASIC equ 0 ; Disable PureBasic extensions
- EBASIC equ 0 ; Disable Emergence BASIC extensions
- BLITZMAX equ 0 ; Disable BlitzMax extensions
- NOLINKER equ 1 ; Select "no linker" mode
- UF_FMT equ 0 ; Disable DLL entry point
- ; uFMOD constants:
- XM_RESOURCE = 0
- XM_MEMORY = 1
- XM_FILE = 2
- XM_NOLOOP = 8
- XM_SUSPENDED = 16
- uFMOD_MIN_VOL = 0
- uFMOD_MAX_VOL = 25
- uFMOD_DEFAULT_VOL = 25
Огромный архив бесплатной трекерной музыки в формате XM, IT, S3M и MOD можно найти на сайте The Mod Archive. Обновления каждый день! Библиотека uFMOD работает только с форматом XM, файлы других форматов можно сконвертировать в XM при помощи бесплатной программы Open Modplug Tracker. Последняя версия 1.17.02.48, скачать можно с офсайта. К сожалению, процесс конвертирования нигде толком не описан, пришлось разбираться самому. Но как оказалось, это делается очень просто:
Конвертирование файла в Open Modplug Tracker
Открываете файл в редакторе, на вкладке "General" нажимаете кнопку "Song Properties...". В открывшемся окне выбираете формат файла "FastTracker XM".
Выбор нужного формата файла
Нажимаете "ОК", а затем через меню "File" - "Save As..." сохраняете сконвертированный файл в формате XM. И все, никаких лишних движений делать не надо.
Просмотров: 13692 | Комментариев: 7
Метки: Assembler, мультимедиа
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Егор
(07.11.2020 в 17:15):
Спасибо! Я это искал. ?
alancor
(30.12.2010 в 02:33):
Привет всем, а особенно тому, кто посвятил эту тему в жизнь!!
За частую, в кейгенах звучит прекрасные мелодии, думаю, что с этим все будут согласны, так вот - я тоже занялся такой задачей, как то, чтобы рипнуть трекеры из кейгенов. Нашёл в интернете целый сайт посвящённый этой теме, но там не было ничего сказано про конвертацию уже рипнутых трекеров из *.xm to *.mp3.
Помогла вот эта статья. Только тут расписано, как сделать трекер *.xm, но эта же прога и конвертит трекер в *.mp3...
Рассказываю, как:
Открываем прогу, закрываем внутри проги добавочное рабочее окно файла, теперь..., мышкой перетаскиваем файл в область пустого окна проги, и появляется рабочее окно данного файла, далее - File ---> Export as MP3, после клика вылетет контекстное окно с доп. настройками, как за правило, битрейт, частотные характеристики и прочая фигня, ничего не трогаем, а просто указываем сохранение на рабочий стол - вот и всё!! радуемся любимому трекеру, но уже в МР3, можно и на мобилу поставить в виде вызова. Всем удачи!! )))
За частую, в кейгенах звучит прекрасные мелодии, думаю, что с этим все будут согласны, так вот - я тоже занялся такой задачей, как то, чтобы рипнуть трекеры из кейгенов. Нашёл в интернете целый сайт посвящённый этой теме, но там не было ничего сказано про конвертацию уже рипнутых трекеров из *.xm to *.mp3.
Помогла вот эта статья. Только тут расписано, как сделать трекер *.xm, но эта же прога и конвертит трекер в *.mp3...
Рассказываю, как:
Открываем прогу, закрываем внутри проги добавочное рабочее окно файла, теперь..., мышкой перетаскиваем файл в область пустого окна проги, и появляется рабочее окно данного файла, далее - File ---> Export as MP3, после клика вылетет контекстное окно с доп. настройками, как за правило, битрейт, частотные характеристики и прочая фигня, ничего не трогаем, а просто указываем сохранение на рабочий стол - вот и всё!! радуемся любимому трекеру, но уже в МР3, можно и на мобилу поставить в виде вызова. Всем удачи!! )))
ManHunter
(13.08.2009 в 23:02):
s0ph0kl3s, read oficial manuals in Spanish:
http://ufmod.sourceforge.net/ind_es.htm
or in English:
http://ufmod.sourceforge.net/index.html
All exampes, including C++, you can find inside archive:
ufmod-1.25.2a-win32.7z\Examples\C
http://ufmod.sourceforge.net/ind_es.htm
or in English:
http://ufmod.sourceforge.net/index.html
All exampes, including C++, you can find inside archive:
ufmod-1.25.2a-win32.7z\Examples\C
s0ph0kl3s
(13.08.2009 в 22:55):
привет от русского языка, не понимают ничего, но я читаю ваш блог, и я хотел бы знать, каким образом я могу осуществить uFMOD LIB в C + + компилятор haaa благодаря и Вашей очень хорошая статья
mail s0ph0kl3s@gmail.com
gracias por tu colaboracion
mail s0ph0kl3s@gmail.com
gracias por tu colaboracion
Vovka
(30.03.2009 в 21:39):
Для кейгенов лучше использовать не BASS, а BASSMOD с того же сайта, он весит чуть больше 30кб и проигрывает только треккерную музыку. Минус uFMOD в том, что он играет только XM, а после конвертации из других форматов не всегда хороший результат получается.
Дмитрий
(24.03.2009 в 10:25):
Спасибо, я тоже искал! Но нашел тока на delphi)
Zummenix
(23.03.2009 в 16:06):
Спасибо, как раз то, что я искал ! :)
Добавить комментарий
Заполните форму для добавления комментария