Създаване на интернет радио

Здравейте всички. Онзи ден реших да свържа твърдия си диск от настолен компютър към лаптоп: реших да копая малко в стара информация и се натъкнах на старите си проекти, които разработвах от дълго време. Реших да ги пусна (някои), за да проверя дали изобщо работят и след това стартирах проект, нареченRadioByfly, който разработих за безплатна връзка от моя интернет доставчик, за да слушам радиостанции и също да ги записвам в mp3 файл, който се записва на диск. Като цяло, в по-голямата си част го направих за себе си, тъй като не винаги обичах да изтеглям песни, но включих радиото, записах го и слушах, след което стартирах 1,5 часа mp3 файл и също слушах, ако нещо се умори, презаписах.
В тази статия бих искал да говоря за създаването на такава моя дългогодишна разработка, да споделя малко как го направих и като цяло искам да рестартирам тази разработка, във връзка с пускането на нови версии наDelphi, с въвеждането наFireMonkey в тях, бих искал да я преправя на тази платформа, просто има възможност да я „почувствам“ малко, да разбера и вече има достатъчно информация за него вече е в мрежата. Вече е ясно за целите на създаването на това радио, по това време нарисувах дизайна набързо вMSPaint и като цяло не съм много силен в дизайна, така че не се оказа никак красиво, но, както казах по-горе, има възможност да рестартираме този проект, трябва да продължим малко напред. Колкото до това, че радиото има възможност за запис на музикален поток във файл, към него съм приложил и визуализация (спектър) на песенния поток, която има във всички съвременни музикални плеъри.
За да напиша интернет радио, използвах библиотекатабас.dll, разбира се, не отговаря на компонентаDelphiTMediaPlayer. Самият външен вид на радиото, което някога направих, присъства по-долу, не съдете стриктно по външния му вид, графиките са трудни за мен.

Радиото има и еквалайзер, както се вижда на скрийншота, има плейлист, както и възможност за добавяне на нова радиостанция, има бутон за запис, изходният файл отива в папкаout, която се намира в корена на проекта под името "Record No.". След това този файл може да бъде стартиран с помощта на всеки музикален плейър и също така ще бъде възможно да го закрепите към нашето радио, така че да може да възпроизвежда локални музикални файлове. Реализирах самата визуализация (спектър) с помощта на модулаspectrum _vis.pas, който начертах върху компонентаTPaintBox. Беше нарисуван на черен фон, показан под формата на бели ивици, както можете да видите на екрана, те не са напълно бели, а с различен цвят, но ще кажа повече, че те се променят в различни цветове почти на всеки половин секунда (общо 15), организирах това с помощта на таймер, никой няма да ви забрани да направите само един цвят.
В тази статия бих искал да споделя как създадох еквалайзера, визуализацията (спектър) и действителното възпроизвеждане на интернет радио потока, но също така да разгледам как можете да организирате и възпроизвеждате локални музикални файлове.
И така, сега нека поговорим за това кои функции и процедури на библиотекатаbass.dll трябва да се използват, за да се възпроизведе нормална радиостанция. Първо трябва да изтеглим най-новата версия на библиотеката, тя има версия2.4.9. Можете да го изтеглите от официалния сайт, в търсачка, напримерGoogle Трябва само да въведете "bass.dll " и първиярезултатът от издаването на търсачката ще бъде официалният сайт.
След като библиотеката е изтеглена заDelphi, ние я включваме в нашия проект, в секцията за използване (пишем Bass). След това трябва да инициализираме самата библиотека (самото звуково устройство), за това в събитиетоOnCreate на нашата основна форма трябва да напишем:
Тази функция инициализира устройството за изход на аудио поток. Първият параметър, който имаме, е -1, което означава към кое устройство ще бъде изведен аудио потокът:
- -1 - устройство по подразбиране
- 0 - няма звук
- 1 е първото намерено реално изходно устройство, функциятаBASS_GetDeviceInfo може да получи списък на всички аудио устройства.
Вторият параметър, който имаме, е 44100, което означава изходната честота на аудио потока. Третият параметър, който имаме, е 0, който може да приема различни стойности на флаг: изход в моно режим, в стерео режим и т.н. Четвъртият параметър е манипулатор на главния прозорец на приложението. И накрая, последният параметър указва обект, който може да се използва за създаване наDirectSound. Тази функция връщаTrue, ако устройството е инициализирано иFalse в противен случай.
Също така при даденото събитие на формуляр (OnCreate ), зададох стойността на конфигурацията да се възпроизвежда, направих това с:
- BASS_SetConfig(BASS_CONFIG_NET_PLAYLIST, 1);
- BASS_CONFIG_NET_PLAYLIST - означава, че ще се възпроизвеждат URL плейлисти като PLS или M3U.
След това трябва да създадем нашия плейлист. За тези цели използвах компонентаTListBox и когато щракнах върху бутона за добавяне на нова радиостанция, показах компонентаTEdit от долната част на формата и когато щракнах отново бутонаadd – скрива компонентаTEdit. Веднага създадох списъка с радиостанции и по подразбиране го зареждам вTListBox от файлаplaylist.pls, който също се намира в корена на програмата.
Малко с интерфейса разбрах. Сега нека създадем бутон за възпроизвеждане на радиостанция и на събитиетоOnClick, нека напишем следния код:
След това използваме функциятаBASS_StreamCreateURL, за да създадем музикален поток, който поддържа интернет файлове за възпроизвеждане (това са точно нашите радиостанции). След това, използвайки функциятаBASS_ChannelPlay, възпроизвеждаме нашия музикален поток. Всички радиостанции пускат, всички са доволни, след това вече добавих моите чипове, получих битрейта, показах го, както и вида на интернет връзката, на която се пускат радиостанциите. Това е по желание на всички.
Е, това е всичко, вече можете да пускате радиостанции, за удобство написах следния код на събитиетоOnDbClick на компонентаTListBox :
Тоест, чрез двукратно щракване върху произволен елементTListBox, радиостанцията също ще бъде пусната. Но направих това и за себе си.
За да спрете да възпроизвеждате радиостанция, просто трябва да напишете следния код:
Тук също всичко е ясно, предаваме нашия аудио поток на тази функция, която трябва да спрем.
Продължение на втората част на статията след 2 дни, заедно с изходните кодове и библиотеки.