Synapsee Posted April 27, 2016 Posted April 27, 2016 (edited) AutoIt Radio Player Last : v0.0.0.8 Tested only on W7X64 Changelog : Spoiler v0.0.0.8 - last version v0.0.0.7 - first public version ==========> AutoIt Radio Player v0.0.0.8.zip <========== Personal Message : This is my first script posted. Any comment are welcome. Give me your best web radio i will try add them ! Install/Use : Spoiler -Unzip -Run "AutoIt Radio Player.au3" -Use MouseWheel for change volume Note : On first start : volume = 4% -Use MouseLeft for drag gui -Use RightClick for change station Add a station : Spoiler How add a station : -Go to config.ini -Add : [Station Name] -Possible optional label start key : CurrentArtist CurrentAlbum CurrentTitle NextArtist NextAlbum NextTitle ListenersCount -Possible optional label end key : Link=URL Start=StringBefore End=StringAfter BetweenNum=TargetOccurence (def=0) Split=StringForSplit NumSplit=TargetSplitNumber -Necessary SoundLink=URL -Optional CoverLink=URL CoverLinkStart=StringBefore CoverLinkEnd=StringAfter CoverLinkBetweenNum=TargetOccurence (def=0) CoverLinkBefore=PathBefore Unsolved problem : When the coverGUI go outside the monitor and comeback inside, a part of current cover disapear : I have no idea how fix that TODO : Make coverGUI mouse resizable (while script running) : any idea are welcome Crop some pixel of cover : any idea are welcome Related Posts/Bin : ArrayMultiColSort MouseWheelDelta Sample1 MouseWheelDelta Sample2 ContextMenu Fix ReduceMemory MemGlobalAllocFromBinary Curl.au3 (AutoIt binary code) Main Code : expandcollapse popup;#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7;All Warning ;-w 5 = local var declared but not used : Removed for Curl.au3 ;-d = as Opt("MustDeclareVars", 1) : Removed for Bass.au3 #AutoIt3Wrapper_Au3Check_Parameters=-w 1 -w 2 -w 3 -w- 4 -w 6 -w- 7 #Region ;==> #include #include <Array.au3>;_ArrayAdd #include <GuiButton.au3>;_GUICtrlButton_SetImage() #include <GuiMenu.au3>;$MNS_MODELESS #include <GUIConstants.au3>;$WS_POPUP #include <GDIplus.au3>;_GDIPlus_BitmapCreateFromStream() #include <Memory.au3>;$GMEM_MOVEABLE #include <String.au3>;_StringBetween() #include <AutoIt Radio Player\include\Bass.au3>;_BASS_ChannelPlay() #include <AutoIt Radio Player\include\BassConstants.au3>;$BASS_CONFIG_NET_PLAYLIST #include <AutoIt Radio Player\include\Curl.au3>;Curl_Data_Get() #EndRegion ;==> #include #Region ;==> Func for Bass.au3 Local $MusicHandle Func _Audio_play($MusicHandle) _BASS_ChannelPlay($MusicHandle, 1) EndFunc Func _Audio_stop($MusicHandle) _BASS_ChannelStop($MusicHandle) EndFunc Func _Audio_init_stop($MusicHandle) _BASS_StreamFree($MusicHandle) _BASS_Free() EndFunc Func _Audio_init_start() If _BASS_STARTUP(@ScriptDir & "\AutoIt Radio Player\include\bass.dll") Then If _BASS_Init(0, -1, 44100, 0) Then If _BASS_SetConfig($BASS_CONFIG_NET_PLAYLIST, 1) = 0 Then SetError(3) EndIf Else SetError(2) EndIf Else SetError(@error) EndIf EndFunc Func _Set_volume($volume) _BASS_SetConfig($BASS_CONFIG_GVOL_STREAM, $volume * 100) EndFunc Func _Set_url($file) If FileExists($file) Then $MusicHandle = _BASS_StreamCreateFile(False, $file, 0, 0, 0) Else $MusicHandle = _BASS_StreamCreateURL($file, 0, 1) EndIf If @error Then Return SetError(1) EndIf Return $MusicHandle EndFunc #EndRegion ;==> Func for Bass.au3 Global Const $SC_DRAGMOVE = 0xF012;Global #Region ;==> Func from AutoIt Forum ; #FUNCTION# ==================================================================================================================== ; Name...........: _ArrayMultiColSort ; Description ...: Sort 2D arrays on several columns ; Syntax.........: _ArrayMultiColSort(ByRef $aArray, $aSortData[, $iStart = 0[, $iEnd = 0]]) ; Parameters ....: $aArray - The 2D array to be sorted ; $aSortData - 2D array holding details of the sort format ; Format: [Column to be sorted, Sort order] ; Sort order can be either numeric (0/1 = ascending/descending) or a ordered string of items ; Any elements not matched in string are left unsorted after all sorted elements ; $iStart - Element of array at which sort starts (default = 0) ; $iEnd - Element of array at which sort endd (default = 0 - converted to end of array) ; Requirement(s).: v3.3.8.1 or higher ; Return values .: Success: No error ; Failure: @error set as follows ; @error = 1 with @extended set as follows (all refer to $sIn_Date): ; 1 = Array to be sorted not 2D ; 2 = Sort data array not 2D ; 3 = More data rows in $aSortData than columns in $aArray ; 4 = Start beyond end of array ; 5 = Start beyond End ; @error = 2 with @extended set as follows: ; 1 = Invalid string parameter in $aSortData ; 2 = Invalid sort direction parameter in $aSortData ; Author ........: Melba23 ; Remarks .......: Columns can be sorted in any order ; Example .......; Yes ; =============================================================================================================================== Func _ArrayMultiColSort(ByRef $aArray, $aSortData, $iStart = 0, $iEnd = 0) ; Errorchecking ; 2D array to be sorted If UBound($aArray, 2) = 0 Then Return SetError(1, 1, "") EndIf ; 2D sort data If UBound($aSortData, 2) <> 2 Then Return SetError(1, 2, "") EndIf If UBound($aSortData) > UBound($aArray) Then Return SetError(1, 3) EndIf ; Start element If $iStart < 0 Then $iStart = 0 EndIf If $iStart >= UBound($aArray) - 1 Then Return SetError(1, 4, "") EndIf ; End element If $iEnd <= 0 Or $iEnd >= UBound($aArray) - 1 Then $iEnd = UBound($aArray) - 1 EndIf ; Sanity check If $iEnd <= $iStart Then Return SetError(1, 5, "") EndIf Local $iCurrCol, $iChunk_Start, $iMatchCol ; Sort first column __AMCS_SortChunk($aArray, $aSortData, 0, $aSortData[0][0], $iStart, $iEnd) If @error Then Return SetError(2, @extended, "") EndIf ; Now sort within other columns For $iSortData_Row = 1 To UBound($aSortData) - 1 ; Determine column to sort $iCurrCol = $aSortData[$iSortData_Row][0] ; Create arrays to hold data from previous columns Local $aBaseValue[$iSortData_Row] ; Set base values For $i = 0 To $iSortData_Row - 1 $aBaseValue[$i] = $aArray[$iStart][$aSortData[$i][0]] Next ; Set start of this chunk $iChunk_Start = $iStart ; Now work down through array For $iRow = $iStart + 1 To $iEnd ; Match each column For $k = 0 To $iSortData_Row - 1 $iMatchCol = $aSortData[$k][0] ; See if value in each has changed If $aArray[$iRow][$iMatchCol] <> $aBaseValue[$k] Then ; If so and row has advanced If $iChunk_Start < $iRow - 1 Then ; Sort this chunk __AMCS_SortChunk($aArray, $aSortData, $iSortData_Row, $iCurrCol, $iChunk_Start, $iRow - 1) If @error Then Return SetError(2, @extended, "") EndIf EndIf ; Set new base value $aBaseValue[$k] = $aArray[$iRow][$iMatchCol] ; Set new chunk start $iChunk_Start = $iRow EndIf Next Next ; Sort final section If $iChunk_Start < $iRow - 1 Then __AMCS_SortChunk($aArray, $aSortData, $iSortData_Row, $iCurrCol, $iChunk_Start, $iRow - 1) If @error Then Return SetError(2, @extended, "") EndIf EndIf Next EndFunc ;==>_ArrayMultiColSort ; #FUNCTION# ==================================================================================================================== ; Name...........: __AMCS_SortChunk ; Description ...: Sorts array section ; Author ........: Melba23 ; Remarks .......: ; =============================================================================================================================== Func __AMCS_SortChunk(ByRef $aArray, $aSortData, $iRow, $iColumn, $iChunkStart, $iChunkEnd) Local $aSortOrder ; Set default sort direction Local $iSortDirn = 1 ; Need to prefix elements? If IsString($aSortData[$iRow][1]) Then ; Split elements $aSortOrder = StringSplit($aSortData[$iRow][1], ",") If @error Then Return SetError(1, 1, "") EndIf ; Add prefix to each element For $i = $iChunkStart To $iChunkEnd For $j = 1 To $aSortOrder[0] If $aArray[$i][$iColumn] = $aSortOrder[$j] Then $aArray[$i][$iColumn] = StringFormat("%02i-", $j) & $aArray[$i][$iColumn] ExitLoop EndIf Next ; Deal with anything that does not match If $j > $aSortOrder[0] Then $aArray[$i][$iColumn] = StringFormat("%02i-", $j) & $aArray[$i][$iColumn] EndIf Next Else Switch $aSortData[$iRow][1] Case 0, 1 ; Set required sort direction if no list If $aSortData[$iRow][1] Then $iSortDirn = -1 Else $iSortDirn = 1 EndIf Case Else Return SetError(1, 2, "") EndSwitch EndIf ; Sort the chunk Local $iSubMax = UBound($aArray, 2) - 1 __ArrayQuickSort2D($aArray, $iSortDirn, $iChunkStart, $iChunkEnd, $iColumn, $iSubMax) ; Remove any prefixes If IsString($aSortData[$iRow][1]) Then For $i = $iChunkStart To $iChunkEnd $aArray[$i][$iColumn] = StringTrimLeft($aArray[$i][$iColumn], 3) Next EndIf EndFunc ;==>__AMCS_SortChunk Func _ReduceMemory() Local $aReturn = DllCall("psapi.dll", "int", "EmptyWorkingSet", "long", -1) If @error = 1 Then Return SetError(1, 0, 0) EndIf Return $aReturn[0] EndFunc ;==>_ReduceMemory ; #FUNCTION# ==================================================================================================================== ; Name...........: _GDIPlus_ImageLoadFromHGlobal ; Description ...: Creates an Image object based on movable HGlobal memory block ; Syntax.........: _GDIPlus_ImageLoadFromHGlobal($hGlobal) ; Parameters ....: $hGlobal - Handle of a movable HGlobal memory block ; Return values .: Success - Pointer to a new Image object ; Failure - 0 and either: ; |@error and @extended are set if DllCall failed: ; | -@error = 1 if could not create IStream ; | -@error = 2 if DLLCall to create image failed ; |$GDIP_STATUS contains a non zero value specifying the error code ; Author ........: ProgAndy ; Modified.......: ; Remarks .......: After you are done with the object, call _GDIPlus_ImageDispose to release the object resources. ; The HGLOBAL will be owned by the image and freed automatically when the image is disposed. ; Related .......: _GDIPlus_ImageLoadFromStream, _GDIPlus_ImageDispose ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _GDIPlus_ImageLoadFromHGlobal($hGlobal) Local $aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $hGlobal, "bool", True, "ptr*", 0) If @error Or $aResult[0] <> 0 Or $aResult[3] = 0 Then Return SetError(1, @error, 0) Local $hImage = DllCall($__g_hGDIPDll, "uint", "GdipLoadImageFromStream", "ptr", $aResult[3], "int*", 0) Local $error = @error Local $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr") Local $aCall = DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $aResult[3], "dword", 8 + 8 * @AutoItX64, "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) If $error Then Return SetError(2, $error, 0) If $hImage[2] = 0 Then Return SetError(3, 0, $hImage[2]) Return $hImage[2] EndFunc ;==>_GDIPlus_ImageLoadFromHGlobal ; #FUNCTION# ==================================================================================================================== ; Name...........: _MemGlobalAllocFromBinary ; Description ...: Greates a movable HGLOBAL memory block from binary data ; Syntax.........: _MemGlobalAllocFromBinary($bBinary) ; Parameters ....: $bBinary - Binary data ; Return values .: Success - Handle of a new movable HGLOBAL ; Failure - 0 and set @error: ; |1 - no data ; |2 - could not allocate memory ; |3 - could not set data to memory ; Author ........: ProgAndy ; Modified.......: ; Remarks .......: ; Related .......: _MemGlobalAlloc, _MemGlobalFree, _MemGlobalLock ; Link ..........: ; Example .......: ; =============================================================================================================================== Func _MemGlobalAllocFromBinary(Const $bBinary) Local $iLen = BinaryLen($bBinary) If $iLen = 0 Then Return SetError(1, 0, 0) Local $hMem = _MemGlobalAlloc($iLen, $GMEM_MOVEABLE) If @error Or Not $hMem Then Return SetError(2, 0, 0) DllStructSetData(DllStructCreate("byte[" & $iLen & "]", _MemGlobalLock($hMem)), 1, $bBinary) If @error Then _MemGlobalUnlock($hMem) _MemGlobalFree($hMem) Return SetError(3, 0, 0) EndIf _MemGlobalUnlock($hMem) Return $hMem EndFunc ;==>_MemGlobalAllocFromBinary #EndRegion ;==> Func from AutoIt Forum ;INI Location Local $Config_INI = "AutoIt Radio Player\Config.ini" Local $Save_INI = "AutoIt Radio Player\Save.ini" ;Get $aRadio and $aLabel <===========================================That part need improve Local $aINISections = IniReadSectionNames($Config_INI) Local $aRadio[0][8] Local $aLabel[0][11] For $i = 1 To UBound($aINISections) - 1 If $aINISections[$i] <> "GUI" Then ;For $aRadio Local $SoundLink = "", $CoverLink = "", $CoverLinkStart = "", $CoverLinkEnd = "", $CoverLinkBetweenNum = "", $CoverLinkBefore = "", $Default = 0 ;For $aLabel Local $CurrentArtistLink = "", $CurrentArtistStart = "", $CurrentArtistEnd = "", $CurrentArtistBetweenNum = 0, $CurrentArtistSplit = "", $CurrentArtistNumSplit = "" Local $CurrentAlbumLink = "", $CurrentAlbumStart = "", $CurrentAlbumEnd = "", $CurrentAlbumBetweenNum = 0, $CurrentAlbumSplit = "", $CurrentAlbumNumSplit = "" Local $CurrentTitleLink = "", $CurrentTitleStart = "", $CurrentTitleEnd = "", $CurrentTitleBetweenNum = 0, $CurrentTitleSplit = "", $CurrentTitleNumSplit = "" Local $NextArtistLink = "", $NextArtistStart = "", $NextArtistEnd = "", $NextArtistBetweenNum = 0, $NextArtistSplit = "", $NextArtistNumSplit = "" Local $NextAlbumLink = "", $NextAlbumStart = "", $NextAlbumEnd = "", $NextAlbumBetweenNum = 0, $NextAlbumSplit = "", $NextAlbumNumSplit = "" Local $NextTitleLink = "", $NextTitleStart = "", $NextTitleEnd = "", $NextTitleBetweenNum = 0, $NextTitleSplit = "", $NextTitleNumSplit = "" Local $ListenersCountLink = "", $ListenersCountStart = "", $ListenersCountEnd = "", $ListenersCountBetweenNum = 0, $ListenersCountSplit = "", $ListenersCountNumSplit = "" Local $controlID1 = "", $controlID2 = "" Local $Sec = IniReadSection($Config_INI, $aINISections[$i]) For $y = 1 To UBound($Sec) - 1 Assign($Sec[$y][0], $Sec[$y][1]) Next ;$aRadio _ArrayAdd($aRadio, $aINISections[$i] & "|" & $SoundLink & "|" & $CoverLink & "|" & $CoverLinkStart & "|" & $CoverLinkEnd & "|" & $CoverLinkBetweenNum & "|" & $CoverLinkBefore & "|" & $Default) ;$aLabel _ArrayAdd($aLabel, $aINISections[$i] & "|" & "Current" & "|" & "Artist" & "|" & $CurrentArtistLink & "|" & $CurrentArtistStart & "|" & $CurrentArtistEnd & "|" & $CurrentArtistBetweenNum & "|" & $CurrentArtistSplit & "|" & $CurrentArtistNumSplit & "|" & $controlID1 & "|" & $controlID2) _ArrayAdd($aLabel, $aINISections[$i] & "|" & "Current" & "|" & "Album" & "|" & $CurrentAlbumLink & "|" & $CurrentAlbumStart & "|" & $CurrentAlbumEnd & "|" & $CurrentAlbumBetweenNum & "|" & $CurrentAlbumSplit & "|" & $CurrentAlbumNumSplit & "|" & $controlID1 & "|" & $controlID2) _ArrayAdd($aLabel, $aINISections[$i] & "|" & "Current" & "|" & "Title" & "|" & $CurrentTitleLink & "|" & $CurrentTitleStart & "|" & $CurrentTitleEnd & "|" & $CurrentTitleBetweenNum & "|" & $CurrentTitleSplit & "|" & $CurrentTitleNumSplit & "|" & $controlID1 & "|" & $controlID2) _ArrayAdd($aLabel, $aINISections[$i] & "|" & "Next" & "|" & "Artist" & "|" & $NextArtistLink & "|" & $NextArtistStart & "|" & $NextArtistEnd & "|" & $NextArtistBetweenNum & "|" & $NextArtistSplit & "|" & $NextArtistNumSplit & "|" & $controlID1 & "|" & $controlID2) _ArrayAdd($aLabel, $aINISections[$i] & "|" & "Next" & "|" & "Album" & "|" & $NextAlbumLink & "|" & $NextAlbumStart & "|" & $NextAlbumEnd & "|" & $NextAlbumBetweenNum & "|" & $NextAlbumSplit & "|" & $NextAlbumNumSplit & "|" & $controlID1 & "|" & $controlID2) _ArrayAdd($aLabel, $aINISections[$i] & "|" & "Next" & "|" & "Title" & "|" & $NextTitleLink & "|" & $NextTitleStart & "|" & $NextTitleEnd & "|" & $NextTitleBetweenNum & "|" & $NextTitleSplit & "|" & $NextTitleNumSplit & "|" & $controlID1 & "|" & $controlID2) _ArrayAdd($aLabel, $aINISections[$i] & "|" & "Listeners" & "|" & "Count" & "|" & $ListenersCountLink & "|" & $ListenersCountStart & "|" & $ListenersCountEnd & "|" & $ListenersCountBetweenNum & "|" & $ListenersCountSplit & "|" & $ListenersCountNumSplit & "|" & $controlID1 & "|" & $controlID2) EndIf Next Global $aRadio_Sort[][] = [[0, 0], [1, 0]] _ArrayMultiColSort($aRadio, $aRadio_Sort) Local $aLabel2[0][11] For $i = 0 To UBound($aLabel) - 1 If $aLabel[$i][3] <> "" Then Local $fill = $aLabel[$i][0] For $y = 1 To UBound($aLabel, 2) - 1 $fill = $fill & "|" & $aLabel[$i][$y] Next _ArrayAdd($aLabel2, $fill) EndIf Next $aLabel = $aLabel2 ;_ArrayDisplay($aRadio) ;_ArrayDisplay($aLabel) ;Init/Opt Opt("GUIOnEventMode", 1) _Audio_init_start() _GDIPlus_Startup() ;Icon Local $IcoFile = @ScriptDir & "\AutoIt Radio Player\img\icon.ico" Local $IcoNumber = -1 TraySetIcon($IcoFile, $IcoNumber) ;Get Default Station Local $def_selected = 0 For $r = 0 To UBound($aRadio) - 1 If $aRadio[$r][0] = IniRead($Save_INI, @ComputerName, "Default_Radio", "default") Then $def_selected = 1 $aRadio[$r][7] = 1 EndIf Next If $def_selected = 0 Then $aRadio[0][7] = 1 EndIf ;ConsoleWrite("Start" & @CRLF) ;Get $Radio_Name, $Radio_SoundLink, $Radio_CoverLink, $Radio_CoverLink_Start, $Radio_CoverLink_End, $Radio_CoverLink_BetweenNum, $Radio_CoverLink_Before Local $Radio_Name, $Radio_SoundLink, $Radio_CoverLink Local $Radio_CoverLink_Start, $Radio_CoverLink_End, $Radio_CoverLink_BetweenNum, $Radio_CoverLink_Before For $r = 0 To UBound($aRadio) - 1 If $aRadio[$r][7] = 1 Then $Radio_Name = $aRadio[$r][0] $Radio_SoundLink = $aRadio[$r][1] $Radio_CoverLink = $aRadio[$r][2] $Radio_CoverLink_Start = $aRadio[$r][3] $Radio_CoverLink_End = $aRadio[$r][4] $Radio_CoverLink_BetweenNum = $aRadio[$r][5] $Radio_CoverLink_Before = $aRadio[$r][6] EndIf Next ;Declare Local $PlayerGUI, $CoverGUI;GUI Local $PlayPause, $Close;Button Local $Play = 1;PlayStatus ($Play = 1 = Autoplay) Local $Volume_Label, $VolumePercent, $Previous_VolumePercent;Volume Local $Previous_Cover_Read;PreviousRead Local $BASS_ErrorGetCode ;$Config_INI\GUI Local $CoverSize = IniRead($Config_INI, "GUI", "CoverSize", 150) Local $PlayerBorder = IniRead($Config_INI, "GUI", "PlayerBorder", 10) ;ConsoleWrite("Build GUI" & @CRLF) ;Build GUI _Build_PlayerGUI() _Build_CoverGUI() ;ConsoleWrite("Show GUI" & @CRLF) GUISetState(@SW_SHOW, $PlayerGUI) If $Radio_CoverLink <> "" Then GUISetState(@SW_SHOW, $CoverGUI) EndIf _Set_volume(0) ;GetPlayerDATA() - GetCoverDATA() - Start Sound GetPlayerDATA();Start Sound too with resume on disconnect AdlibRegister("GetPlayerDATA", 8000) If $Radio_CoverLink <> "" Then GetCoverDATA() AdlibRegister("GetCoverDATA", 8000) EndIf ;ConsoleWrite("GUIRegisterMsg" & @CRLF) GUIRegisterMsg($WM_MOUSEWHEEL, "_WM_MOUSEWHEEL");for set volume GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN");for drag gui #Region ;==> Internal Func Func _Build_CoverGUI() ;ConsoleWrite("Build CoverGUI" & @CRLF) If $Radio_CoverLink <> "" Then $CoverGUI = GUICreate("AutoIt Radio Cover", _;Title $CoverSize, _ ;X $CoverSize, _ ;Y IniRead($Save_INI, @ComputerName, "Cover_X", -1), _;Left IniRead($Save_INI, @ComputerName, "Cover_Y", -1), _;Top $WS_POPUP, $WS_EX_TOPMOST);Style GUISetBkColor(0x000000, $CoverGUI);Black BkColor GUISetIcon($IcoFile, $IcoNumber, $CoverGUI) Else $CoverGUI = "" EndIf EndFunc ;==>_Build_CoverGUI Func _Build_PlayerGUI() ;ConsoleWrite("Build PlayerGUI" & @CRLF) ;Clean previous stored ControlID For $r = 0 To UBound($aLabel) - 1 $aLabel[$r][9] = "" $aLabel[$r][10] = "" Next ;$LabelCount Local $LabelCount = 0 For $r = 0 To UBound($aLabel) - 1 If $Radio_Name = $aLabel[$r][0] Then $LabelCount = $LabelCount + 1 EndIf Next ;$LabelY If $LabelCount * 13 + $PlayerBorder * 2 < 50 Then Local $LabelY = 10 * 3 Else $LabelY = $LabelCount * 13 EndIf ;$PlayerGUI $PlayerGUI = GUICreate("AutoIt Radio Player", _ $PlayerBorder + 260 + 50 + 10 + $PlayerBorder * 2, _;X $PlayerBorder + $LabelY + $PlayerBorder, _;Y IniRead($Save_INI, @ComputerName, "Title_X", -1), _;Left IniRead($Save_INI, @ComputerName, "Title_Y", -1), _;Top $WS_POPUP, $WS_EX_TOPMOST);Style GUISetBkColor(0x000000, $PlayerGUI);Black BkColor GUISetIcon($IcoFile, $IcoNumber, $PlayerGUI) ;$Contextmenu Local $ContextMenu = GUICtrlCreateContextMenu(-1) Local $hCM = GUICtrlGetHandle($ContextMenu) _GUICtrlMenu_SetMenuStyle($hCM, BitXOR(_GUICtrlMenu_GetMenuStyle($hCM), $MNS_MODELESS)) Local $ContextMenu_Item1 = GUICtrlCreateMenuItem($Radio_Name, $ContextMenu) GUICtrlSetOnEvent($ContextMenu_Item1, "ContextMenu_ChangeRadio") GUICtrlCreateMenuItem("", $ContextMenu);Add separator For $r = 0 To UBound($aRadio) - 1 If $aRadio[$r][7] = 0 Then GUICtrlCreateMenuItem($aRadio[$r][0], $ContextMenu) GUICtrlSetOnEvent(-1, "ContextMenu_ChangeRadio") EndIf Next ;GUICtrlCreateLabel $LabelCount = 0 Local $Previous_Type = "" For $r = 0 To UBound($aLabel) - 1 If $Radio_Name = $aLabel[$r][0] Then If $Previous_Type <> $aLabel[$r][1] Then $Previous_Type = $aLabel[$r][1] $aLabel[$r][10] = GUICtrlCreateLabel($aLabel[$r][1], $PlayerBorder, 13 * $LabelCount + $PlayerBorder, 50, 13, $SS_CENTERIMAGE) GUICtrlSetColor($aLabel[$r][10], 0xFFFFFF);White TextColor GUICtrlSetOnEvent($aLabel[$r][10], "_WM_LBUTTONDOWN") $ContextMenu = GUICtrlCreateContextMenu($aLabel[$r][10]) $hCM = GUICtrlGetHandle($ContextMenu) _GUICtrlMenu_SetMenuStyle($hCM, BitXOR(_GUICtrlMenu_GetMenuStyle($hCM), $MNS_MODELESS)) $ContextMenu_Item1 = GUICtrlCreateMenuItem($Radio_Name, $ContextMenu) GUICtrlSetOnEvent(-1, "ContextMenu_ChangeRadio") GUICtrlCreateMenuItem("", $ContextMenu);Add separator For $r2 = 0 To UBound($aRadio) - 1 If $aRadio[$r2][7] = 0 Then GUICtrlCreateMenuItem($aRadio[$r2][0], $ContextMenu) GUICtrlSetOnEvent(-1, "ContextMenu_ChangeRadio") EndIf Next EndIf $aLabel[$r][9] = GUICtrlCreateLabel("", $PlayerBorder + 50, 13 * $LabelCount + $PlayerBorder, 260, 13, $SS_CENTERIMAGE) $LabelCount = $LabelCount + 1 GUICtrlSetColor($aLabel[$r][9], 0xFFFFFF);White TextColor GUICtrlSetOnEvent($aLabel[$r][9], "_WM_LBUTTONDOWN") $ContextMenu = GUICtrlCreateContextMenu($aLabel[$r][9]) $hCM = GUICtrlGetHandle($ContextMenu) _GUICtrlMenu_SetMenuStyle($hCM, BitXOR(_GUICtrlMenu_GetMenuStyle($hCM), $MNS_MODELESS)) $ContextMenu_Item1 = GUICtrlCreateMenuItem($Radio_Name, $ContextMenu) GUICtrlSetOnEvent(-1, "ContextMenu_ChangeRadio") GUICtrlCreateMenuItem("", $ContextMenu);Add separator For $r2 = 0 To UBound($aRadio) - 1 If $aRadio[$r2][7] = 0 Then GUICtrlCreateMenuItem($aRadio[$r2][0], $ContextMenu) GUICtrlSetOnEvent(-1, "ContextMenu_ChangeRadio") EndIf Next EndIf Next ;GUICtrlCreateLabel Volume $Volume_Label = GUICtrlCreateLabel("0", $PlayerBorder, $PlayerBorder, 260 + 50, $LabelY, "") GUICtrlSetColor($Volume_Label, 0xFFFFFF);White TextColor GUICtrlSetOnEvent($Volume_Label, "_WM_LBUTTONDOWN") GUICtrlSetState($Volume_Label, $GUI_HIDE) ;$Volume_Label Contextmenu $ContextMenu = GUICtrlCreateContextMenu($Volume_Label) $hCM = GUICtrlGetHandle($ContextMenu) _GUICtrlMenu_SetMenuStyle($hCM, BitXOR(_GUICtrlMenu_GetMenuStyle($hCM), $MNS_MODELESS)) $ContextMenu_Item1 = GUICtrlCreateMenuItem($Radio_Name, $ContextMenu) GUICtrlSetOnEvent(-1, "ContextMenu_ChangeRadio") GUICtrlCreateMenuItem("", $ContextMenu);Add separator For $r = 0 To UBound($aRadio) - 1 If $aRadio[$r][7] = 0 Then Local $Item = GUICtrlCreateMenuItem($aRadio[$r][0], $ContextMenu) GUICtrlSetOnEvent(-1, "ContextMenu_ChangeRadio") EndIf Next ;$Close $Close = GUICtrlCreateButton("Close", _ $PlayerBorder * 2 + 260 + 50, _;Left $PlayerBorder, _;Top 10, _;X 10, _;Y $BS_BITMAP);Style _GUICtrlButton_SetImage($Close, @ScriptDir & "\AutoIt Radio Player\Img\Close.bmp") GUICtrlSetOnEvent($Close, "_Close") GUICtrlSetOnEvent($GUI_EVENT_CLOSE, "_Close") ;$PlayPause $PlayPause = GUICtrlCreateButton("Play/Pause", _ $PlayerBorder * 2 + 260 + 50, _;Left $PlayerBorder + 10 + 10, _;Top 10, _;X 10, _;Y $BS_BITMAP);Style _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\Stop.bmp") GUICtrlSetOnEvent($PlayPause, "_PlayPause") EndFunc ;==>_Build_PlayerGUI Func _Close() _Audio_init_stop($MusicHandle) _GDIPlus_Shutdown() Exit EndFunc ;==>_Close Func _PlayPause() ;Change $Play If $Play = 1 Then $Play = 0 Else $Play = 1 EndIf Local $Msg = GUIGetCursorInfo($PlayerGUI) ;Change Button Image If $Play = 1 Then If $Msg[4] = $PlayPause Then If $Msg[2] = 1 Then _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\stopp.bmp");Mouse Pressed Else _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\stopo.bmp");Mouse Over EndIf Else _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\stop.bmp");Nothing EndIf Else If $Msg[4] = $PlayPause Then If $Msg[2] = 1 Then _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\playp.bmp");Mouse Pressed Else _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\playo.bmp");Mouse Over EndIf Else _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\play.bmp");Nothing EndIf EndIf ;Play Sound If $Play = 0 Then _Audio_stop($MusicHandle) Else $MusicHandle = _Set_url($Radio_SoundLink) _Audio_play($MusicHandle) EndIf EndFunc ;==>_PlayPause Func _RemoveVolumeLabel() AdlibUnRegister("_RemoveVolumeLabel") ;Show Others Label For $i = 0 To UBound($aLabel) - 1 If $Radio_Name = $aLabel[$i][0] Then GUICtrlSetState($aLabel[$i][9], $GUI_SHOW) EndIf Next Local $Previous_Type = "" For $i = 0 To UBound($aLabel) - 1 If $Radio_Name = $aLabel[$i][0] Then If $Previous_Type <> $aLabel[$i][1] Then $Previous_Type = $aLabel[$i][1] GUICtrlSetState($aLabel[$i][10], $GUI_SHOW) EndIf GUICtrlSetState($aLabel[$i][9], $GUI_SHOW) EndIf Next ;Hide Volume Label GUICtrlSetState($Volume_Label, $GUI_HIDE) EndFunc ;==>_RemoveVolumeLabel Func _Save_Change_Volume() AdlibUnRegister("_Save_Change_Volume") _Set_volume($VolumePercent);Set IniWrite($Save_INI, @ComputerName, "Volume", $VolumePercent);Save EndFunc ;==>_Save_Change_Volume Func _WM_LBUTTONDOWN() ;Move GUI If WinActive("AutoIt Radio Cover") Then _SendMessage($CoverGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) Else _SendMessage($PlayerGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) EndIf ;Save GUI pos Local $Player_pos = WinGetPos("AutoIt Radio Player") Local $Cover_pos = WinGetPos("AutoIt Radio Cover") IniWrite($Save_INI, @ComputerName, "Title_X", $Player_pos[0]) IniWrite($Save_INI, @ComputerName, "Title_Y", $Player_pos[1]) If $Radio_CoverLink <> "" Then IniWrite($Save_INI, @ComputerName, "Cover_X", $Cover_pos[0]) IniWrite($Save_INI, @ComputerName, "Cover_Y", $Cover_pos[1]) EndIf EndFunc ;==>_WM_LBUTTONDOWN Func _WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam) AdlibUnRegister("_RemoveVolumeLabel") If GUICtrlGetState($Volume_Label) <> 80 Then ;Show $Volume_Label GUICtrlSetState($Volume_Label, $GUI_SHOW) ;Hide Others Label Local $Previous_Type = "" For $i = 0 To UBound($aLabel) - 1 If $Radio_Name = $aLabel[$r][0] Then If $Previous_Type <> $aLabel[$i][1] Then $Previous_Type = $aLabel[$i][1] GUICtrlSetState($aLabel[$i][10], $GUI_HIDE) EndIf GUICtrlSetState($aLabel[$i][9], $GUI_HIDE) EndIf Next EndIf ;Change $VolumePercent Local $WheelDelta = BitShift($wParam, 16) / 120 $VolumePercent = $VolumePercent + 4 * $WheelDelta If $WheelDelta > 0 Then If $VolumePercent > 100 Then $VolumePercent = 100 Else If $VolumePercent < 0 Then $VolumePercent = 0 EndIf If $Previous_VolumePercent <> $VolumePercent Then $Previous_VolumePercent = $VolumePercent GUICtrlSetData($Volume_Label, $VolumePercent) EndIf ;Change\Save Sound AdlibRegister("_Save_Change_Volume", 50) ;Hide $Volume_Label in 3s AdlibRegister("_RemoveVolumeLabel", 3000) Return $GUI_RUNDEFMSG EndFunc ;==>_WM_MOUSEWHEEL Func ContextMenu_ChangeRadio() $Previous_Cover_Read = "" Local $NewRadioName = GUICtrlRead(@GUI_CtrlId, 1) ;Maybe the next radio have no cover so delete it If $Radio_CoverLink <> "" Then GUIDelete($CoverGUI) AdlibUnRegister("GetCoverDATA") EndIf ;Maybe the $PlayerGUI need resize so delete it GUIDelete($PlayerGUI) AdlibUnRegister("GetPlayerDATA") _Audio_stop($MusicHandle) ;Remove Default Radio Tag For $r = 0 To UBound($aRadio) - 1 $aRadio[$r][7] = 0 Next ;Set $NewRadioName to Default For $r = 0 To UBound($aRadio) - 1 If $aRadio[$r][0] = $NewRadioName Then $aRadio[$r][7] = 1 IniWrite($Save_INI, @ComputerName, "Default_Radio", $aRadio[$r][0]) EndIf Next ;Get $Radio_Name, $Radio_SoundLink, $Radio_CoverLink, $Radio_CoverLink_Start, $Radio_CoverLink_End, $Radio_CoverLink_BetweenNum, $Radio_CoverLink_Before For $r = 0 To UBound($aRadio) - 1 If $aRadio[$r][7] = 1 Then $Radio_Name = $aRadio[$r][0] $Radio_SoundLink = $aRadio[$r][1] $Radio_CoverLink = $aRadio[$r][2] $Radio_CoverLink_Start = $aRadio[$r][3] $Radio_CoverLink_End = $aRadio[$r][4] $Radio_CoverLink_BetweenNum = $aRadio[$r][5] $Radio_CoverLink_Before = $aRadio[$r][6] EndIf Next ;ConsoleWrite("Build GUI" & @CRLF) ;Build GUI _Build_PlayerGUI() _Build_CoverGUI() ;ConsoleWrite("Show GUI" & @CRLF) GUISetState(@SW_SHOW, $PlayerGUI) If $Radio_CoverLink <> "" Then GUISetState(@SW_SHOW, $CoverGUI) EndIf ;GetPlayerDATA() - GetCoverDATA() GetPlayerDATA() AdlibRegister("GetPlayerDATA", 8000) If $Radio_CoverLink <> "" Then GetCoverDATA() AdlibRegister("GetCoverDATA", 8000) EndIf EndFunc ;==>ContextMenu_ChangeRadio Func UseCurl($Link, $Timeout, $binary = 0, $write = 0, $file = "") Local $Error = "" Local $Data = "" Local $Curl = Curl_Easy_Init() If Not $Curl Then Return If $write = 0 Then ;Read Mode ; How to get html or header data? ; 1. Set $CURLOPT_WRITEFUNCTION and $CURLOPT_HEADERFUNCTION to Curl_DataWriteCallback() ; 2. Set $CURLOPT_WRITEDATA or $CURLOPT_HEADERDATA to any number as identify ; 3. Use Curl_Data_Get() to read the returned data in binary format ; 4. Use Curl_Data_Cleanup() to remove the data Local $Html = $Curl ; any number as identify Local $Header = $Curl + 1 ; any number as identify Curl_Easy_Setopt($Curl, $CURLOPT_URL, $Link) Curl_Easy_Setopt($Curl, $CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A') Curl_Easy_Setopt($Curl, $CURLOPT_FOLLOWLOCATION, 1) Curl_Easy_Setopt($Curl, $CURLOPT_ACCEPT_ENCODING, "") Curl_Easy_Setopt($Curl, $CURLOPT_WRITEFUNCTION, Curl_DataWriteCallback()) Curl_Easy_Setopt($Curl, $CURLOPT_WRITEDATA, $Html) Curl_Easy_Setopt($Curl, $CURLOPT_HEADERFUNCTION, Curl_DataWriteCallback()) Curl_Easy_Setopt($Curl, $CURLOPT_HEADERDATA, $Header) Curl_Easy_Setopt($Curl, $CURLOPT_COOKIE, "tool=curl; script=autoit; fun=yes;") Curl_Easy_Setopt($Curl, $CURLOPT_TIMEOUT, $Timeout) Curl_Easy_Setopt($Curl, $CURLOPT_SSL_VERIFYPEER, 0) Local $Code = Curl_Easy_Perform($Curl) If $Code = $CURLE_OK Then ;ConsoleWrite("Content Type: " & Curl_Easy_GetInfo($Curl, $CURLINFO_CONTENT_TYPE) & @LF) ;ConsoleWrite("Download Size: " & Curl_Easy_GetInfo($Curl, $CURLINFO_SIZE_DOWNLOAD) & @LF) $Data = BinaryToString(Curl_Data_Get($Html)) $Error = "" ;MsgBox(0, 'Header', BinaryToString(Curl_Data_Get($Header))) ;MsgBox(0, 'Html', BinaryToString(Curl_Data_Get($Html))) Else ;ConsoleWrite(Curl_Easy_StrError($Code) & @LF) $Data = "" $Error = Curl_Easy_StrError($Code) EndIf Curl_Easy_Cleanup($Curl) Curl_Data_Cleanup($Header) Curl_Data_Cleanup($Html) Else ;Write Mode EndIf Local $aray[2] = [$Data,$Error] return $aray EndFunc Func GetCoverDATA() ;ConsoleWrite("GetCoverDATA (Start)" & @CRLF) ;Get $RealCoverLink If $Radio_CoverLink_Start = "" Then ;ConsoleWrite("$RealCoverLink = $Radio_CoverLink" & @CRLF) Local $RealCoverLink = $Radio_CoverLink Else ;ConsoleWrite("$RealCoverLink <> $Radio_CoverLink" & @CRLF) ;UseCurl($Link, $Timeout, $binary = 0, $write = 0, $file = "") Local $aray = UseCurl($Radio_CoverLink, 5) Local $Data = $aray[0] Local $Error = $aray[1] If $Error <> "" then ;ConsoleWrite("$Error = " & $Error & @CRLF) EndIf Local $Between = _StringBetween($Data, $Radio_CoverLink_Start, $Radio_CoverLink_End) If @error <> 0 Then $Between = "" Else $Between = $Between[$Radio_CoverLink_BetweenNum] EndIf $RealCoverLink = $Radio_CoverLink_Before & $Between $RealCoverLink = StringReplace($RealCoverLink, " ","%20") EndIf ;ConsoleWrite("$RealCoverLink = " & $RealCoverLink & @CRLF) ;UseCurl($Link, $Timeout, $binary = 0, $write = 0, $file = "") Local $Cover_Read = UseCurl($RealCoverLink, 5, 1) $Cover_Read = $Cover_Read[0] If $Cover_Read <> $Previous_Cover_Read and $Cover_Read <> "" Then $Previous_Cover_Read = $Cover_Read Local $hMem = _MemGlobalAllocFromBinary($Cover_Read) Local $hImage = _GDIPlus_ImageLoadFromHGlobal($hMem) Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($CoverGUI) _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, 0, 0, $CoverSize, $CoverSize) _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_ImageDispose($hImage) EndIf ;ConsoleWrite("GetCoverDATA (End)" & @CRLF) EndFunc ;==>GetCoverDATA() Func GetPlayerDATA() _ReduceMemory() ;ConsoleWrite("GetPlayerDATA (Start)" & @CRLF) ;Assign Local $Previous_Data, $Previous_DataLink For $i = 0 To UBound($aLabel) - 1 If $Radio_Name = $aLabel[$i][0] Then If $Previous_DataLink <> $aLabel[$i][3] Then Local $aray = UseCurl($aLabel[$i][3], 5) Local $Data = $aray[0] Local $Error = $aray[1] $Previous_Data = $Data $Previous_DataLink = $aLabel[$i][3] Else $Data = $Previous_Data $Previous_DataLink = $aLabel[$i][3] EndIf Local $Between = _StringBetween($Data, $aLabel[$i][4], $aLabel[$i][5]) If @error <> 0 Then $Between = "" Else If Not ($aLabel[$i][6] > Ubound($Between)-1) Then $Between = $Between[$aLabel[$i][6]] Else $Between = "" EndIf EndIf If $aLabel[$i][7] <> "" Then Local $Split = StringSplit($Between, $aLabel[$i][7], 1) If $Split[0] < $aLabel[$i][8] Then Local $Info = "" Else $Info = $Split[$aLabel[$i][8]] EndIf Else $Info = $Between EndIf If $Data = "" Then $Info = $Error EndIf $Info = StringReplace($Info, "â·", "·") $Info = StringReplace($Info, "apos;", "'") Assign($aLabel[$i][1] & $aLabel[$i][2], $Info) EndIf Next If _BASS_ChannelIsActive($MusicHandle) <> 1 and $Play = 1 Then _Audio_stop($MusicHandle) ;ConsoleWrite("Start playing sound" & @CRLF) $Play = 1 $MusicHandle = _Set_url($Radio_SoundLink) _Audio_play($MusicHandle) ;ConsoleWrite("Set Volume" & @CRLF) $VolumePercent = IniRead($Save_INI, @ComputerName, "Volume", 4) $Previous_VolumePercent = $VolumePercent _Set_volume($VolumePercent) EndIf ;Update Ctrl For $i = 0 To UBound($aLabel) - 1 If $Radio_Name = $aLabel[$i][0] Then If Eval($aLabel[$i][1] & $aLabel[$i][2]) <> GUICtrlRead($aLabel[$i][9]) Then GUICtrlSetData($aLabel[$i][9], Eval($aLabel[$i][1] & $aLabel[$i][2])) EndIf EndIf Next ;ConsoleWrite("GetPlayerDATA (End)" & @CRLF) EndFunc ;==>GetPlayerDATA() #EndRegion ;==> Internal Func While 1 Local $Msg = GUIGetCursorInfo($PlayerGUI) If $Msg[4] = $Close Then If $Msg[2] = 1 Then _GUICtrlButton_SetImage($Close, @ScriptDir & "\AutoIt Radio Player\Img\Closep.bmp");MousePressed Else _GUICtrlButton_SetImage($Close, @ScriptDir & "\AutoIt Radio Player\Img\Closeo.bmp");MouseOver EndIf Else _GUICtrlButton_SetImage($Close, @ScriptDir & "\AutoIt Radio Player\Img\Close.bmp");Nothing EndIf If $Play = 1 Then If $Msg[4] = $PlayPause Then If $Msg[2] = 1 Then _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\stopp.bmp");MousePressed Else _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\stopo.bmp");MouseOver EndIf Else _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\stop.bmp");Nothing EndIf Else If $Msg[4] = $PlayPause Then If $Msg[2] = 1 Then _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\playp.bmp");MousePressed Else _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\playo.bmp");MouseOver EndIf Else _GUICtrlButton_SetImage($PlayPause, @ScriptDir & "\AutoIt Radio Player\Img\play.bmp");Nothing EndIf EndIf Sleep(100) WEnd ;1075 v0.0.0.8 30/04/2016 01:55 Edited April 30, 2016 by Synapsee
nend Posted April 27, 2016 Posted April 27, 2016 (edited) I've tryd it but it won't play anything (no sound). But (since I ran your program) now every program I use that uses bass.dll won't give any sound when not compiled on my pc. When I compile the script everything works ok but not when I started from the code, everything than works ok but no sound, So how can I fixed this!!!! EDIT I've fixed this to run this small script $VolumeTarget = "autoit3.exe" ShellExecute("nircmdc.exe", 'setappvolume "' & $VolumeTarget & '" ' & 10, @ScriptDir & "\AutoIt Radio Player\dep", "", @SW_HIDE) I don't think this is the right way to make a program!!! Edited April 27, 2016 by nend
Synapsee Posted April 28, 2016 Author Posted April 28, 2016 (edited) Hi nend and thx for spend time on my script but i can't understand. Have u try mousewheel up/down ? This don't change the volume ? Quote Install/Use : -Use MouseWheel for change volume Note : On first start : volume = 4% When u use that : Quote $VolumeTarget = "autoit3.exe" ShellExecute("nircmdc.exe", 'setappvolume "' & $VolumeTarget & '" ' & 10, @ScriptDir & "\AutoIt Radio Player\dep", "", @SW_HIDE) This set your volume @ 100% or 10% ? Set the volume @ 50% should be : ShellExecute("nircmdc.exe", 'setappvolume "' & $VolumeTarget & '" ' & 50/100, @ScriptDir & "\AutoIt Radio Player\dep", "", @SW_HIDE) Edit : Quote But (since I ran your program) now every program I use that uses bass.dll won't give any sound when not compiled on my pc. ok, i understand better, sorry for this problem, i will look arround use bass.dll instead of change the "autoit3.exe" volume lvl. Edited April 28, 2016 by Synapsee
nend Posted April 28, 2016 Posted April 28, 2016 (edited) The problem is that the nircmdc.exe set al the audio volume for all autoit scripts. If u use Bass.dll for your project it will work a lot better. When I started this script all my scripts didn't work properly anymore, but by exmanine your script I realized that the command niccmdc take over every au3 script audio. I will check your script again (with the mouse wheel) and come back on it. EDIT: I've try'd it again but the same issue, program won't react and no sound (even with mousewheel) But now I didn't get the sound back and needed a system recovery to get it work again. For now I won't test it again until you get rid of nircmdc. Edited April 28, 2016 by nend Synapsee 1
wakillon Posted April 28, 2016 Posted April 28, 2016 Hi Synapsee There is no error message, but I have no sound and i can not exit. I have tried script and compiled version under Win 8.1 Synapsee 1 AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts
Synapsee Posted April 28, 2016 Author Posted April 28, 2016 (edited) Hey, thx for reply <3 This is strange, the script is probably stuck somewhere on spacetime Can u see gui ? gui is feeded with cover/data ? can u see close button ? can u drag gui ? can u rightclic ? the gui hang ? when u mousewheel u see current volume % appear ? I work on a new version with more console return, this will help a lot for this case. Actually i progress on curl stuff, because i can't set timeout for the iniread($coverlink) but with curl i can : ) Edited April 28, 2016 by Synapsee
nend Posted April 28, 2016 Posted April 28, 2016 (edited) Here the same problem program hangs and kills the audio I have to kill it in the taskmanager to stop the program (windows 10 64 bits). I see the gui but the I can do anything, did you see the pm I send you? It's very simpel to rebuild this app with bass.dll and than you don't have this problem. Edited April 28, 2016 by nend
Synapsee Posted April 28, 2016 Author Posted April 28, 2016 Quote did you see the pm I send you? No, i don't know how i can see it. I see u posted on my profile but where ? this is the ask ^^ Can't find Quote It's very simpel to rebuild this app with bass.dll and than you don't have this problem. It's sure i need use bass.dll but the program hangs for another reason i think. And I have no hang on start on my computer. I think the best is wait for another version with more debug stuff for find where the script stuck.
wakillon Posted April 28, 2016 Posted April 28, 2016 (edited) 1 hour ago, Synapsee said: Can u see gui ? yes gui is feeded with cover/data ? yes can u see close button ? yes, but when i click nothing appens can u drag gui ? no can u rightclic ? yes the gui hang ? no i don't think when u mousewheel u see current volume % appear ? no Edited April 28, 2016 by wakillon Synapsee 1 AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts
Synapsee Posted April 30, 2016 Author Posted April 30, 2016 (edited) Last ver : v0.0.0.8 AutoIt Radio Player v0.0.0.8.zip Changelog : Spoiler -Better code practice Replace dim with local Use #AutoIt3Wrapper_Au3Check_Parameters=-w 1 -w 2 -w 3 -w- 4 -w 6 -w- 7 Improve some comment -Replace SoundPlay\nircmd with Bass.dll usage SoundPlay\nircmd is a novice usage, Bass.dll usage is better Now if an event like disconnect appear the sound resume. Thx to nend, ..., No ! Big Thx to nend -Replace InetRead/_InetGetSource with Curl.au3 usage InetRead/_InetGetSource seems limited with timeout management Both replaced with Curl_Easy_Perform() Set all timeout to 5s If timeout is reached about tracktitle for sample you will see now "timeout was reached" (curl error return) TODO : Spoiler -Update first post -About Timeout/ GUI-blocking Curl_Easy_Perform() seems better but not the best for GUI Hang while timeout is not reached. I need study about Curl.au3 for use Curl_Multi_Perform() (study the non-GUI-blocking technique sample). This is done. Curl.au3\Curl_Example_Multi.au3 rocks -Add right clic functionnality for a Website Station shorcut. This is done with _WinAPI_AssocQueryString(".html", $ASSOCSTR_EXECUTABLE) -Add right clic functionnality for a gui for add/del station or any other label. i will probably use _FileReadToArray, _FileWriteFromArray for save the gui data. In progress... or any other label explain : Current : TrackTiTle Coffee Ready : Yes/No Weather : 26 Degres Current RightClic : Current Station (onclic station switch) Separator Station A (onclic station switch) Station B (onclic station switch) Next Target RightClic : Current Station Website (open the station url) Load (change to this station) Separator Station A Website (open the station url) Load (change to this station) Station B Website (open the station url) Load (change to this station) Separator Config (load a nice gui for manage the list station) Console return : Spoiler Console should return : Start Build GUI Build PlayerGUI Build CoverGUI Show GUI GetPlayerDATA (Start) Start playing sound Set Volume GetPlayerDATA (End) GetCoverDATA (Start) $RealCoverLink = http://imglink.jpg GetCoverDATA (End) GUIRegisterMsg And a while with : GetPlayerDATA (Start) GetPlayerDATA (End) GetCoverDATA (Start) $RealCoverLink = http://imglink.jpg GetCoverDATA (End) Related link : bass.dll source : http://www.un4seen.com/bass.html (v2.4.12.1) bass.au3 source : bass related forum post (patch 9.2/Constant from 9.0) nice autoit program for help with Curl.au3 usage by wakillon : Mp3SearchEngine nice autoit program "radio related" by nend : http://trayradio.com/ Edited April 30, 2016 by Synapsee coffeeturtle 1
wakillon Posted May 1, 2016 Posted May 1, 2016 Now i can drag gui and volume is displayed but i have no sound... AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts
Synapsee Posted May 1, 2016 Author Posted May 1, 2016 10 hours ago, wakillon said: Now i can drag gui and volume is displayed but i have no sound... It's probably related to v0.0.0.7 (nircmd.exe use). Try up sound on the windows mixer panel (While Player running). %windir%\System32\SndVol.exe
argumentum Posted May 1, 2016 Posted May 1, 2016 nice. Why is it: GetCoverDATA (Start) $RealCoverLink = http://wcdr.servemp3.com:8112/playingart?sid=2 GetCoverDATA (End) every second ? and if you could by default set Opt("TrayAutoPause", 0) while without a tray menu Thanks for sharing. Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting.
Synapsee Posted May 1, 2016 Author Posted May 1, 2016 hi argumentum, Quote every second ? for the moment it's all 8s : ... AdlibRegister("GetCoverDATA", 8000) ... AdlibRegister("GetPlayerDATA", 8000) ... i will add a config GUI where u can config this timing for each downloaded DATA. Quote Opt("TrayAutoPause", 0) Not a bad idea, just discover that, seems a good improve for make autoit trayicon more easy to use. Thx u for sharing and testing : ) argumentum 1
wakillon Posted May 12, 2016 Posted May 12, 2016 I'm trying some Bass Plugin scripts since yesterday and note that i have no sound ! So, intriged by this problem, I made the connection with your script where i have no sound too. After having verified my sound card drivers, uninstall and reinstall, there is no changes... In the meantime i have used my Mp3SearchEngine who use bass.dll and i have sound... So a bit lost, i did not understand why some scripts "works" and others not ! And i realize that Mp3SearchEngine was compiled and other not. So i compile my script and run it and...i get sound ! and same for yours too ! So be reassured your last version works well Now, I have to find why i have a sound problem running "Bass" script not compiled... AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts
Synapsee Posted May 12, 2016 Author Posted May 12, 2016 (edited) Start a not compiled script, start play a sound (you should have no sound). and do that : Edit ; nircmd.exe have set "autoit3.exe" sound to 0% when u compile a script "yourscript.exe" the sound is at 100% but if not compiled windows see him like "autoit3.exe" and sound is at 0% Edited May 12, 2016 by Synapsee
wakillon Posted May 12, 2016 Posted May 12, 2016 I got it to this path C:\Windows\WinSxS\x86_microsoft-windows-audio-volumecontrol_31bf3856ad364e35_6.3.9600.17415_none_5b14d0ca22da016a\SndVol.exe and sound is back thanks. So, it was nircmd.exe who was responsible of this problem ? AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts
Synapsee Posted May 12, 2016 Author Posted May 12, 2016 C:\Windows\WinSxS\x86_microsoft-windows-audio-volumecontrol_31bf3856ad364e35_6.3.9600.17415_none_5b14d0ca22da016a\SndVol.exe good job ! Not really, u start my v0.0.0.7, nircmd set autoit3.exe @ 0%, after a error appear, you close the script, the sound is always at 0% set the autoit3.exe volume directly is just a bad idea because this affect all not compiled script. But nircmd.exe have do the good job, its more a bad use of him. Bass seems set volume only for the current script so it's clearly better. I'm really sorry for that problem, im happy see you resolve it ; ) I'm continue dev my script, i learn a lot every day, i have add some functionnality with a gui for config, etc... My dream now it's add something like that : https://autoit.de/index.php/Thread/23204-Audio-Visualization-Collection/ while playing radio ; )
wakillon Posted May 12, 2016 Posted May 12, 2016 Something like this ? AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts
Synapsee Posted May 12, 2016 Author Posted May 12, 2016 Yeah, like that : ) You will clearly inspire me again with that TinyMp3Player ^^
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now