Soundplay mehrere Dateien

  • Hallo,

    eine Frage zu Soundplay:

    Ich starte 2 Dateien gleichzeitig:

    1. Musik (instrumental)
    2. Geräusche

    [autoit]


    $Musik= _SoundOpen(@ScriptDir & "\Musik.mp3")
    _SoundPlay($Musik, 0) ; spielt durch... Volume ändern!!! z.B. leise

    $Geraesche = _SoundOpen(@ScriptDir & "\Ger.mp3")
    _SoundPlay($allesehen, 1); 1 Geräusch ca. 10 Sekunden...Volume ändern!!! z.B. laut
    _SoundClose($Geraesche )

    [/autoit][autoit][/autoit][autoit]

    _SoundClose($Musik)

    [/autoit]

    Meine Frage:
    Kann ich beiden *.mp3's eine unterschiedliche Lautstärke zuteilen.
    Also ohne die mp3's mit unterschiedlichen Lautstärken abzuspeichern.

    z.B.
    $Musik (Volume = 40)
    $Geraesche (Volume = 80)

    Geht das?

    Grüße
    Ilse ;)

    • Offizieller Beitrag

    Ich denke nicht, das du dein Vorhaben mit der Standard UDF lösen kannst.
    Das ist ein Fall für die bass.dll, frag mich aber nicht wie das geht, hab selbst noch nie damit gearbeitet.
    Einfach mal nach bass.dll im Forum suchen.

  • Hallo Raupi,

    nur mal ein Gedanke...ohne dll

    man könnte doch mehrere Instanzen verwenden.
    Jedem Skript dann eine andere Volume geben...

    Eine Idee ob das klappen kann?

    :( Ilse

    • Offizieller Beitrag

    Wie willst du das timen? Du weist ja nicht wie lange das Script zum laden braucht und wieviel Zeit vergeht bis jedes Script startet.

  • Hallo Raupi,

    sorry mußte kurz weg.

    Die Musikdatei.mp3 ist die Backmusik.
    Die wird einmal geladen und spielt ganz durch. Also keine Timingprobleme.
    Das andere sind die kleinen Dateien die im Script danach geladen werden.

    Muß man das mit SoundSetWaveVolume machen? Ist glaube ich nur für .*wav!

    Ich stehe momentan vor folgenden Problemen ...müßte eigentlich mehrere Threads machen...

    1. Die Musik.mp3's

    Spoiler anzeigen


    1. Im Script Ordner liegen mehrere Files
    2. Es sollte eine per Zufall ausgewählt werden
    3. Diese Datei sollte leise (-50%) abgespielt werden.

    Wie kann ich nur eine mp3 (egal welche) per Zufall vom Scriptordner starten?

    :( Liebe Grüße
    Ilse

  • Hi,

    ich würde alle *.mp3-Dateien in ein *.ini-File eintragen, ungefähr so:

    Code
    [MAIN]
    
    
    SONG1=LiedNr1.mp3
    SONG2=LiedNr2.mp3
    
    
    usw...

    Und dann, mit einem IniRead und Random zufällig eine auswählen.

    LG chess

    EDIT:
    Also ungefähr so:

    [autoit]

    $File2Play = IniRead("bla.ini","MAIN","SONG" & Random(1,$LiederAnzahl,1),0)

    [/autoit]
  • Mal schnell was gemacht ;)

    Spoiler anzeigen
    [autoit]

    #include "Bass.au3"

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{Esc}", "_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    _BASS_Startup(@ScriptDir & "\bass.dll")
    _BASS_Init(0, -1, 44100, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $Pfad = FileSelectFolder("", "")
    ;$Pfad = @UserProfileDir & "\Music\MP3's\" ; anpassen!
    Global $Array = Array_GetFolderFiles($Pfad)
    Global $Line, $Stream
    Wiedergabe()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    If _BASS_ChannelIsActive($Stream) = "0" Then
    _Bass_ChannelStop($Stream)
    _BASS_StreamFree($Stream)
    Wiedergabe()
    EndIf
    Sleep(10)
    Wend

    [/autoit] [autoit][/autoit] [autoit]

    Func Array_GetFolderFiles($sPath)
    $oFSO = ObjCreate("Scripting.FileSystemObject")
    $sFiles = ""
    For $sFile In $oFSO.GetFolder($sPath).Files
    If StringRight($sFile.Path, 4) = ".mp3" or StringRight($sFile.Path, 4) = ".wav" Then $sFiles &= $sFile.Path & "|"
    Next
    Return StringSplit(StringTrimRight($sFiles, 1), "|")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Wiedergabe()
    $Line = Random(1, $Array[0], 1)
    $Stream = _BASS_StreamCreateFile(0, $Array[$Line], 0, 0, 0)
    _BASS_ChannelPlay($Stream, 1)
    _BASS_ChannelSetVolume($Stream, 50)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _Bass_ChannelStop($Stream)
    _BASS_StreamFree($Stream)
    _BASS_Free()
    Exit
    EndFunc

    [/autoit]


    Gruß Andy :rolleyes:

  • Hallo chesstiger,

    dachte auch schon an eine ini.
    Aber der Workaround wäre nicht toll.

    Weil,... tausche ich mp3's aus, dann stimmt die ini nicht mehr.
    Ich dachte am besten wäre ein Ordner wo alle Musik.mp3's enthalten sind.
    Wenn sich daran etwas an der Anzahl, Titel...ändert, soll das... das Script nicht beeinflussen.

    1. Am besten wäre es den Inhalt des Ordners (nur mp3)irgendwie in ein Array zu lesen
    2. und dann aus dem Ordner eine Datei zufällig wählen.


    Habe schon mit _FileReadtoArray probiert, bin aber nicht weitergekommen.
    Es müsste nach *.mp3 gefiltert werden. Arrays huh...

    Grüße Ilse
    :(

  • Also bei mir listet das hier

    [autoit]

    #include
    Dim $Array
    Global $counter
    $Array = _FileListToArray(@ScriptDir & "\mp3","*.mp3")
    Do
    $counter+=1
    MsgBox(0,"",$Array[$counter])
    Until $Array[0] = $counter

    [/autoit]


    alle Dateien im Ordner mp3 auf.

    Kannst du damit was anfangen?;)

    lg chess

  • Hallo Andy,

    merci für deine Mühe,
    aber da tut sich nichts!

    Fehler in der Bass.au3

    Spoiler anzeigen


    \Script\Bass.au3(727,53) : WARNING: $BASS_INFO: possibly used before declaration.
    \Bass.au3(927,125) : WARNING: $BASS_UNICODE: possibly used before declaration.

    Benutze Autoit 64bit Windows 7

    Bass.au3 ist im Autoit Include-Verzeichnis...

    Wenn ich Script.au3 starte kommen die Fehler.

    :( Ilse

  • chesstiger

    ja das klappt soweit prima.
    Wie kann man das machen, daß die Anzeige per Zufall gewählt wird?

    Andy

    hat an der BassConstants.au3 gehängt.

    Fehler sind jetzt alle weg, aber nichts passiert.
    Weiß nicht wirklich was dein Script macht...?
    Bei der Ordnerwahl, wähle ich den mp3 Ordner mit den Files

    :( Ilse

  • Also du wählst halt in dem Dialog den Ordner aus, in dem deine Musik liegt, alle mp3-/wav-Files werden in ein Array geschrieben, dann wird nacheinander zufällig einer der Tracks durchgespielt, sollte funktionieren, hm ?(

  • Auch wenn Andy ja schon eine Komplettlösung präsentiert hat... ;)

    [autoit]

    #include <File.au3>
    Dim $Array
    Global $counter
    $Array = _FileListToArray(@ScriptDir & "\mp3","*.mp3")
    MsgBox(0,"",$Array[Random(1,$Array[0]+1)])

    [/autoit]


    Gibt den Namen einer zufällig gewählten *.mp3-Datei im Ordner mp3 aus.

    lg chess

  • Hallo Chesstiger,

    jetzt müsste das ganze nur noch zu hören sein!

    Spoiler anzeigen


    #include <File.au3>
    #include <Array.au3>
    #include <Sound.au3>

    Dim $Array
    Global $counter
    $Array = _FileListToArray(@ScriptDir & "\mp3","*.mp3")
    MsgBox(0,"",$Array[Random(1,$Array[0]+1)])

    $Ergebnis = _SoundOpen($Array[Random(1,$Array[0]+1)])
    _SoundPlay($Ergebnis, 1)
    ;_SoundClose($Ergebnis)

    Anzeigen tut er, abr nicht spielen?

    :( Ilse

  • Hab den Pfad drin...

    Spoiler anzeigen


    #include <File.au3>
    #include <Array.au3>
    #include <Sound.au3>

    Dim $Array
    Global $counter
    $Array = _FileListToArray(@ScriptDir & "\mp3","*.mp3")
    ;$Test = MsgBox(0,"",$Array[Random(1,$Array[0]+1)])
    $Test = @ScriptDir&$Array[Random(1,$Array[0]+1)]
    MsgBox(0,"a",$Test)

    $Ergebnis = _SoundOpen($Test)
    _SoundPlay($Ergebnis, 1)
    ;_SoundClose($Ergebnis)

    klappt nicht...

  • Also bei mir klappt das so...

    [autoit]

    #include <File.au3>
    #include <Array.au3>
    #include <Sound.au3>

    [/autoit][autoit][/autoit][autoit]

    Dim $Array
    $Array = _FileListToArray(@ScriptDir & "\mp3","*.mp3")
    MsgBox(0,"",$Array[Random(1,$Array[0]+1)])

    [/autoit][autoit][/autoit][autoit]

    $Ergebnis = _SoundOpen(@ScriptDir & "\mp3\" & $Array[Random(1,$Array[0]+1)])
    _SoundPlay($Ergebnis, 1)

    [/autoit]

    Mit Pfad einwandfrei. ;)

    LG chess

  • ich hab's

    $Test = @ScriptDir&"\mp3\"&$Array[Random(1,$Array[0]+1)]

    jetzt müsste nur noch für die Datei
    eine kleine Lautstärke eingestellt werden. Dann wäre es perfekt.

    ...schade muß gleich wieder los...
    sage trotzdem
    DANKE an alle

    Grüße
    Ilse ;)

  • Hm... für die Lautstärke fiele mir spontan nichts ein, ich habe aber noch nie was mit Sounds bei AutoIt gemacht, wenn man von Beep() absieht. ;)
    Ich guck mal, ob ich was finde, wenn ja, melde ich mich.

    lg chess

  • würde mich freuen...
    das Problem wäre wirklich,
    daß alle mp3 Dateien jedesmal im Ordner auf eine andere
    Lautstärke gebracht werden, ziemlich umständlich...

    Sage für heute
    Tschüss

    ;) Ilse