Jump to content



Photo

Handy MusicPlayer + source


  • Please log in to reply
No replies to this topic

#1 Jjo

Jjo

    Seeker

  • Active Members
  • 29 posts

Posted 20 December 2009 - 12:17 PM

Musicplayer which can be controlled by keys f2,f4,f6... and it can download music from youtube and convert it to mp3. Works with bass.dll.

Feel free to modify or use parts of the code.

.Rar download here


AutoIt         
#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_icon="icon.ico" #AutoIt3Wrapper_outfile="Handy.exe" #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include "GUIConstantsEx.au3" #include "GuiListView.au3" #include "bass.au3" #include "inet.au3" AutoItSetOption("TrayAutoPause", 0) AutoItSetOption("TrayMenuMode", 1) Opt("GUIResizeMode",802) $ret = _BASS_Startup("bass.dll") _BASS_Init(0, -1, 44100, 0, "") If @error Then     MsgBox(0, "Error", "Could not initialize audio")     Exit EndIf Dim $folders[50000][2] Dim $files[50000][4] Dim $played[10000] Global $filep = -1 Global $download Global $folp Global $listdir Global $msg Global $filefp Global $mini Global $find Global $dfile Global $bytes Global $sound Global $isfind Global $win Global $repeat = 0 $mini=0 $should = 0 $sound = 0 $pl = 0 $next = 0 $check = 0 $shuffle=1 $vsel = -1 $back = 0 $dl = 0 $vbytes = -10000 $size = 0 $name = "" $vpros = 0 $earlier = 0 $seton=0 $np=-1 $aa=0 $lvl=0 $length=0 If Not FileExists(@AppDataDir & "\YouTube") Then DirCreate(@AppDataDir & "\YouTube") If Not FileExists(@AppDataDir & "\YouTube\ffmpeg.exe") Then FileCopy(@ScriptDir & "\ffmpeg.exe", @AppDataDir & "\YouTube\ffmpeg.exe") If Not FileExists(@ScriptDir & "\YouTube") Then DirCreate(@ScriptDir & "\YouTube") $listdir = "" & @ScriptDir & "\list.dat" If FileExists($listdir) = 0 Then     MsgBox(0, "Creating playlist", "Select your music folder")     $dir = FileSelectFolder("Select your music folder.", "")     If $dir = "" Then         While $dir = ""             MsgBox(0, "Error", "Please select music folder correctly")             $dir = FileSelectFolder("Select your music folder.", "")         WEnd     EndIf     list($dir)     list(@ScriptDir & "\Youtube")     tofile() ElseIf FileExists($listdir) = 1 Then     fromfile() EndIf ReDim $files[$filep + 1][4] $win = "HandyMusicPlayer " & $filep+1 & " Tracks" $settings = GUICreate("Settings",200,200) $sl1 = GUICtrlCreateLabel("Keys:",10,10) $sl2 = GUICtrlCreateLabel("F2=Pause",15,25) $sl3 = GUICtrlCreateLabel("F4=Play",15,40) $sl4 = GUICtrlCreateLabel("F6=Previous",15,55) $sl5 = GUICtrlCreateLabel("F8=Next",15,70) $sl6 = GUICtrlCreateLabel("F9=Toggle shuffle",15,85) $sl7 = GUICtrlCreateLabel("F12=Toggle repeat",15,100) $sb1 = GUICtrlCreateButton("OK", 160,160,30,30) $sc1 = GUICtrlCreateCheckbox("Shuffle", 10, 120) $sc2 = GUICtrlCreateCheckbox("Repeat", 10, 140) $dlgui = GUICreate("Downloading", 300, 50) $dlstatus = GUICtrlCreateLabel("", 10, 10, 280, 50) $gui = GUICreate($win, 400, 300) GUISetIcon("icon.ico") $l1 = GUICtrlCreateLabel("Music information, repeat = "&$repeat&", shuffle = "&$shuffle&"", 10, 10, 200, 15) $l2 = GUICtrlCreateLabel("Name:", 15, 25, 250, 15) $l3 = GUICtrlCreateLabel("%:", 15, 40, 320, 15) $p = GUICtrlCreateProgress(15,55,370,15) $b1 = GUICtrlCreateButton("Play", 170, 80, 70, 30) $b2 = GUICtrlCreateButton("Pause", 90, 80, 70, 30) $b3 = GUICtrlCreateButton("Previous", 10, 80, 70, 30) $b4 = GUICtrlCreateButton("Next", 250, 80, 70, 30) $b5 = GUICtrlCreateButton("Find track", 10, 120, 150, 30) $b6 = GUICtrlCreateButton("Download from Youtube", 170, 120, 150, 30) $b7 = GUICtrlCreateButton("Settings", 335, 10, 55, 30) $b8 = GUICtrlCreateButton("Rebuild list", 330, 80, 60, 60) $b9 = GUICtrlCreateButton("Mini mode", 260, 10, 65, 30) $list = _GUICtrlListView_Create($gui, "Playlist", 0, 150, 400, 150) _GUICtrlListView_SetColumnWidth($list, 0, 370) _GUICtrlListView_AddColumn($list, "Directorys") _GUICtrlListView_AddColumn($list, "Search results") _GUICtrlListView_AddColumn($list, "Result directorys") _GUICtrlListView_HideColumn($list, 1) _GUICtrlListView_HideColumn($list, 2) _GUICtrlListView_HideColumn($list, 3) _GUICtrlListView_AddArray($list, $files) GUISetState(@SW_SHOW, $gui) While 1     $alr = 0     $state=_BASS_ChannelIsActive($sound)     $pros=_BASS_ChannelGetPosition($sound, $BASS_POS_BYTE)/($length+0.0000001)*100     GUICtrlSetData($p,$pros)     if $vpros < $pros+0.1 then         GUICtrlSetData($l3,"%: "&$pros)         $vpros=$pros     endif     If $isfind = 1 Then         $var = _GUICtrlListView_SubItemHitTest($list)         If _IsPressed(01) and $var[0] > -1 Then             For $i = 1 To $filep                 If $files[$i][0] = $files[$var[0]][2] Then                     $sel = $i                     _GUICtrlListView_SetSelectionMark($list, $i)                 EndIf             Next         EndIf     Else         $sel = _GUICtrlListView_GetSelectionMark($list)     EndIf     If $state = $BASS_ACTIVE_STOPPED And $earlier = 1 Then         $next = 1         If $repeat = 1 Then $check = 1     EndIf     If $sel <> $vsel And $sel > -1 Then $next = 1     If $next = 1 Or $back = 1 Then         $earlier = 1         $vpos = 0         _BASS_SampleFree($sound)         If $check = 0 Then             If $back = 0 Then                 If $sel = $vsel Then                     if $shuffle=1 then                         $np = Random(1, $filep, 1)                     elseif $shuffle=0 then                         if $np < $filep then                             $np=$np+1                         Else                             $np=0                         endif                     endif                 Else                     $np = $sel                 EndIf                 $pl = $pl + 1                 $played[$pl] = $np             ElseIf $back = 1 Then                 $pl = $pl - 1             EndIf         EndIf         $spot = $played[$pl]         If $isfind = 1 Then             _GUICtrlListView_SetColumnWidth($list, 0, 370)             _GUICtrlListView_HideColumn($list, 1)             _GUICtrlListView_HideColumn($list, 2)             _GUICtrlListView_HideColumn($list, 3)         EndIf         $sound = _BASS_SampleLoad( False, $files[$spot][1], 0, 1, 0, 1, $BASS_SAMPLE_OVER_POS)         $length = _BASS_ChannelGetLength( $sound, $BASS_POS_BYTE)         GUICtrlSetData($l2, "Name: " & $files[$spot][0] & "")         GUICtrlSetData($l3,"%: 0")         $vpros=0         $sound=_BASS_SampleGetChannel($sound, 0)         _BASS_ChannelPlay($sound,1)         if @error = $BASS_ERROR_HANDLE then MsgBox(0,"Error", "Handle is not a valid channel.")         if @error = $BASS_ERROR_START then MsgBox(0,"Error", "The output is paused/stopped, use BASS_Start to start it.")         if @error = $BASS_ERROR_DECODE then MsgBox(0,"Error", "The channel is not playable, it's a 'decoding channel'.")         if @error = $BASS_ERROR_BUFLOST then MsgBox(0,"Error", "Should not happen... check that a valid window handle was used with BASS_Init.")         if @error = $BASS_ERROR_NOHW then MsgBox(0,"Error", "No hardware voices are available.")         $next = 0         $back = 0         $isfind = 0     EndIf     $vsel = $sel     $msg = GUIGetMsg()     if $msg = $b9 Then         $w=@DesktopWidth         $h=@DesktopHeight         if $mini=0 then             WindowGlide($gui, $win, $w-405, $h-143, 405, 113, 200)             WinSetOnTop($win,"",1)             $mini=1         Else             WindowGlide($gui, $win, $w/2-200, $h/2-150, 405, 333, 200)             WinSetOnTop($win,"",0)             $mini=0         endif     endif     If $msg = $b1 Or _IsPressed(73) And $state = $BASS_ACTIVE_PAUSED Then         _BASS_ChannelPlay($sound,0)         Send("{F4 up}")     EndIf     If $msg = $b2 Or _IsPressed(71) And $state = $BASS_ACTIVE_PLAYING Then         _BASS_ChannelPause($sound)         Send("{F2 up}")     EndIf     If $msg = $b3 Or _IsPressed(75) And $pl > 1 Then         $back = 1         Send("{F6 up}")     EndIf     If $msg = $b4 Or _IsPressed(77) Then         $next = 1         Send("{F8 up}")     EndIf     If $msg = $b5 and $dl=0 and $seton=0 and $isfind=0 Then         if $isfind=1 then             _GUICtrlListView_SetColumnWidth($list, 0, 370)             _GUICtrlListView_HideColumn($list, 1)             _GUICtrlListView_HideColumn($list, 2)             _GUICtrlListView_HideColumn($list, 3)         endif         $isfind=0         $ff = InputBox("Find track", "Type part of track")         If $ff Then             findd($ff)         EndIf     EndIf     If $msg = $b6 and $dl=0 and $seton=0 and $isfind=0 Then         $search = InputBox("Find from Youtube", "Type correct link")         If $search Then             $source = _INetGetSource($search)             $id = StringMid($source, StringInStr($source, "http://www.youtube.com/watch?v") + 31, 11)             $size = download($id)             If $size = -1 Then                 MsgBox(0, "Error", "")             Else                 $spot=StringInStr($source, 'title=')+5                 $title = StringRight($source, StringLen($source)-$spot)                 If $title = "" Then                     MsgBox(0, "Error", "Can't get the name of the track")                 Else                     $name = "Youtube - " & _TitleConvertHTML($title)                     For $i = 1 To $filep                         If $files[$i][0] = $name Then                             MsgBox(0, "Error", "You already have that track")                             $alr = 1                         EndIf                     Next                     If $alr = 0 Then                         GUISetState(@SW_SHOW, $dlgui)                         $dl = 1                     EndIf                 EndIf             EndIf         EndIf     EndIf     If _IsPressed("7B") Then         If $repeat = 0 Then             $repeat = 1         ElseIf $repeat = 1 Then             $repeat = 0         EndIf         GUICtrlSetData($l1, "Music information, repeat = " & $repeat & ", shuffle = "&$shuffle&"")         Send("{F12 up}")         $check=0     elseif _IsPressed("78") Then         If $shuffle = 0 Then             $shuffle = 1         ElseIf $shuffle = 1 Then             $shuffle = 0         EndIf         GUICtrlSetData($l1, "Music information, repeat = " & $repeat & ", shuffle = "&$shuffle&"")         Send("{F9 up}")     endif     If $msg = $b7 and $dl=0 and $seton=0 and $isfind=0 Then         GUISetState(@SW_SHOW, $settings)         if $repeat=1 then             GUICtrlSetData($sc2,1)         EndIf         if $shuffle=1 then GUICtrlSetState($sc1, 1)         if $repeat=1 then GUICtrlSetState($sc2, 1)         $seton=1     endif     If $msg = $b8 Then rebuild()     If WinActive($gui) Then         If $msg = $GUI_EVENT_CLOSE Then             OnAutoItExit()         EndIf     EndIf     if WinGetState($gui) = 23 then GUISetState(@SW_HIDE, $gui)     $tmsg=TrayGetMsg()     if $tmsg=-7 then         GUISetState(@SW_SHOW, $gui)         GUISetState(@SW_RESTORE, $gui)     endif     if $seton=1 then         if $msg=$sb1 then             GUISetState(@SW_HIDE,$settings)             $seton=0         EndIf         if GUICtrlRead($sc1) = 1 then             $shuffle=1         Else             $shuffle=0         endif         if GUICtrlRead($sc2) = 1 then             $repeat=1             $check=0         Else             $repeat=0         endif         GUICtrlSetData($l1, "Music information, repeat = " & $repeat & ", shuffle = "&$shuffle&"")     endif     If $dl = 1 Then         $bytes=InetGetInfo($dfile,0)         If Round($bytes / 1024 / 1024, 1) > $vbytes Then             GUICtrlSetData($dlstatus, Round($bytes / 1024 / 1024, 1) & "Mb / " & Round(InetGetInfo($dfile,1) / 1024 / 1024, 1) & " Mb    " & Round(100 * ($bytes / InetGetInfo($dfile,1))) & "%" & Chr(10) & "" & $name & "")             $vbytes = Round($bytes / 1024 / 1024, 1)         EndIf         If InetGetInfo($dfile,2) Then             TrayTip("Download finished", "Downloaded track is the last track in playlist", 0)             convert(@ScriptDir & "\Youtube\" & $name & ".mp3")             GUISetState(@SW_HIDE, $dlgui)             $f = FileOpen(@ScriptDir & "\list.dat", 1)             FileWriteLine($f, $name)             FileWriteLine($f, @ScriptDir & "\Youtube\" & $name & ".mp3")             FileClose($f)             $filep = $filep + 1             ReDim $files[$filep + 2][4]             fromfile()             _GUICtrlListView_DeleteAllItems($list)             _GUICtrlListView_SetColumnWidth($list, 0, 370)             _GUICtrlListView_HideColumn($list, 1)             _GUICtrlListView_HideColumn($list, 2)             _GUICtrlListView_HideColumn($list, 3)             _GUICtrlListView_AddArray($list, $files)             _GUICtrlListView_SetSelectionMark($list, 0)             $name = ""             $size = 0             GUICtrlSetData($dlstatus, "")             $vbytes = 0             $dl = 0         EndIf     EndIf     Sleep(5) WEnd Func _TitleConvertHTML($n_title)     $r_title = StringReplace($n_title, '+', ' ')     $r_title = StringReplace($r_title, '%2B', '+')     $r_title = StringReplace($r_title, '%3D', '=')     $r_title = StringReplace($r_title, '%22', '"')     $r_title = StringReplace($r_title, '%27', "'")     $r_title = StringReplace($r_title, '%60', '`')     $r_title = StringReplace($r_title, '%28', '(')     $r_title = StringReplace($r_title, '%29', ')')     $r_title = StringReplace($r_title, '%5B', '[')     $r_title = StringReplace($r_title, '%5D', ']')     $r_title = StringReplace($r_title, '%3A', ':')     $r_title = StringReplace($r_title, '%2C', ',')     $r_title = StringReplace($r_title, '%23', '#')     $r_title = StringReplace($r_title, '%2F', '/')     $r_title = StringReplace($r_title, '%21', '!')     $r_title = StringReplace($r_title, '%3F', '?')     $r_title = StringReplace($r_title, '%26', '&')     $r_title = StringReplace($r_title, '%7C', '|')     $r_title = StringReplace($r_title, '%40', '@')     $r_title = StringReplace($r_title, '%5E', '^')     $r_title = StringReplace($r_title, '%2A', '*')     $r_title = StringReplace($r_title, '%7E', '~')     $r_title = StringReplace($r_title, '%C2%AB', '«')     $r_title = StringReplace($r_title, '%C2%BB', '»')     $r_title = StringReplace($r_title, '%C2%B0', '°')     $r_title = StringReplace($r_title, '%C2%B7', '·')     $r_title = StringReplace($r_title, '%C3%A9', 'é')     $r_title = StringReplace($r_title, '%C3%A8', 'è')     $r_title = StringReplace($r_title, '%C3%AA', 'ê')     $r_title = StringReplace($r_title, '%C3%A0', 'à')     $r_title = StringReplace($r_title, '%C3%A1', 'á')     $r_title = StringReplace($r_title, '%C3%A2', 'â')     $r_title = StringReplace($r_title, '%C3%A7', 'ç')     $r_title = StringReplace($r_title, '%C3%B1', 'ñ')     $r_title = StringReplace($r_title, '%C2%A1', '¡')     $r_title = StringReplace($r_title, '%C2%A5', '¥')     $r_title = StringReplace($r_title, '%C2%BF', '¿')     $r_title = StringReplace($r_title, '%E2%80%A2', '•')     $r_title = StringReplace($r_title, '%E2%84%A2', '™')     Return $r_title EndFunc   ;==>_TitleConvertHTML Func list($dir)     $old = $dir     FileChangeDir($dir)     $first = FileFindFirstFile("*")     While 1         $h = FileFindNextFile($first)         $whole = "" & $dir & "\" & $h & ""         $att = FileGetAttrib($h)         $ext = StringLower(StringRight($h, 3))         If $ext = "mp3" Or $ext = "wma" Or $ext = "wav" Then             $filep = $filep + 1             $files[$filep][0] = StringLeft($h, StringLen($h) - 4)             $files[$filep][1] = $whole         ElseIf StringInStr($att, "D") <> 0 Then             $folp = $folp + 1             $folders[$folp][0] = $whole         EndIf         If $h = "" Then ExitLoop         If @error = 1 Then ExitLoop     WEnd     For $x = 1 To $folp         If $folders[$x][1] = 0 Then             $folders[$x][1] = 1             list($folders[$x][0])         EndIf     Next     FileChangeDir($old) EndFunc   ;==>list Func tofile()     $f = FileOpen($listdir, 2)     For $i = 0 To $filep         FileWriteLine($f, $files[$i][0])         FileWriteLine($f, $files[$i][1])     Next     FileClose($f) EndFunc   ;==>tofile Func fromfile()     $f = FileOpen($listdir, 0)     $i = -1     While 1         $i = $i + 1         $files[$i][0] = FileReadLine($f)         $files[$i][1] = FileReadLine($f)         If @error Then ExitLoop     WEnd     $filep = $i     FileClose($f) EndFunc   ;==>fromfile Func findd($stri)     If $stri = "" Then         MsgBox(0, "Error", "input field is empty")         $sure = 1     Else         $sure = 0     EndIf     If $stri <> "" And $sure = 0 Then         For $k = 0 To $filefp             $files[$k][3] = ""             $files[$k][2] = ""         Next         $filefp = -1         $files[0][2] = "Search results with (" & $stri & ")"         For $d = 0 To $filep             If StringInStr($files[$d][0], $stri) <> 0 Then                 $filefp = $filefp + 1                 $files[$filefp][2] = $files[$d][0]                 $files[$filefp][3] = $files[$d][1]             EndIf         Next         If $filefp > -1 Then             _GUICtrlListView_DeleteAllItems($list)             _GUICtrlListView_SetColumnWidth($list, 2, 370)             _GUICtrlListView_HideColumn($list, 0)             _GUICtrlListView_HideColumn($list, 1)             _GUICtrlListView_HideColumn($list, 3)             _GUICtrlListView_AddArray($list, $files)             $isfind = 1         Else             MsgBox(0, "Find track", "0 tracks founded")         EndIf     EndIf EndFunc   ;==>findd Func download($id)     $source = _INetGetSource("http://www.youtube.com/get_video_info?&video_id=" & $id)     $sign = StringMid($source, StringInStr($source, "&token=") + 7, StringInStr($source, "&thumbnail_url="))     $download = "http://www.youtube.com/get_video?video_id=" & $id & "&t=" & $sign & "&fmt=18"     If StringInStr($source, "fail") > 0 Then         $size = -1     Else         FileDelete(@AppDataDir & "\YouTube\tempfile.mp4")         $dfile=Inetget($download,@AppDataDir & "\YouTube\tempfile.mp4", 1, 1)         $size=1     EndIf     Return $size EndFunc   ;==>download Func convert($out)     $s_cmd = "ffmpeg.exe -i " & Chr(34) & "" & @AppDataDir & "\YouTube\tempfile.mp4" & Chr(34) & " -acodec mp3 -ab 128 -ar 44100 -ac 2 " & Chr(34) & "" & $out & "" & Chr(34) & ""     $ffmpeg = Run(@AppDataDir & '\YouTube\' & $s_cmd, @AppDataDir & '\YouTube', @SW_HIDE, 4) EndFunc   ;==>convert Func rebuild()     GUISetState(@SW_HIDE, $gui)     FileDelete(@ScriptDir & "\list.dat")     Run(@ScriptDir & "\Handy.exe")     Exit EndFunc   ;==>rebuild Func OnAutoItExit()     _BASS_Free()     _BASS_SampleFree($sound)     exit EndFunc   ;==>OnAutoItExit Func WindowGlide($hwnd, $text, $x, $y, $width, $height, $time = 200)     Local $OrgPos = WinGetPos($hwnd, $text)     If @error Then         Return SetError(1, 0, 0)     EndIf     Local $NewPos[4]     Local $timer = TimerInit()     Local $percent_done = 0     While TimerDiff($timer) < $time         Sleep(10)         $percent_done = TimerDiff($timer) / $time         $NewPos[0] = $OrgPos[0] + ($x - $OrgPos[0]) * $percent_done         $NewPos[1] = $OrgPos[1] + ($y - $OrgPos[1]) * $percent_done         $NewPos[2] = $OrgPos[2] + ($width - $OrgPos[2]) * $percent_done         $NewPos[3] = $OrgPos[3] + ($height - $OrgPos[3]) * $percent_done         WinMove($hwnd, $text, $NewPos[0], $NewPos[1], $NewPos[2], $NewPos[3])     WEnd     WinMove($hwnd, $text, $x, $y, $width, $height)     Return 1 EndFunc









0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users