В первой части мы научились правильно проигрывать музыкальный интернет-поток (радиостанции). Ну что, теперь давайте перейдем к тому, чтобы сделать визуализацию (спектрум). Для этого, как я говорил раньше нам необходим модуль 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, то также обращаемся за помощью, если буду знать, как решить ту или иную проблему помогу, чем смогу.
Сам проект статьи Вы можете скачать здесь.

Метки: , , ,




К записи “Bass.dll создание интернет-радио. Часть 2” оставлено комментариев: 8.

  1. Александр:

    Где-где скачать?

  2. Dmitry:

    А где можно скачать сам проект. К статье он не прилагается.

  3. Andrey:

    Я извиняюсь, забыл приложить, уже в статье ссылка

  4. Виктор:

    Ты бы немог скинуть проект, в таком виде, как он запечатлён у тебя в первой статье??

  5. Виктор:

    Просто я бы хотел узнать как сделать эквалайзер и как можно сделать добавление новых радиостанций

    • Andrey:

      добавление новых радиостанцией делается легко, просто из TEdit добавляете в TListBox, а что касается эквалайзера, то пишите мне в скайп, помогу

  6. Евгений:

    Добрый вечер, хочу написать свое радио на Delphi для андроида, можно ли как-то упаковать данную Dll в apk-шку, чтоб на телефон ничего не распаковывалось?

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*