Уроки PureBasic

Categories

Other Sites

Other Sites

Other Sites



             Поиск по сайту

     

                


    Оставить мне сообщение:



Визуализация звука

Закончил проект Уроки PureBasic

1. Визуализация звуковой волны с использованием библиотеки Bass.dll

2. Информация о файле MP3 : ( исполнитель, название, год )

3. Индикатор среднего уровня сигнала левого и правого канала.

4. Сохранение параметра громкость во внешнем файле (функция Preferences)

5. Плейлист адресов радиостанций.


Уроки PureBasic



Для компиляции необходим файл: RLibPlus.res (находится в архиве исходника)

Отвечает за функции:

HIWORD() ; выделяет левый канал
LOWORD() ; выделяет правый канал

Поместить RLibPlus.res в папку Residents в PureBasic.


Возможно нужны библиотеки


Radio Bass


Код реализации для версии PB 4.30 :
;-------------------Плеер MP3, Онлайн радио но Bass.dll---------------------- ; ; (c) 2009 - mirashic ; ;----------------------------------------------------------------------------- UsePNGImageDecoder() UseJPEGImageDecoder() Enumeration #Window_0 #WebGadget #Image_3 #Volume #im1 #im2 EndEnumeration Global Val Global Handle Global Event Global width1,height1,color1,m1 Global column,width,height,color,FileName.s,q ;{----------------------Параметры уровня------------------------------------- x1=10 ;позиция от начала x y1=97 ;позиция от начала y width1=385 ;ширина столба height1=3 ;высота столба m1=3 ;ширина между столбами color1=RGB(53, 246, 12) ;цвет ;}---------------------------------------------------------------------------- ;{----------------------Параметры спектра----------------------------------- x=10 ;позиция от начала x y=22 ;позиция от начала y column=42 ;колличество столбов width=8 ;ширина столба height=70 ;высота столба h=1 ;ширина между столбами color=RGB(1, 72, 187) ;цвет ;}---------------------------------------------------------------------------- ;{----------------------Индикатор уровня и спектра--------------------------- IncludeFile "bass.pbi" CreateImage(0,width,height) CreateImage(#im1,385,9) Procedure UpdateSpectrum(*xx) ; Функция для создания индикатора Dim FFT.f(1024) Repeat ;----------------------------------спектр------------------------------------ BASS_ChannelGetData(Handle,@FFT(),#BASS_DATA_FFT2048) For f=0 To column Val= Sqr(fft(f)) * 180 ;получение параметра по частотам StartDrawing(ImageOutput(0)) Box(0,0,20,height,RGB(17, 17, 17)) Box(0,height-Val,20,Val,color) a=height For d=0 To 21 LineXY(0, a-4, width, a-4, RGB(0, 0, 0)) a=a-4 Next d StopDrawing() SetGadgetState(303+f,ImageID(0)) Next f ;----------------------------------------------------------------------------- ;-----------------------------уровень----------------------------------------- If BASS_ChannelIsActive(handle) ; если канал активен level=BASS_ChannelGetLevel(handle) L=HIWORD(level) R=LOWORD(level) ;---------------- Lal= L*width1/32768 StartDrawing(ImageOutput(#im1)) Box(0,0,width1,height1,RGB(17, 17, 17)) Box(0,0,Lal,height1,color1) Ral= R*width1/32768 Box(0,6,width1,height1,RGB(17, 17, 17)) Box(0,6,Ral,height1,color1) a1=width1 For d1=0 To 100 LineXY(a1-8, 0, a1-8, height1*2+m1, RGB(0, 0, 0)) a1=a1-8 Next d1 StopDrawing() SetGadgetState(302,ImageID(#im1)) EndIf ;---------------------------------------------------------------------------- Delay(50) ForEver EndProcedure ;}--------------------------------------------------------------------------- ;{----------------------Таймер----------------------------------------------- Global a,b Procedure.s Secundomer() ;- Сама процедура таймера - всего 3 строчки! a+1 If a=10:a=0:b=b+1:EndIf SetGadgetText(233,FormatDate("%ii:%ss", b)+":"+ Str(a)) EndProcedure ;}--------------------------------------------------------------------------- CatchImage(#Image_3, ?Im7, ?Im7End-?Im7) ;{----------------------Открыть MP3------------------------------------------ Procedure LoadMP3() BASS_StreamFree(Handle) FileName.s = OpenFileRequester("","","*.*|*.*",0) Name.s= GetFilePart(FileName.s) ;выделяем имя файла Debug Name$ If FileName Handle=BASS_StreamCreateFile(0, @FileName, 0, 0, 0) BASS_SetVolume(100) BASS_ChannelPlay(Handle,0) ;--------------------------------Teg-------------------------------------- If ReadFile(0,FileName.s) MemPointer = AllocateMemory(128) FileSeek(0,Lof(0)-128) ReadData(0,MemPointer, 128) artist.s = Trim(PeekS(MemPointer + 33,30)) ; артист album.s = Trim(PeekS(MemPointer + 63,30)) ; альбом year.s = Trim(PeekS(MemPointer + 93, 4)) ; год EndIf ;---------------------------------------------------------------------------- SetGadgetText(230,artist.s+" "+Name.s+" "+year.s) EndIf EndProcedure ;}--------------------------------------------------------------------------- ;{----Функция для создания потокового звука, получаемыми из сети Интернет---- Procedure Loadfile(url_1$,N) BASS_StreamFree(Handle) ; Закроем все существующие каналы воспроизведения и освободим системные ресурсы Handle=BASS_StreamCreateURL(url_1$, 0, 0, #Null, 0) a=0:b=0 StartTimer( 1 , 100 , @Secundomer()) BASS_ChannelPlay(Handle,0) SetGadgetText(230,"Станция : "+GetGadgetText(N)+" 128 kbps") EndProcedure ;}--------------------------------------------------------------------------- ;{----------------------Основное окно---------------------------------------- OpenWindow(#Window_0, 0, 0, 410, 220, "Radio Bass", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible) BackgroundImage_Window_0_Brush = CreatePatternBrush_(ImageID(#Image_3)) If BackgroundImage_Window_0_Brush SetClassLong_(WindowID(#Window_0), #GCL_HBRBACKGROUND, BackgroundImage_Window_0_Brush) RedrawWindow_(WindowID(#Window_0), 0, 0, #RDW_ERASE | #RDW_FRAME | #RDW_INVALIDATE | #RDW_ALLCHILDREN) EndIf ImageGadget(302,x1,y1,0,0,ImageID(#im1)) ; вывод индикатора уровня For f=0 To column ImageGadget(303+f,x, y,0,0,ImageID(0)) ; вывод спектра x=x+(width+h) Next f HyperLinkGadget(218,24, 190,30,15,"Vol -",RGB(255,0,0)) HyperLinkGadget(219,59, 190,30,15,"Vol +",RGB(255,0,0)) TextGadget (220,100,190,20,15,"50") SetGadgetColor(220,#PB_Gadget_FrontColor,RGB(1, 161, 254)) SetGadgetColor(220,#PB_Gadget_BackColor, RGB(29, 26, 26)) ;{-----Чтение громкость-------- If OpenPreferences("vol.pcs") SetGadgetText(220,ReadPreferenceString("Громкость", "Нет ")) ClosePreferences() EndIf ;}----------------------------- q=Val(GetGadgetText(220)) For j=218 To 219 PureCOLOR_SetGadgetColor(j, #PureCOLOR_SystemColor, #PureCOLOR_DontSetBackColor) SetGadgetColor(j,#PB_Gadget_FrontColor,RGB(1, 161, 254)) Next j HyperLinkGadget(221,20, 140,70,15,"A-ROCK", RGB(255,0,0)) HyperLinkGadget(222,100,140,70,15,"Kiss FM", RGB(255,0,0)) HyperLinkGadget(223,180,140,70,15,"Makkirus", RGB(255,0,0)) HyperLinkGadget(224,260,140,70,15,"Радио 13", RGB(255,0,0)) HyperLinkGadget(225,330,140,70,15,"Luga Radio", RGB(255,0,0)) For h=221 To 225 SetGadgetColor(h,#PB_Gadget_FrontColor,RGB(129,129,129)) SetGadgetColor(h,#PB_Gadget_BackColor, RGB(29, 26, 26)) Next h HyperLinkGadget(240, 270, 163, 55, 15, "Плейлист", RGB(255,0,0)) HyperLinkGadget(241, 340, 163, 55, 15, "Загрузка", RGB(255,0,0)) For o=240 To 241 SetGadgetColor(o,#PB_Gadget_FrontColor,RGB(1, 161, 254)) SetGadgetColor(o,#PB_Gadget_BackColor, RGB(29, 26, 26)) Next o HyperLinkGadget(226,15, 110,70,15,"Открыть MP3",RGB(255,0,0)) HyperLinkGadget(227,110,110,40,15,"Stop", RGB(255,0,0)) HyperLinkGadget(228,160,110,40,15,"Play", RGB(255,0,0)) HyperLinkGadget(229,200,110,50,15,"Pause", RGB(255,0,0)) TextGadget (230,20,8,350,15,"Информация") HyperLinkGadget(231, 388, 8, 10, 15, "?",RGB(255,0,0)) HyperLinkGadget(232, 388, 110, 10, 12, "#",RGB(255,0,0)) TextGadget (233, 318, 110, 45, 15, "00:00:0") HyperLinkGadget(234, 375, 110, 10, 12, "#",RGB(255,0,0)) For b=226 To 234 SetGadgetColor(b,#PB_Gadget_FrontColor,RGB(1, 161, 254)) SetGadgetColor(b,#PB_Gadget_BackColor, RGB(0, 0, 0)) Next b StringGadget(444, 132, 189, 270, 15, "http://207.200.96.225:8020",#PB_String_BorderLess) PureCOLOR_SetGadgetColor(444, RGB(129, 129, 129), RGB(29, 26, 26)) BASS_Init(-1, 44100, 0, WindowID(0), #Null) BASS_SetVolume(q/100) ;}------------------------------------------------------------------------------ CreateThread(@UpdateSpectrum(),0) HideWindow(#Window_0,0) Repeat Event= WaitWindowEvent(10) Window=EventWindow() Gadget=EventGadget() Select Event Case #PB_Event_Gadget Select EventGadget() Case 221 Loadfile("http://stream4.radiostyle.ru:8004/a-rock", 221) Case 222 Loadfile("http://217.20.164.164:8000/kissfm.mp3", 222) Case 223 Loadfile("http://w02-sw01.akadostream.ru:8111/makkirus128.mp3",223) Case 224 Loadfile("http://play.radio13.ru:8000/radio13-128-mp3", 224) Case 225 Loadfile("http://195.5.125.6:8000/", 225) Case 226 LoadMP3() a=0:b=0 StartTimer( 1 , 100 , @Secundomer()) Case 227 EndTimer(1) BASS_ChannelStop(Handle) BASS_ChannelSetPosition(Handle,0,#BASS_POS_BYTE) Case 228 BASS_ChannelPlay(Handle,0) a=0:b=0 StartTimer( 1 , 100 , @Secundomer()) Case 229 EndTimer(1) BASS_ChannelPause(Handle) Case 231 ;{-----------------------------О программе------------------------------------- CatchImage(69, ?Im6, ?Im6End-?Im6) OpenWindow(59, 0, 0, 320, 320, "Информация о программе", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) BackgroundImage_Window_0_Brush = CreatePatternBrush_(ImageID(69)) If BackgroundImage_Window_0_Brush SetClassLong_(WindowID(59), #GCL_HBRBACKGROUND, BackgroundImage_Window_0_Brush) RedrawWindow_(WindowID(59), 0, 0, #RDW_ERASE | #RDW_FRAME | #RDW_INVALIDATE | #RDW_ALLCHILDREN) EndIf TextGadget (70, 20, 295, 95, 15, "Сайт программы :") HyperLinkGadget(71, 140, 295, 150,15,"http://www.mirashic.narod.ru/",RGB(255, 4, 0)) TextGadget (72, 120, 124, 65, 15, "Версия : 1.0") TextGadget (73, 30, 250, 165, 15, "Автор : Мирошниченко Олег") TextGadget (74, 30, 144, 265, 15, "Онлайн проигрыватель FM радио") TextGadget (75, 30, 160, 265, 15, "Бесплатная версия") TextGadget (76, 30, 176, 265, 15, "Сделано в программной среде : ") HyperLinkGadget(77, 50, 200, 130, 30, "PureBasic",RGB(255, 4, 0)) SetGadgetFont (77, LoadFont(77, "Arial", 20, 16)) SetGadgetColor(77, #PB_Gadget_FrontColor,RGB(255, 81, 78)) SetGadgetColor(77, #PB_Gadget_BackColor, RGB(0, 0, 0)) For k=70 To 76 SetGadgetColor(k, #PB_Gadget_FrontColor,RGB(129, 129, 129)) SetGadgetColor(k,#PB_Gadget_BackColor,RGB(0, 0, 0)) Next k ;}----------------------------------------------------------------------------- Case 232 Toggle = Toggle ! 1 If Toggle color1=RGB(228, 17, 1) Else color1=RGB(53, 246, 12) EndIf Case 234 Toggle = Toggle ! 1 If Toggle color=RGB(53, 246, 12) Else color=RGB(1, 72, 187) EndIf Case 218 If q >0 SetGadgetText(220,""+Str(q-2)) q-2 Val=q BASS_SetVolume(Val/100) EndIf Case 219 If q <100 SetGadgetText(220,""+Str(q+2)) q+2 Val=q BASS_SetVolume(Val/100) EndIf Case 241 Loadfile(GetGadgetText(444),241) Case 240 ;{-----------------------------Плейлист---------------------------------------- Enumeration #ListIconGadget_2 EndEnumeration CatchImage(3, ?Im3, ?Im3End-?Im3) OpenWindow(60, 0, 0, 450, 480, "Плейлист", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) SetWindowColor(60,RGB(13, 13, 13)) ImageGadget(61, 0, 0, 450, 140, ImageID(3)) ListIconGadget(#ListIconGadget_2, 5, 100, 440, 350, " http адресс FM радиостанций", 280, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect) AddGadgetColumn(0, 1, "Название", 130) AddGadgetItem(#ListIconGadget_2, -1, "") AddGadgetItem(#ListIconGadget_2, -1, "http://16bit.fm:9500"+Chr(10)+"Радио 16BIT.FM") AddGadgetItem(#ListIconGadget_2, -1, "http://94.103.95.39:9000"+Chr(10)+"BestDance.FM") AddGadgetItem(#ListIconGadget_2, -1, "http://live1.radiogroup.com.ua:8000/europaplus128"+Chr(10)+"Europa Plus") AddGadgetItem(#ListIconGadget_2, -1, "http://live.galaradio.com:8000/kiev"+Chr(10)+"Radio Gala") AddGadgetItem(#ListIconGadget_2, -1, "http://stream.loveradio.ru:8000/Loveradio_96_stereo.mp3"+Chr(10)+"Love радио") AddGadgetItem(#ListIconGadget_2, -1, "http://mixfm.com.ua:8128"+Chr(10)+"MixFm") AddGadgetItem(#ListIconGadget_2, -1, "http://listen.radiopremium.ru:9000/premium32"+Chr(10)+"Радио Premium") AddGadgetItem(#ListIconGadget_2, -1, "http://217.20.175.72:3200"+Chr(10)+"RadioBengel") AddGadgetItem(#ListIconGadget_2, -1, "") AddGadgetItem(#ListIconGadget_2, -1, "http://sanfm.ru:8000/live"+Chr(10)+"SanRadio") AddGadgetItem(#ListIconGadget_2, -1, "http://shamrock.kiev.ua:8000/folk128"+Chr(10)+"ShamRock") AddGadgetItem(#ListIconGadget_2, -1, "http://212.26.129.222:8001"+Chr(10)+"Наше Радио") AddGadgetItem(#ListIconGadget_2, -1, "http://live.ncradio.ru/256.mp3"+Chr(10)+"Новое Чистое Радио") AddGadgetItem(#ListIconGadget_2, -1, "http://62.80.190.246:8000/ProstoRadiO128"+Chr(10)+"Просто Ради.О") AddGadgetItem(#ListIconGadget_2, -1, "http://play.radio13.ru:8000/radio13-128-mp3"+Chr(10)+"Радио 13") AddGadgetItem(#ListIconGadget_2, -1, "http://server1.radioserver.fm:8000/radiozaryad"+Chr(10)+"Радио Заряд") AddGadgetItem(#ListIconGadget_2, -1, "http://radioserver.fm:8000/obogrelov-fm"+Chr(10)+"Радио Obogrelov") AddGadgetItem(#ListIconGadget_2, -1, "http://82.193.116.85:8888/radioplus_hi"+Chr(10)+"Eto Radio Plus") AddGadgetItem(#ListIconGadget_2, -1, "http://91.193.68.87:8155"+Chr(10)+"Радио-Премьер") AddGadgetItem(#ListIconGadget_2, -1, "http://213.159.71.19:8000/48.mp3"+Chr(10)+"Радио РОКС") AddGadgetItem(#ListIconGadget_2, -1, "http://82.193.116.85:8888/eradio_hi"+Chr(10)+"Радио «Є»") AddGadgetItem(#ListIconGadget_2, -1, "http://91.202.72.22:8000/rusradio-128"+Chr(10)+"Русское Радио (Украина)") AddGadgetItem(#ListIconGadget_2, -1, "http://online1.uhradio.com.ua:8000/uhradio"+Chr(10)+"УХ радио 101,1 FM") AddGadgetItem(#ListIconGadget_2, -1, "http://live.ipfm.net:8000/hit-fm-128"+Chr(10)+"Хит FM, Hit FM, XIT FM (Украина)") AddGadgetItem(#ListIconGadget_2, -1, "http://83.222.4.42:8800/"+Chr(10)+"Радио Шансон (Россия)") AddGadgetItem(#ListIconGadget_2, -1, "") AddGadgetItem(#ListIconGadget_2, -1, "http://85.25.86.69:8400"+Chr(10)+"C H R O M A N O V A FM presents Ambient and Chillout Sets 247") AddGadgetItem(#ListIconGadget_2, -1, "http://64.71.144.178:8060"+Chr(10)+"FM - Club") AddGadgetItem(#ListIconGadget_2, -1, "http://64.71.145.130:8040"+Chr(10)+"FM - Trance") AddGadgetItem(#ListIconGadget_2, -1, "http://72.13.93.117:8050"+Chr(10)+"FM - Dance Hits") AddGadgetItem(#ListIconGadget_2, -1, "http://200.6.157.20:8211"+Chr(10)+"247online HQ High Quality radio - www.247onlineradio.com") AddGadgetItem(#ListIconGadget_2, -1, "http://89.20.136.213:9800"+Chr(10)+"16BIT.FM IDEA Channel Intelligent Digital Experimental Sound ") AddGadgetItem(#ListIconGadget_2, -1, "") AddGadgetItem(#ListIconGadget_2, -1, "http://94.23.0.111:8020"+Chr(10)+"Ambient Lounge Radio") AddGadgetItem(#ListIconGadget_2, -1, "http://207.200.96.225:8020"+Chr(10)+"Bluemars - Music for the Space Traveler") AddGadgetItem(#ListIconGadget_2, -1, "http://64.57.105.178:8000"+Chr(10)+"Culture Failure") AddGadgetItem(#ListIconGadget_2, -1, "http://207.200.96.225:8022"+Chr(10)+"Cryosleep - Zero Beat Guaranteed") AddGadgetItem(#ListIconGadget_2, -1, "") AddGadgetItem(#ListIconGadget_2, -1, "http://64.62.252.141:8100"+Chr(10)+"FM - Disco Ball") AddGadgetItem(#ListIconGadget_2, -1, "http://64.71.145.130:8095"+Chr(10)+"FM - 80s Channel") AddGadgetItem(#ListIconGadget_2, -1, "http://66.103.27.11:14700"+Chr(10)+"CLUB.FM 80 - Freestyle Express 128k") AddGadgetItem(#ListIconGadget_2, -1, "http://66.103.27.11:13900"+Chr(10)+"000Audio.com - 90s Dance Hits 128k") AddGadgetItem(#ListIconGadget_2, -1, "") AddGadgetItem(#ListIconGadget_2, -1, "http://66.90.73.17:9000"+Chr(10)+"A9 RADIO") AddGadgetItem(#ListIconGadget_2, -1, "http://stream.bollywoodmusicradio.com"+Chr(10)+"Индия Bollywood Music Radio") AddGadgetItem(#ListIconGadget_2, -1, ""+Chr(10)+"") AddGadgetItem(#ListIconGadget_2, -1, ""+Chr(10)+"") AddGadgetItem(#ListIconGadget_2, -1, ""+Chr(10)+"") AddGadgetItem(#ListIconGadget_2, -1, ""+Chr(10)+"") AddGadgetItem(#ListIconGadget_2, -1, ""+Chr(10)+"") AddGadgetItem(#ListIconGadget_2, -1, ""+Chr(10)+"") AddGadgetItem(#ListIconGadget_2, -1, ""+Chr(10)+"") AddGadgetItem(#ListIconGadget_2, -1, ""+Chr(10)+"") Case #ListIconGadget_2 Loadfile(GetGadgetText(#ListIconGadget_2),240) ;}------------------------------------------------------------------------------- EndSelect EndSelect If Event=#PB_Event_CloseWindow ;{----Запись громкость----------- If OpenPreferences("vol.pcs") WritePreferenceString("Громкость",GetGadgetText(220)) ClosePreferences() EndIf ;}------------------------------- CloseWindow(Window) EndIf Until Event=#PB_Event_CloseWindow And Window=#Window_0 ;{---------------------------загрузка изоброжений------------------------------ DataSection Im3: IncludeBinary "img_2.jpg" Im3End: Im6: IncludeBinary "info.png" Im6End: Im7: IncludeBinary "фон3.png" Im7End: EndDataSection ;}----------------------------------------------------------------------------- </plaintext> </div><br><br><br><br> Скачать <a href="fail/Radio_Bass_3.rar">архив</a> <img src="img/lin.jpg" width="700" height="20" alt="Уроки PureBasic"><br><br><br> </div> </div> <!-- copyright (t4) --><div align="center">Используются технологии <a href="http://www.ucoz.ru/" title="Создать сайт бесплатно"><b>uCoz</b></a><br /></div><!-- /copyright --> </body> </html>