Radio BASS Record
Онлайновый
FM радио и
MP3 плеер, с использованием библиотеки
Bass.dll
Записи в режиме онлайн FM радио.
Для версии
PureBasic 4.40
Запись:
Скачать архив
Radio BASS record со всеми
исходниками
Вариантов код:
;{-----------добавление в систеиу шрифта---------------
Enumeration
#IncludeFile
EndEnumeration
Procedure CreateIncludeFile(Name.s, *StartFile, *EndFile)
If CreateFile(#IncludeFile, Name)
WriteData(#IncludeFile,*StartFile, *EndFile - *StartFile)
CloseFile(#IncludeFile)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
If CreateIncludeFile(GetWindowsDirectory() + "\FONTS\MicroTech.TTF", ?StartFont1, ?EndFont1)
AddFontResource_(GetWindowsDirectory() + "\FONTS\MicroTech.TTF")
EndIf
DataSection
StartFont1:
IncludeBinary "MicroTech.TTF"
EndFont1:
EndDataSection
;}------------------------------------------------------
Enumeration
#Window_0
#Window_2
EndEnumeration
Enumeration
#im2
#im3
#im_fon
#im_rec
#Font_1
#Font_2
#Font_3
#Font_4
#spektr
#open
#fm
#mp3
#Text_3
#sss ; подсветка
#but_1
#pausa
#rec
#but_4
#plist
#Cont_1
#Cont_2
#Play_ListFm
#Play_ListMP3
#clos
#vol
#vol_in
#tamer
#hhh
#PlayAll
#bar
#bar_1
#pods
#play
#playlist
#time
EndEnumeration
IncludeFile "bass.pbi"
Structure PlayList ; плёйлист
URL.s
Title.s
EndStructure
Global Handle, SongPlaying, Nname.s, Rep.s, Nasd.s, Poz.s, time, len, tim, NbSongs
Global NewList PlayList.PlayList(), stil.s
Global Dim fx(11), column,width,height,color
Global *mem=AllocateMemory(400000), hData.l, StartRecord, BreakThread
Global speed.f=1, xx.f, Nname.s, fon, fra, URL.s, Title.s, a, b, vol, volume.f, min, puti.s, WinMain
Structure D3 ; информ fm
id.s{13}
tit.s{40}
EndStructure
Structure ID3v1 ; теги mp3
id.s{3};
title.s{30};
artist.s{30};
album.s{30};
year.s{4};
comment.s{30};
genre.b;
EndStructure
Global *tag.ID3v1, *tg.D3, Title.s, box, vn, vb, vcc
UsePNGImageDecoder()
LoadFont(#Font_1, "MicroTech", 10, 16) ; шрифт бегущей строки MicroTech
LoadFont(#Font_2, "Arial", 7) ; шрифт закрыть
LoadFont(#Font_3, "Tahoma", 7) ; громкость
LoadFont(#Font_4, "MicroTech", 10, 16) ; шрифт времени
Nname.s = "...RADIO BASS... ...Onlain FM radio... ...Каналов-0...0 kHz... ...PureBasic... ...http://purebasic.info/..."
vol = 50
volume = 0.5
xx = 20
StartRecord=0
fon = RGB(9, 93, 197)
fra = RGB(200, 200, 200)
box=-100
vn=800
vb=800
vcc=13
CatchImage(#im_fon, ?Im1, ?Im1End -?Im1) ; фон
CatchImage(#im_rec, ?Im2, ?Im2End -?Im2) ; фон запись
CatchImage(#sss, ?Im3, ?Im3End -?Im3) ; кнопка 1
CatchImage(#hhh, ?Im4, ?Im4End -?Im4) ; фон эквалайзера
CatchImage(#playlist,?Im5, ?Im5End -?Im5) ; фон плейлист
;{----------------------Параметры спектра-----------------------------------
x=128 ;позиция от начала x
y=29 ;позиция от начала y
column=265 ;колличество столбов
width=1 ;ширина столба
height=13 ;высота столба
h=1 ;ширина между столбами
color=RGB(1, 95, 181) ;цвет
;}----------------------------------------------------------------------------
CreateImage(#bar, 228,1 ) ; трек бар
CreateImage(#vol, 90,8 ) ; громкость
CreateImage(#im2,226,14) ; фон бег стр
CreateImage(#spektr,width,height) ; спектр
CreateImage(#time, 110,17 )
Procedure Stroka()
;----------бегущаа строка------------------------------
StartDrawing(ImageOutput(#im2))
Box(0,0,226,14,fon)
BackColor(fon) ; Устанавливает по умолчанию цвет фона
xx-speed
If xx<0-TextWidth(Nname)-20 ;(если больше края на длину текста)
xx=230 ; Отправляем назад на длину окна - 20px
EndIf
DrawingFont(FontID(#Font_1))
DrawText(xx, 0,Nname,fra)
StopDrawing()
SetGadgetState(#im2, ImageID(#im2))
;---------спектр----------------------------------------
Dim FFT.f(1024)
BASS_ChannelGetData(Handle,@FFT(),#BASS_DATA_FFT2048)
For f=0 To column Step 5
Val= Sqr(FFT(f)) * 50 ;получение параметра по частотам
StartDrawing(ImageOutput(#spektr))
DrawImage(ImageID(#hhh),0,0,111,17)
Box(0,box,20,height,fon) ;RGB(9, 93, 197)
Box(0,height-Val,20,Val,fra)
Box(0,height-Val,20,Val/6,RGB(255, 255, 255))
StopDrawing()
SetGadgetState(303+f,ImageID(#spektr))
Next f
;-------------; выводим инф FM-------------------------
If Handle
*tg = BASS_ChannelGetTags(Handle, #BASS_TAG_META)
If *tg
tit.s = *tg\tit ; название песни
Nname.s =Title.s+"....."+ tit ; назв.песни
EndIf
EndIf
;---------------громкость-----------------------------------
StartDrawing(ImageOutput(#vol))
Box(0,0,100,8,RGB(24, 24, 24)) ; фон громкости
Box(0,0,vol,5,RGB(158, 157, 132)) ; цвет графика громкости
aa =1
For dd=0 To 53
LineXY(aa, 0, aa, 5, RGB(24, 24, 24))
aa = aa + 2
Next dd
LineXY(0, 0, 0, 4,RGB(158, 157, 132))
LineXY(0, 7, 100, 7, RGB(71, 71, 71))
StopDrawing()
SetGadgetState(#vol,ImageID(#vol))
;--------------------------Таймер--------------------------------------------
time = BASS_ChannelBytes2Seconds(Handle, BASS_ChannelGetPosition(Handle, #BASS_POS_BYTE))
len=BASS_ChannelGetLength(Handle, #BASS_POS_BYTE)
tim=BASS_ChannelBytes2Seconds(Handle, len)
text$ = Str(time/60) + ":" + RSet(Str(time % 60), 2, "00") ; преобразование секунд в мин.сек
If BASS_ChannelIsActive(Handle) = #BASS_ACTIVE_STOPPED
Else
minute$ = Str(Minute(tim))
sekunde$ = Str(Second(tim))
rez$ = minute$+":"+sekunde$ ; если канал активен начинаем отсчет
StartDrawing(ImageOutput(#time))
Box(0,0,110,17, RGB(9, 93, 197))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(#Font_4))
DrawText(65, 1,rez$,RGB(200, 200, 200))
DrawText(15, 1,text$,RGB(200, 200, 200))
StopDrawing()
SetGadgetState(#time,ImageID(#time))
EndIf
;{--------------------Бар трек----------------------------------------------------
StartDrawing(ImageOutput(#bar))
Box(0,0,228,1,RGB(24, 24, 24)) ; фон бара
If tim>0
Box(0,0,(time*228)/tim,1,RGB(101, 101, 101)) ; бар
EndIf
StopDrawing()
SetGadgetState(#bar_1,ImageID(#bar))
;}----------------------------------------------------------------------------
EndProcedure
Procedure Load_FM(*x) ; Создание потокового звука, получаемыми из сети Интернет
SetGadgetState(#PlayAll, 0)
vn=800
SetGadgetText(#Text_3,Title)
BASS_StreamFree(Handle)
Handle=BASS_StreamCreateURL(PeekS(*x), 0, 0, #Null, 0)
BASS_ChannelPlay(Handle,0)
BASS_ChannelSetAttribute( Handle,#BASS_ATTRIB_VOL,volume)
speed.f=1
xx= 20
HideGadget(#rec,0)
HideGadget(#but_1,1)
HideGadget(#but_4,1)
ResizeGadget(#time,8000,#PB_Ignore,#PB_Ignore,#PB_Ignore) ; убираем
EndProcedure
Procedure LoadPlayList() ; плейлист fm
Protected Result=0
ClearList(PlayList())
ClearGadgetItems(#Play_ListFM)
If OpenPreferences("radio.pls")
x=1
PreferenceGroup(stil)
Repeat
URL.s=ReadPreferenceString("File"+Str(x), "")
Title.s=ReadPreferenceString("Title"+Str(x), "")
If URL=""
Break
EndIf
AddElement(PlayList())
PlayList()\URL=URL
PlayList()\Title=Title
x+1
ForEver
If x>1
Result=1
EndIf
ClosePreferences()
EndIf
EndProcedure
Procedure LoadFile(*mem)
Protected Resutlt=0
*TempBuffer=AllocateMemory(1030)
For i=1 To 100
If hData > 0
InternetReadFile_( hData,*TempBuffer, 1024, @CountBytes.l )
Else
CountBytes = 0
EndIf
CopyMemory(*TempBuffer, *mem+Resutlt, CountBytes)
Resutlt=Resutlt+CountBytes
If StartRecord=1
If CountBytes>0
If IsFile(1)
WriteData(1, *TempBuffer, CountBytes)
FlushFileBuffers(1)
EndIf
EndIf
EndIf
Next i
FreeMemory(*TempBuffer)
ProcedureReturn Resutlt
EndProcedure
Procedure Thread(*xx)
Repeat
CountBytes=LoadFile(*mem)
Until BreakThread=1
EndProcedure
Procedure.s Secundomer() ;- Сама процедура таймера - всего 3 строчки!
a+1
If a=10:a=0:b=b+1:EndIf
SetGadgetText(#tamer,"Запись: "+FormatDate("%ii:%ss", b)+":"+ Str(a))
EndProcedure
Procedure Animate_Gadget() ; Развернуть/Свернуть плейлист
If min=1 ; Развернуть плейлист
HideWindow(#Window_2,0)
For i=0 To 330 Step 6
ResizeWindow(#Window_2, #PB_Ignore, #PB_Ignore,#PB_Ignore,i)
For x=1 To 10
WindowEvent()
Next x
Delay(8)
Next i
Else ; Свернуть плейлист
For i=330 To 0 Step -6
ResizeWindow(#Window_2, #PB_Ignore, #PB_Ignore,#PB_Ignore,i)
For x=1 To 10
WindowEvent()
Next x
Delay(8)
Next i
HideWindow(#Window_2,1)
EndIf
EndProcedure
Procedure Direct() ; Ск. директории
NbSongs = 0
puti = GetPathPart(Rep)
ClearGadgetItems(#Play_ListMP3)
If ExamineDirectory(0, GetPathPart(Rep), "*.*")
Repeat
FileType = NextDirectoryEntry(0)
If FileType
FileName.s = DirectoryEntryName(0)
If FileName.s <> "." And FileName.s <> ".."
Ext$ = LCase(Right(FileName.s,4))
If Ext$ = ".wav" Or Ext$ = ".mp3" Or Ext$ = ".mid"
AddGadgetItem(#Play_ListMP3, -1, FileName.s)
NbSongs = NbSongs + 1
EndIf
EndIf
EndIf
SetGadgetState(#Play_ListMP3, SongPlaying )
Until FileType = 0
EndIf
EndProcedure
Procedure Play() ; играть пленлист
BASS_StreamFree(Handle) ; очищаем поток
File.s = puti+GetGadgetText(#Play_ListMP3) ; получаем путь из суммы директории и имени с плей листа
Handle=BASS_StreamCreateFile(0, @File, 0, 0, 0)
BASS_ChannelPlay(Handle,0)
BASS_ChannelSetAttribute( Handle,#BASS_ATTRIB_VOL,volume)
SetGadgetState(#PlayAll, 1) ; разрешаем проигрывание по очереди
len=BASS_ChannelGetLength(Handle, #BASS_POS_BYTE)
tim=BASS_ChannelBytes2Seconds(Handle, len)
minute$ = Str(Minute(tim))
sekunde$ = Str(Second(tim))
rez$ = minute$+":"+sekunde$
Nn.s = GetGadgetText(#Play_ListMP3) ; получаем название трека
max = CountGadgetItems(#Play_ListMP3)
pozis = GetGadgetState(#Play_ListMP3)+1
If Handle
*tag = BASS_ChannelGetTags(Handle, #BASS_TAG_ID3)
If *tag
artist.s = *tag\artist ; артист
title.s = *tag\title ; название песни
album.s = *tag\album ; альбом
year.s = *tag\year ; год
Nname.s =Str(pozis)+"/"+Str(max)+" "+ Nn.s +" "+ rez$+" минут" ; выводим имя + название трека + время
Else ; если нет тега выводим название файла
Nname.s=Str(pozis)+"/"+Str(max)+" "+ Nn.s
EndIf
EndIf
HideGadget(#but_1,0)
HideGadget(#but_4,0)
HideGadget(#rec,1)
vn=25
vb=80
ResizeGadget(#Text_3,8000,#PB_Ignore,#PB_Ignore,#PB_Ignore) ; убираем
ResizeGadget(#time, 13 ,#PB_Ignore,#PB_Ignore,#PB_Ignore) ; убираем
EndProcedure
Procedure IsMouseOver(wnd) ; Эта процедура определяет находится ли курсор мышки над заданым окном или гаджетом
GetWindowRect_(wnd,re.RECT)
GetCursorPos_(pt.POINT)
Result.l = PtInRect_(@re, pt\x | (pt\y<<32) )
ProcedureReturn Result
EndProcedure
Procedure EventButton1(Event, Gadget, Type, ImageGadget) ; Обр. соб. от кнопки
Static Button
If Event=#WM_MOUSEMOVE ; Переместилась мышка
If IsMouseOver(GadgetID(#but_1))
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
Button=1
ResizeGadget(#pods,13,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ElseIf Button=1
Button=0
ResizeGadget(#pods,-100,#PB_Ignore,#PB_Ignore,#PB_Ignore)
EndIf
EndIf
EndProcedure
Procedure EventButton2(Event, Gadget, Type, ImageGadget) ; Обр. соб. от кнопки
Static Button
If Event=#WM_MOUSEMOVE ; Переместилась мышка
If IsMouseOver(GadgetID(#pausa))
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
Button=1
ResizeGadget(#pods,32,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ElseIf Button=1
Button=0
ResizeGadget(#pods,-100,#PB_Ignore,#PB_Ignore,#PB_Ignore)
EndIf
EndIf
EndProcedure
Procedure EventButton3(Event, Gadget, Type, ImageGadget) ; Обр. соб. от кнопки
Static Button
If Event=#WM_MOUSEMOVE ; Переместилась мышка
If IsMouseOver(GadgetID(#play))
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
Button=1
ResizeGadget(#pods,51,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ElseIf Button=1
Button=0
ResizeGadget(#pods,-100,#PB_Ignore,#PB_Ignore,#PB_Ignore)
EndIf
EndIf
EndProcedure
Procedure EventButton4(Event, Gadget, Type, ImageGadget) ; Обр. соб. от кнопки
Static Button
If Event=#WM_MOUSEMOVE ; Переместилась мышка
If IsMouseOver(GadgetID(#rec))
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
Button=1
ResizeGadget(#pods,70,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ElseIf Button=1
Button=0
ResizeGadget(#pods,-100,#PB_Ignore,#PB_Ignore,#PB_Ignore)
EndIf
EndIf
EndProcedure
Procedure EventButton5(Event, Gadget, Type, ImageGadget) ; Обр. соб. от кнопки
Static Button
If Event=#WM_MOUSEMOVE ; Переместилась мышка
If IsMouseOver(GadgetID(#but_4))
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
Button=1
ResizeGadget(#pods,89,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ElseIf Button=1
Button=0
ResizeGadget(#pods,-100,#PB_Ignore,#PB_Ignore,#PB_Ignore)
EndIf
EndIf
EndProcedure
Procedure EventButton6(Event, Gadget, Type, ImageGadget) ; Обр. соб. от кнопки
Static Button
If Event=#WM_MOUSEMOVE ; Переместилась мышка
If IsMouseOver(GadgetID(#plist))
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
Button=1
ResizeGadget(#pods,108,#PB_Ignore,#PB_Ignore,#PB_Ignore)
ElseIf Button=1
Button=0
ResizeGadget(#pods,-100,#PB_Ignore,#PB_Ignore,#PB_Ignore)
EndIf
EndIf
EndProcedure
Procedure CallBack(WND,Message,lParam,wParam) ; перемещение окна доп с основным окном
Result = #PB_ProcessPureBasicEvents
Select WND
Case WinMain
Select Message
Case #WM_MOVE ; если окно перемещается (основное)
ResizeWindow(#Window_2,WindowX(#Window_0),WindowY(#Window_0)+75,#PB_Ignore,#PB_Ignore)
EndSelect
EndSelect
ProcedureReturn Result
EndProcedure
;{------------------Окно--------------------------------
OpenWindow (#Window_0,0,0,250,73,"Окно",#PB_Window_ScreenCentered|#PB_Window_BorderLess| #PB_Window_Invisible)
SetWinBackgroundImage(WindowID(#Window_0), ImageID(#im_fon) )
ImageGadget(#im2,12,13, 226, 14,ImageID(#im2)) ; фон бег стр
ImageGadget(#time,8000,28,110, 17,ImageID(#time)) ; фон таймер
TextGadget(#Text_3,vcc,29,111,15,"Станция",#PB_Text_Center)
SetGadgetColor(#Text_3, #PB_Gadget_FrontColor, RGB(200, 200, 200)) ; текст
SetGadgetColor(#Text_3, #PB_Gadget_BackColor, RGB(9, 93, 197)) ; фон RGB(9, 93, 197)
SetGadgetFont (#Text_3, FontID(#Font_1))
TextGadget (#tamer,13,29,111,15,"Запись: 00:00:00",#PB_Text_Center)
SetGadgetColor(#tamer, #PB_Gadget_FrontColor, RGB(200, 200, 200)) ; текст
SetGadgetColor(#tamer, #PB_Gadget_BackColor, RGB(9, 93, 197)) ; фон RGB(9, 93, 197)
HideGadget (#tamer,1)
ButtonID=ImageGadget(#but_1,13,55,17,12,0) ; <<<<<
ButtonID=ImageGadget(#pausa,32,55,17,12,0) ; пауза
ButtonID=ImageGadget(#play, 51,55,17,12,0) ; играть
ButtonID=ImageGadget(#rec, 70,55,17,12,0) ; запись
ButtonID=ImageGadget(#but_4,89,55,17,12,0) ; >>>>>
ButtonID=ImageGadget(#plist,108,55,17,12,0) ; плейлист
ImageGadget(#pods,-89,50,23,23,ImageID(#sss)) ;подсветка
ImageGadget(#vol, 135,57, 0, 0 ,ImageID(#vol)) ; громкость
HideGadget(#rec,1)
HideGadget(#but_1,1)
HideGadget(#but_4,1)
TextGadget(#vol_in,230,55,15,10,"50") ; громкость
SetGadgetColor(#vol_in, #PB_Gadget_BackColor, RGB(24, 24, 24))
SetGadgetColor(#vol_in, #PB_Gadget_FrontColor , RGB(158, 157, 132))
SetGadgetFont (#vol_in, FontID(#Font_3))
CheckBoxGadget(#PlayAll,0, 0, 0 , 0, "")
SetGadgetState(#PlayAll, 0)
ImageGadget(#bar_1,11, 51,0,0,ImageID(#bar)) ; вывод бара
For f=0 To column Step 5
ImageGadget(303+f,x, y,0,0,ImageID(#spektr)) ; вывод спектра
x=x+(width+h)
Next f
;----------------------------------------------------
HyperLinkGadget(#clos,244,1,7,7,"*",RGB(206, 2, 4)) ; закрыть программу
PureCOLOR_SetGadgetColor(#clos, #PureCOLOR_SystemColor,#PureCOLOR_DontSetBackColor )
SetGadgetFont(#clos, FontID(#Font_2))
;{--------------Окно плейлиста------------------------------------------------
x= WindowX(#Window_0)+0
y= WindowY(#Window_0)+75
If OpenWindow (#Window_2,x,y,250,0, "Плейлист", #PB_Window_BorderLess)
SetWinBackgroundImage(WindowID(#Window_2),ImageID(#playlist) )
HyperLinkGadget(#mp3,7,9,236,12," ----------------------- Список станций ------------------------",RGB(128, 128, 128)) ; #Text_2,7,79,236,12
SetGadgetColor(#mp3, #PB_Gadget_FrontColor, RGB(95, 95, 95)) ; текст
SetGadgetColor(#mp3, #PB_Gadget_BackColor, RGB(24, 24, 24)) ; фон
HyperLinkGadget(#open,3000,9,70,12,"Открыть mp3",RGB(128, 128, 128)) ;#open,30,79,70,12
SetGadgetColor(#open, #PB_Gadget_FrontColor, RGB(95, 95, 95)) ; текст
SetGadgetColor(#open, #PB_Gadget_BackColor, RGB(24, 24, 24)) ; фон
HyperLinkGadget(#fm,1300,9,100,12,"Список станций FM",RGB(128, 128, 128)) ;#fm,130,79,100,12
SetGadgetColor(#fm, #PB_Gadget_FrontColor, RGB(95, 95, 95)) ; текст
SetGadgetColor(#fm, #PB_Gadget_BackColor, RGB(24, 24, 24)) ; фон
;---------------------------------------------------
ContainerGadget(#Cont_1,800,42,234,282) ; mp3 ; #Cont_1,8,92,234,300
ListViewGadget(#Play_ListMP3, -2, -2, 255, 288)
SetGadgetColor(#Play_ListMP3,#PB_Gadget_FrontColor,RGB(95, 95, 95))
SetGadgetColor(#Play_ListMP3,#PB_Gadget_BackColor, RGB(24, 24, 24))
CloseGadgetList()
;---------------------------------------------------
ContainerGadget(#Cont_2,8,21,234,300) ; fm ; #Cont_2,8,92,234,300
ListViewGadget(#Play_ListFm, -2, -2, 255, 310)
SetGadgetColor(#Play_ListFm,#PB_Gadget_FrontColor,RGB(95, 95, 95))
SetGadgetColor(#Play_ListFm,#PB_Gadget_BackColor, RGB(24, 24, 24))
CloseGadgetList()
;----------------------------------------------------
stil ="Всё подряд"
LoadPlayList()
ForEach PlayList()
AddGadgetItem(#Play_ListFM,-1,PlayList()\Title)
Next
;-----Чтение пути-----------------
If OpenPreferences("imf.pcs")
Rep.s = ReadPreferenceString("Путь", "Нет")
Poz.s = ReadPreferenceString("Позиция", "Нет")
ClosePreferences()
EndIf
SongPlaying = Val(Poz.s)
Direct()
EndIf
WinMain_0 = WindowID(#Window_2)
WinMain = WindowID(#Window_0)
SetWindowCallback(@CallBack())
;}------------------------------------------------------------------
BASS_Init(-1, 44100, 0, WindowID(#Window_0), #Null)
SetTimer_(WindowID(#Window_0),Event,35,@Stroka())
HideWindow(#Window_0,0)
HideWindow(#Window_2,1)
;{-----------------Главный цикл-------------------------
Repeat
Event = WaitWindowEvent()
Window = EventWindow()
Gadget = EventGadget()
mx.l = WindowMouseX(#Window_0) ; координаты x
my.l = WindowMouseY(#Window_0) ; координаты y
;------переключение треков-----------------------
If GetGadgetState(#PlayAll) ; да или нет
If BASS_ChannelIsActive(Handle) ; если канал активен
Else
SongPlaying = GetGadgetState(#Play_ListMP3)+ 1
If SongPlaying < NbSongs
SetGadgetState(#Play_ListMP3, SongPlaying )
Play()
EndIf
EndIf
EndIf
;----перетягивание------------------------
If Event = #WM_LBUTTONDOWN
If Window=#Window_0
SendMessage_(WindowID(#Window_0),#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndIf
If Window=#Window_2
SendMessage_(WindowID(#Window_2),#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndIf
EndIf
;-----------------------------------------
Select Event
Case #WM_LBUTTONDBLCLK ; обработка события на двойной клик
If Gadget = #Play_ListMP3
SetGadgetText(#Text_3,"MP3 Player")
Play()
EndIf
;------------------------------------------
If Gadget = #Play_ListFM ; FM onlain
;///////////////////////////////////////////////////////////////////
Row = GetGadgetState(#Play_ListFM) ; получаем позицию
SelectElement(PlayList(),Row)
URL.s =PlayList()\URL ; адрес
Title.s=PlayList()\Title ; имя
If IsThread(ThreadID)=0
ThreadID=CreateThread(@Load_FM(), @URL)
xx= 40
speed.f=0
Nname.s="Загрузка адреса"
Else
MessageRequester("", "Идёт загрузка!", #MB_OK|#MB_ICONWARNING)
EndIf
;///////////////////////////////////////////////////////////////////
vn=800
vb=800
ResizeGadget(#Text_3,13, #PB_Ignore,#PB_Ignore,#PB_Ignore) ; убираем
EndIf
Case #PB_Event_Gadget
Select EventGadget()
Case #im2, #Text_3
SendMessage_(WindowID(#Window_0),#WM_NCLBUTTONDOWN, #HTCAPTION,0) ; перетянуть за картинку
Case #open
;----------Открытие mp3-------------------------------------------------------------------
If EventType()=#PB_EventType_LeftClick
Rep.s = OpenFileRequester("","","*.*|*.*",0)
Direct()
;---Совпадение плейлиста и открыт. mp3-------------------
Nasd.s= GetFilePart(Rep.s) ; извлекаем имя
For n=0 To 1000
SetGadgetState(#Play_ListMP3, n)
If Nasd.s =GetGadgetText(#Play_ListMP3)
SetGadgetState(#Play_ListMP3, n)
Break
EndIf
Next
;--------------------------------------------------------
BASS_StreamFree(Handle)
Handle=BASS_StreamCreateFile(0, @Rep, 0, 0, 0)
Play()
EndIf
Case #fm
ResizeGadget(#mp3, 8, #PB_Ignore,#PB_Ignore,#PB_Ignore) ; показываем выбор
ResizeGadget(#Cont_2,8, #PB_Ignore,#PB_Ignore,#PB_Ignore) ; показываем плейлист fm
ResizeGadget(#fm, 1300,#PB_Ignore,#PB_Ignore,#PB_Ignore) ; убираем выбор
ResizeGadget(#open, 3000,#PB_Ignore,#PB_Ignore,#PB_Ignore) ; убираем открыть mp3
ResizeGadget(#Cont_1,800, #PB_Ignore,#PB_Ignore,#PB_Ignore) ; убираем плейлист мз3
SetGadgetText(#Text_3,Title.s)
Case #mp3
ResizeGadget(#mp3, 800, #PB_Ignore,#PB_Ignore,#PB_Ignore) ; убираем выбор
ResizeGadget(#Cont_2,800, #PB_Ignore,#PB_Ignore,#PB_Ignore) ; убираем плейлист fm
ResizeGadget(#fm, 130, #PB_Ignore,#PB_Ignore,#PB_Ignore) ; показываем выбор
ResizeGadget(#open, 30, #PB_Ignore,#PB_Ignore,#PB_Ignore) ; показываем открыть mp3
ResizeGadget(#Cont_1,8, #PB_Ignore,#PB_Ignore,#PB_Ignore) ; показываем плейлист мз3
SetGadgetText(#Text_3,"MP3 Player")
Case #but_1 ; <<<<<
SongPlaying = GetGadgetState(#Play_ListMP3)- 1
If SongPlaying < NbSongs
SetGadgetState(#Play_ListMP3, SongPlaying )
Play()
EndIf
Case #but_4 ; >>>>>
SongPlaying = GetGadgetState(#Play_ListMP3)+ 1
If SongPlaying < NbSongs
SetGadgetState(#Play_ListMP3, SongPlaying )
Play()
EndIf
Case #play
Play()
Case #rec
;---------------------запись-------------------------------------
rec = rec ! 1
If rec=1
BreakThread=1
Count=0
Repeat
Delay(50)
Count+1
Until IsThread(ThreadID)=0 Or Count>20
If hInet
InternetCloseHandle_(hInet)
hInet=0
EndIf
If hData
InternetCloseHandle_(hData)
hData=0
EndIf
hInet = InternetOpen_( @agent,0,0,0,0 )
hData = InternetOpenUrl_( hInet, @URL.s, "", 0, $8000000, 0 )
BreakThread=0
ThreadID=CreateThread(@Thread(),0)
File.s=FormatDate("%hh_%ii_%ss"+".mp3", Date())
If File<>""
If CheckFilename(GetFilePart(File))
If CreateFile(1,File)
StartRecord=1
HideGadget (#tamer,0)
a=0:b=0
StartTimer( 1 , 100 , @Secundomer())
EndIf
EndIf
EndIf
fon=RGB(255, 26, 25)
fra=RGB(255, 255, 255)
box=0
SetGadgetColor(#tamer, #PB_Gadget_FrontColor, fra)
SetGadgetColor(#tamer, #PB_Gadget_BackColor, fon)
SetWinBackgroundImage(WindowID(#Window_0), ImageID(#im_rec) )
;---------------------------стоп запись--------------------------------
Else
BreakThread=1
Count=0
Repeat
Delay(50)
Count+1
Until IsThread(ThreadID)=0 Or Count>20
If hInet
InternetCloseHandle_(hInet)
hInet=0
EndIf
If hData
InternetCloseHandle_(hData)
hData=0
EndIf
StartRecord=0
Delay(200)
If IsFile(1)
CloseFile(1)
EndIf
HideGadget(#tamer,1)
EndTimer(1)
fon=RGB(9, 93, 197)
fra=RGB(200, 200, 200)
box=-100
SetGadgetColor(#Text_3, #PB_Gadget_FrontColor, fra)
SetGadgetColor(#Text_3, #PB_Gadget_BackColor, fon)
SetWinBackgroundImage(WindowID(#Window_0), ImageID(#im_fon) )
SetGadgetText(#Text_3,Title)
EndIf
Case #plist
min = min ! 1
Animate_Gadget() ; анимированное появление fm
Case #pausa ; пауза
Pausa = Pausa ! 1
If Pausa
HideGadget(#rec,1)
BASS_ChannelPause(Handle)
Else
HideGadget(#rec,0)
BASS_ChannelPlay(Handle,0)
EndIf
Case #clos
If min =1
For i=330 To 0 Step -6
ResizeWindow(#Window_2, #PB_Ignore, #PB_Ignore,#PB_Ignore,i)
For x=1 To 10
WindowEvent()
Next x
Delay(8)
Next i
EndIf
;----Запись параметров перед выходом-----------
OpenPreferences("imf.pcs")
WritePreferenceString("Путь",Rep.s)
WritePreferenceString("Позиция",Str(GetGadgetState(#Play_ListMP3)))
ClosePreferences()
;---------------------------------------------
Break
Case #vol ; громкость
x=WindowMouseX(#Window_0)
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
vol=x-GadgetX(#vol)
volume = vol/100
BASS_ChannelSetAttribute( Handle,#BASS_ATTRIB_VOL,volume)
SetGadgetText(#vol_in, Str(vol))
Case #bar_1 ; управление трек баром
x=WindowMouseX(#Window_0) ;Возвращает X координату положения курсора мыши во внутренней области окна
cx=x-GadgetX(#bar_1) ;GadgetX(289)-Возвращает координату X указанного #Gadget
pos=cx*((len)/228) ; 424 - длина бара (pos меняет значение от 0 до len )
BASS_ChannelSetPosition(Handle, pos, #BASS_POS_BYTE)
EndSelect
EndSelect
EventButton1(Event, Gadget, Type, 1)
EventButton2(Event, Gadget, Type, 1)
EventButton3(Event, Gadget, Type, 1)
EventButton4(Event, Gadget, Type, 1)
EventButton5(Event, Gadget, Type, 1)
EventButton6(Event, Gadget, Type, 1)
ForEver
;}-------------------------------------------------------
DataSection
Im1:
IncludeBinary "mini_новый_2.png"
Im1End:
Im2:
IncludeBinary "mini_запись_2.png"
Im2End:
Im3:
IncludeBinary "кнопка.png"
Im3End:
Im4:
IncludeBinary "ddd.png"
Im4End:
Im5:
IncludeBinary "плейлист.png"
Im5End:
EndDataSection