Delphi: Свой WinAMP в подарочной упаковке

Лозовский Александр

Xakep, номер #057, стр. 057-086-4


procedure PlayDisk (NK: integer); //NK-номер трека

procedure PlayStrem (Name: string); //Name- имя файла

и нажми Ctrl-Shift-C. Дельфи сам создаст все нужное, тебе надо только вдолбить текст в появившиеся заготовки. Вот и вдалбливай. В PlayDisk:

Bass_CdPlay (NK, false, true);

А в PlayStrem - чуть сложнее:

f := PChar(Name);

result:= BASS_StreamCreateFile(FALSE, f, 0, 0, BASS_MP3_SETPOS);

IF result<>0 then BASS_StreamPlay(result, FALSE, 0);

Чтобы этот код заработал, в private надо объявить:

result: HStream;

f: PCHar;

Здесь я ничего объяснять не буду, т.к. ты читал теорию. Значит, уже все знаешь, поэтому идем дальше. Давай создадим для ListBox1 событие OnDblClick и сделаем так, чтобы двойной клик на какой-нибудь песне запускал ее воспроизведение. Do it:

Edit1.Text:= ListBox1.Items[ListBox1.ItemIndex];

IF RadioButton1.Checked then PlayStrem (Edit1.Text) else

PlayDisk (ListBox1.ItemIndex+1);

Здесь я передаю имя в Edit1, а затем играю трек или файл, в зависимости от желания пользователя. Заметь, что строки в ListBox нумеруются с 0, а треки - с 1. Отсюда и берется конструкция "+1".

Управление плеером

Кнопка "ADD" будет добавлять файл музона в плейлист. Именно файл, потому что треки, как ты помнишь, добавляются автоматически. Пишем онклик:

IF (RadioButton1.Checked) and (opendialog1.Execute) then

ListBox1.Items.Add(OpenDialog1.FileName);

Кнопка же "RMOVE" будет удалять выделенную позицию из плейлиста, поэтому ничего, кроме:

ListBox1.Items.Delete(ListBox1.ItemIndex);

она не заслуживает, а мы займемся самым основным: кнопками "Play", "Stop", "Pause" и трекбаром (он будет менять громкость). Онклик для "Play" ты напишешь сам, он почти аналогичен OnDblClick для плейлиста, а вот в "Pause" заливай этот код:

Здесь я сделал такую зависимость: если caption равно pause, значит музон уже играет и его можно стопить; если же он равен "Resume", значит он на паузе и можно делать resume. Если честно, этот способ нравится не всем, некоторые кодеры любят пользоваться глобальными булевыми переменными (true - играет, false - на паузе).

Взгляни теперь на онклик кнопки "STOP":

IF radiobutton1.Checked then Bass_channelstop (result) else

Bass_channelstop (CDCHANNEL);

Здесь все элементарно, главное - выбрать, что же нам надо остановить.

Ну и напоследок, создай для TrackBar событие OnChange и вбей туда:

bass_channelsetattributes (result,-1,trackbar1.Position,-1);

А минимальные и максимальные значения для него должны быть 0 и 100 соответственно. Логика проста - когда юзер начинает дергать за трекбар, громкость меняется, и это отображается в положении бегунка.

Вот и все, что я хотел рассказать. Онклик для кнопки "View info" ты посмотришь в исходнике на диске. Он откомментированный и предельно ясный. Тебе остается его как следует отмодернизировать. А вообще-то мы уже сделали большое дело, за которое не берутся даже злые пираты :). Ведь для своих коллекций mp3 они пишут простенькие оболочки, нагло эксплуатирующие тот самый WinAMP.

Назад на стр. 057-086-3  Содержание  Вперед на стр. 057-086-5