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);

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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: