Bass.dll создание интернет-радио. Часть 2

4 минуты на чтение

В первой части мы научились правильно проигрывать музыкальный интернет-поток (радиостанции). Ну что, теперь давайте перейдем к тому, чтобы сделать визуализацию (спектрум). Для этого, как я говорил раньше нам необходим модуль spectrum_vis, который необходимо подключить в Uses, сам модуль я выложу в конце статьи, если Вы не сможете его отдельно скачать, то скачаете здесь. Далее нам необходим сам компонент, где мы будем отрисовывать нашу визуализацию, для этих целей я использовал компонент TPaintBox. Давайте его разместим на нашей форме, а затем объявим переменную Spectrum:TSpectrum. Почему я выбрал именно компонент TPaintBox, да потому что его не надо каждый раз перерисовывать, он сам это делает, а что касается, например TImage, то еще придется следить за отрисовкой (так как спектрум каждый раз меняется). На событии OnCreate нашей формы инициализируем ее:

Spectrum:=TSpectrum.Create(PaintBox1.Width,PaintBox1.Height);
   Spectrum.Mode:=1;
   Spectrum.BackColor:=clMenuText;

Далее на событие OnTimer компонента TTimer напишем следующий код:

procedure TForm1.Timer1Timer(Sender: TObject);
var
FFFData:TFFTData;
begin
   try
    BASS_ChannelGetData(url_radio,@FFFData,BASS_DATA_FFT1024);
    Spectrum.Draw(PaintBox1.Canvas.Handle,FFFData,1,1);
   except
    on e:Exception do
   end;
end;

Здесь тип TFFTData – это массив от 0 до 512 типа Single. Для того, чтобы его использовать необходимо в Uses подключить модуль – CommonTypes.pas. В него мы будем передавать данные нашего потока с помощью функции BASS_ChannelGetData. А дальше уже на нашем спектруему мы отрисовываем эти данные, почему именно на TTimer, потому что данные постоянные меняется и их периодически необходимо менять. На таймере в свойстве Interval я выставил 100.

Далее я создал массив colors:array[1..15] of TColor, в котором перечислил 15 различных цветов, а затем случайно выбираю из этого массива цвет и задаем данный цвет нашему вузализатору спектрума. Вот и все, теперь и здесь все понятно. Черный фон не очень по сравнению со стилем формы, но это не проблема, так как цвет фона спектрума мы можем задать любой. В примере, который я выложу в статье будет как раз такой цвет, что он будет казаться прозрачным. Вот, что получилось у меня:

Теперь нам осталось рассмотреть, как реализовывать возможность записи музыкального интернет потока в файл. Для этих целей я использую свободное приложение для кодирования аудиозаписей в формате MP3. Использовать данное приложение можно следующим образом:

lame.exe [параметры] <входной_файл> <выходной_файл>

У данного приложения есть огромное количество параметров, в этой статье я Вас познакомлю только с одним, если это Вас заинтересует, то я Вам скину ссылку, где сможете ознакомиться и с другими параметрами данного приложения. Для этих целей нам необходимо будет объявить строковую переменную, в которой мы будем перечислять параметры для записи музыкального потока в файл. Для этих целей нам понадобится модуль bassenc, который необходимо подключить в Uses. На сколько я знаю в bass.dll если свои функции для записи потока, но я решил использовать именно этот, так как при помощи lame.exe можно выходной файл различным образом преобразовывать. В параметрах lame.exe мы указываем —preset standard, что означает защиту от ошибок и, конечно же, сам выходной файл, который нам необходимо получить в формате MP3.

Далее при помощи функции BASS_Encode_Start мы начинаем запись нашего потока в файл, а при помощи BASS_Encode_Stop эту запись можно остановить.

Для записи:

BASS_Encode_Start(uStream, pchar(ss), BASS_ENCODE_AUTOFREE, nil, 0);

Для остановки записи:

BASS_Encode_Stop(uStream);

Вот и все, ничего сложного нету, на основе данной библиотеки сделано очень огромное количество современных музыкальных проигрывателей. Вы можете сделать свой собственный. Я хочу этот самый проект перезапустить, для себя, что-то добавить, так как мне не очень нравиться то, как я сделал прилипающее окно эквалайзера к главному окну радио.

В этой статье я для Вас специально сделал пример, который содержит отображения спектрума, запись музыкального потока в файл, а также его остановка, проигрывание интернет потока (в частности музыкальных радиостанций), а также их остановка. Вот что у меня получилось:

В самом проекте приложены все необходимые файлы и библиотеки, которые Вам потребуются для отладки проекта или же для создания своего собственного. Кто-то может попробовать переделать его под Fire Monkey и поделиться здесь, я же о своей перезапущенной версии сообщу также здесь. Если будут какие-то вопросы по библиотеки bass.dll, то также обращаемся за помощью, если буду знать, как решить ту или иную проблему помогу, чем смогу.
Сам проект статьи Вы можете скачать здесь.

Facebook Vk Ok LinkedIn Telegram

Похожие записи:

Всем здравствуйте. На днях решил подключить свой винчестер с настольного компьютера к ноутбуку: решил немного покопаться в старой информации и наткнулся на свои давние проекты, которые разрабатывал совсем давно. Решил их запустить (некоторые), проверить работа...
Здравствуйте, в этой статье хотел бы поговорить немного о «липких» окнах. Да эффект в приложениях довольно распространенный и чаще всего встречается в каких-нибудь проигрывателях, например, Winamp. Так вот, когда я делал свой проигрыватель на основе bass.dll, ...
Как и обещал статья о загрузки файла из Интернет с помощью модуля wininet. Как мы скачивали файл с помощью TidHTTP можно посмотреть тут. Довольно мощная библиотека и много можно что с ней делать, но пока что остановимся на загрузке файлов из сети интернет с по...