XM Player

altПосле недолгих поисков по всемирной паутине, я нашел таки, что искал — модуль, который проигрывает модульную музыку. (Оказалось, что он «заточен» только под xm-файлы, ну да ладно…) После некоторого ознакомления модуля, я пришел к такому выводу:

(Разбираем функции, которые предлагает нам модуль…)

— function uFMOD_PlaySong(lpXM:string; param, fdwSong: LongWord): PHWAVEOUT;

Главная функция, которая отвечает за воспроизведение трека.

lpXM:string — название трека;
param: LongWord — оставляем его «0»;
fdwSong: LongWord — спецификация воспроизведения: XM_FILE (воспроизводить файл), XM_MEMORY (из памяти) XM_RESOURCE (как ресурс.)

— procedure uFMOD_Jump2Pattern(pat: LongWord); //прыжок на паттерн
— function uFMOD_GetTime:LongWord; //вывод заголовока трека
— procedure uFMOD_SetVolume(vol: LongWord); //Громкость трека
— procedure uFMOD_Pause; //Пауза
— procedure uFMOD_StopSong; //Остановка воспроизведения
…а также еще ряд других полезных процедур и функций.

Ваяем плеер

Итак, для написания плеера, который будет проигрывать «XM» файлы (один из многих форматов модульной музыки) нам необходимо: Дельфи, желание и… остальное по вкусу. Первое, на новой форме (думаю проблем с созданием формы не будет — мы же не на WinAPI пишем… пока…) располагай одну кнопку и сразу обзывай ее «Open», по названию ты наверное догадался — мы откроем файл и проиграем его. Следующее уже на твое усмотрение (что вышло у меня, смотри на скриншоте), я еще добавил «Edit», в котором буду отображать полное имя файла. Нажимай кнопку на своей форме и переписывай содержимое листинга. Чуть не забыл — кидай на форму компонент «OpenDialog» с закладки «Dialog», что даст нам возможность выбора файла. И еще не забываем подключать в раздел «uses» наш модуль.

Листинг:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if Opendialog1.Execute then
uFMOD_PlaySong(Opendialog1.FileName,0,XM_FILE);
Edit1.Text:=OpenDialog1.FileName;
end;
Имеется некоторая заморочка со спецификой воспроизведения:

1. Если вы хотите проигрывать ресурс, то в модуле, парамер функции «uFMOD_PlaySong» меняем на lpXM:integer, следовательно «fdwSong» у нас будет XM_RESOURCE.
2. Если читать из памяти, то «lpXM:Pointer» и XM_MEMORY соответственно.

Пример для чтения из памяти с последующим воспроизведением:

//Обрезанный трек, записанный побайтово в массив
const
xm : array[1..905] of Byte = (
$45,$78,$74,$65,$6E,$64,$65,$64,$20,$4D,$6F,$64,$75,$6C,$65,$3A,

$00,$08,$00,$01,$00,$83,$12,$01,$81,$61,$83,$19,$01,$80,$83,$1E);
Функция воспроизведения.
uFMOD_PlaySong(@xm,0,XM_MEMORY);

Понравилась статья? Поделиться с друзьями: