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.