hallo,
ich bin gerade dabei ein Programm zum abspielen von .mp3 zu schreiben. Habe nun schon einiges geschafft, komme an manchen Punkten jedoch nicht mehr weiter.
Zum einen flackert die Anzeige des Aktuellen Position im Lied. Ich vermute, dass dies von der Aktualisierung durch die While-Schlaufe kommt. Ich wollte dies mittels Sleep verlangsamen, kann dann jedoch nichts mehr im Programm klicken, da das komplette Script "stehen" bleibt.
Auch habe ich eine Suchfunktion, welche soweit funktioniert, dass die den Suchbegriff in der ListView sucht, zu diesem springt, ihn jedoch nicht blau hinterlegt. Sollte der Begriff mehrfach in der List sein, so wir auch immer nur der erste angewählt und nicht zum nächsten übergesprungen.
Dann habe ich noch das Problem, dass das Lied nicht umgeschalten wird, wenn es zu ende ist. Wollte dies über eine If-Abfrage der Aktuellen Position sowie der Gesamtlänge realisieren, was jedoch nicht hingehauen hat.
Auch bräuchte ich noch einen Denkanstoß für einen Slider, welcher die aktuelle Position anzeigt und über den gespult werden kann.
Die Webradiofunktion spielt hier keine Rolle.
Ich bedanke mich bei allen fürs lesen und hoffe das mir der ein oder andere vllt auch helfen kann.
Hier mein Script:
Spoiler anzeigen
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.6.0
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit]#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <Sound.au3>
Global $abspiel,$titel
$test = @ScriptDir & "\play.gif"
$playing=false
[/autoit] [autoit][/autoit] [autoit]$Form1 = GUICreate("Form1", 610, 225, 209, 315)
;~ $bg = GUICtrlCreatePic("bg.jpg", 0, 0, 0, 0)
;~ GUIctrlsetState($bg, $GUI_DISABLE)
$pic=GUICtrlCreatePic($test, 460, 150, 37, 37)
$pic1=GUICtrlCreatePic(@ScriptDir & "\next.gif", 560, 150, 36, 36)
$pic2=GUICtrlCreatePic(@ScriptDir & "\back.gif", 410, 150, 36, 36)
$pic3=GUICtrlCreatePic(@ScriptDir & "\stop.gif", 510, 150, 37, 37)
$ListView1=GUICtrlCreateListView("Song|Pfad", 413, 50, 178, 75)
$ListView2=GUICtrlCreateListView("Song|Pfad", 20, 50, 350, 135)
$Search=GUICtrlCreateInput("",20, 17, 250, 20)
$SearchButton=GUICtrlCreateButton("Suchen", 291, 17, 80, 20)
GUICtrlSetState($listview1, $GUI_DROPACCEPTED)
$Menu=GUICtrlCreateMenu("Datei")
$Menumedia=GUICtrlCreateMenu("Medienbibliothek")
$MediaAktualisieren=guictrlcreatemenuitem("Medienbiliothek aktualisieren",$Menumedia)
$Pfad=guictrlcreatemenuitem("Pfad zum Medienordner festlegen",$Menumedia)
$show=guictrlcreatemenuitem("Pfad zum Medienordner anzeigen",$Menumedia)
$Beenden=guictrlcreatemenuitem("Beenden",$Menu)
$Radio=GUICtrlCreateMenu("Internetradio")
$add=guictrlcreatemenuitem("Link hinzufügen",$Radio)
guictrlcreatemenuitem("",$Radio)
$Label=GUICtrlCreateLabel("00:00:00", 412, 1 ,100 ,100)
$Label1=GUICtrlCreateLabel("Titel", 412, 14 ,150 ,100)
$Label2=GUICtrlCreateLabel("00:00:00", 412, 27 ,43 ,12)
GUISetState(@SW_SHOW)
start()
[/autoit] [autoit][/autoit] [autoit]While 1
if $playing = true Then
guictrlsetdata($label2,_SoundPos($abspiel))
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_DROPPED
$ar = _GUICtrlListView_GetSelectedIndices($listview2, True)
For $i = 1 To $ar[0]
$sItem = _GUICtrlListView_GetItemTextString($listview2, $ar[$i])
GUICtrlCreateListViewItem($sItem, $listview1)
Next
For $i = 0 To 1
_GUICtrlListView_SetColumnWidth($Listview1, $i, $LVSCW_AUTOSIZE)
Next
case $SearchButton
search()
case $add
addradio()
case $pic2
_back()
case $pic1
_next()
case $pic3
_stop()
pausebutton()
case $pic
if $test = @ScriptDir & "\play.gif" Then
sound()
if $playing = true then
$test = @ScriptDir & "\pause.gif"
GUICtrlDelete($pic)
$pic=GUICtrlCreatePic($test, 460, 150, 37, 37)
endif
else
_pause()
$test = @ScriptDir & "\play.gif"
GUICtrlDelete($pic)
$pic=GUICtrlCreatePic($test, 460, 150, 37, 37)
endif
case $beenden
exit
case $Pfad
$MediaPfad=FileSelectFolder("Medienorder auswählen", "")
IniWrite("config.ini", "Einstellungen","Medienpfad", $MediaPfad)
case $show
$mediapfadread = IniRead("config.ini", "Einstellungen","Medienpfad", "")
MsgBox(0, "Medienordner", "Aktuell ist folgender Medienordner ausgewählt:"&@crlf&@crlf&$mediapfadread)
case $MediaAktualisieren
$folder=IniRead("config.ini", "Einstellungen","Medienpfad", "")
$Result=media($folder, ".+\.mp3", 1)
FileDelete("media.ini")
_GUICtrlListView_DeleteAllItems($ListView2)
for $i = 1 to $result[0]
$Song1=stringsplit($Result[$i],"\")
$Song=StringSplit($Song1[$Song1[0]],".")
GUICtrlCreateListViewItem($Song[1]&"|"&$result[$i] , $ListView2)
IniWrite("media.ini", "Media", ""&$i&"", $Song[1]&"|"&$result[$i])
next
For $i = 0 To 1
_GUICtrlListView_SetColumnWidth($Listview2, $i, $LVSCW_AUTOSIZE)
Next
EndSwitch
WEnd
While 2
Local $lenght, $SoundPos
If $lenght = $SoundPos Then
_next()
endif
Wend
func sound()
$SongPlay=_GUICtrlListView_GetItemTextString($Listview1)
$SongRoot=StringSplit($SongPlay, "|")
if IsArray($abSpiel) then
_SoundResume($abspiel)
else
$abspiel=_SoundOpen($SongRoot[2])
if $abspiel="" Then
Msgbox(4096,"Datei","Es wurde keine Datei ausgewählt")
else
$playing=true
$playsound=_SoundPlay($abspiel, 0)
$lenght=_SoundLength($abspiel)
$SoundPos=_SoundPos($abspiel, 1)
GUICtrlSetData($label, $lenght)
guictrlsetdata($Label1, $SongRoot[1])
endif
endif
EndFunc
[/autoit] [autoit][/autoit] [autoit]func _Pause()
_SoundPause($abspiel)
EndFunc
func _stop()
_SoundStop($abspiel)
$abspiel=""
$playing=false
GUICtrlSetData($label2, "00:00:00")
EndFunc
func media($sSD, Const $sPat = '', Const $iF = 3)
Local $sRet = "", $sSubD = '|' & $sSD
Local $FFFF, $FFNF, $sDir, $iC
Local $aD, $hDLL = DllOpen('kernel32.dll')
If StringRight($sSD, 1) = '\' Then $sSD = StringTrimRight($sSD, 1)
If Not FileExists($sSD) Then Return SetError(2, 0, "")
If Not ($iF = 3 Or $iF = 1 Or $iF = 2) Then Return SetError(3, 0, "")
Do
$iC = StringInStr($sSubD, '|', 2, -1)
If @error Or $iC = 0 Then ExitLoop
$iC = StringLen($sSubD) - $iC
$sDir = StringRight($sSubD, $iC)
$sSubD = StringTrimRight($sSubD, $iC + 1)
$FFFF = FileFindFirstFile($sDir & '\*')
If $FFFF <> -1 Then
Do
$FFNF = FileFindNextFile($FFFF)
If @error Then ExitLoop
If @extended Then
If BitAND(StringRegExp($FFNF, $sPat) * 2, $iF) Then $sRet &= $sDir & '\' & $FFNF & '\|'
$aD = DllCall($hDLL, 'dword', 'GetFileAttributesW', 'wstr', $sDir & '\' & $FFNF)
If @error And BitAND($aD[0],0x400) Then ContinueLoop
$sSubD &= '|' & $sDir & '\' & $FFNF
ElseIf BitAND(StringRegExp($FFNF, $sPat), $iF) Then
$sRet &= $sDir & '\' & $FFNF & '|'
EndIf
Until 0
FileClose($FFFF)
EndIf
Until 0
DllClose($hDLL)
Return StringSplit(StringTrimRight($sRet, 1), '|')
EndFunc
func start()
If FileExists(@ScriptDir & "\media.ini") Then
$var = IniReadSection(@ScriptDir & "\media.ini", "Media")
If @error Then
MsgBox(4096, "Error", "Unable to read section.")
Else
For $i = 1 To $var[0][0]
GUICtrlCreateListViewItem($var[$i][1] , $ListView2)
Next
EndIf
Else
MsgBox(4096, "Medienbibliothek", "Es konnte keine Medienbibliotek geladen werden.")
EndIf
For $i = 0 To 1
_GUICtrlListView_SetColumnWidth($Listview2, $i, $LVSCW_AUTOSIZE)
Next
if FileExists("Radio.ini") then
$res=IniReadSection("Radio.ini", "Stations")
for $p = 1 to $res[0][0]
guictrlcreatemenuitem($res[$p][1],$Radio)
next
endif
EndFunc
func _next()
playbutton()
Local $sel = _GUICtrlListView_GetSelectedIndices($listview1,True)
if $sel[1] < (_GUICtrlListView_GetItemCount($listview1) -1) Then
$sel[1] += 1
Else
$sel[1] = 0
EndIf
_GUICtrlListView_SetItemSelected ($ListView1, $sel[1])
_GUICtrlListView_SetItemSelected ($ListView1, $sel[1])
$SongRoot=_GUICtrlListView_GetItemTextArray($Listview1,$sel[1])
if IsArray($abSpiel) Then _SoundStop($abspiel)
$abspiel=_SoundOpen($SongRoot[2])
$playsound=_SoundPlay($abspiel, 0)
$playing=true
$lenght=_SoundLength($abspiel)
GUICtrlSetData($label, $lenght)
guictrlsetdata($Label1, $SongRoot[1])
EndFunc
func _back()
playbutton()
Local $sel = _GUICtrlListView_GetSelectedIndices($listview1,True)
if $sel[1] > 0 Then
$sel[1] -= 1
Else
$sel[1] = _GUICtrlListView_GetItemCount($listview1) -1
EndIf
_GUICtrlListView_SetItemSelected ($ListView1, $sel[1])
_GUICtrlListView_SetItemSelected ($ListView1, $sel[1])
$SongRoot=_GUICtrlListView_GetItemTextArray($Listview1,$sel[1])
if IsArray($abSpiel) Then _SoundStop($abspiel)
$abspiel=_SoundOpen($SongRoot[2])
$playsound=_SoundPlay($abspiel, 0)
$playing=true
$lenght=_SoundLength($abspiel)
GUICtrlSetData($label, $lenght)
guictrlsetdata($Label1, $SongRoot[1])
EndFunc
func playbutton()
if $test = @ScriptDir & "\play.gif" Then
$test = @ScriptDir & "\pause.gif"
GUICtrlDelete($pic)
$pic=GUICtrlCreatePic($test, 460, 150, 37, 37)
Endif
Endfunc
func pausebutton()
if $test = @ScriptDir & "\pause.gif" then
$test = @ScriptDir & "\play.gif"
GUICtrlDelete($pic)
$pic=GUICtrlCreatePic($test, 460, 150, 37, 37)
endif
EndFunc
func search()
$read = guictrlread($Search)
$text = _GUICtrlListView_FindInText($ListView2, $read)
$text1 = _GUICtrlListView_EnsureVisible($ListView2, $text)
_GUICtrlListView_SetItemDropHilited($ListView2, $text1)
EndFunc
func addradio()
$addRadioLink=InputBox("Link hinzufügen", "Geben Sie hier den Link zur Internetradiostation ein:","","",150,130)
if FileExists("Radio.ini") then
$res=IniReadSection("Radio.ini", "Stations")
iniwrite("Radio.ini", "Stations", "Radio"&$res[0][0] + 1, $addRadioLink)
Else
iniwrite("Radio.ini", "Stations", "Radio1", $addRadioLink)
endif
EndFunc