Soundplay mehrere Dateien

  • Mithilfe der einfachen Sound-Funktionen ist ein Anpassen der Lautstärke nicht möglich. Man kann lediglich die Wave-Lautstärke einstellen, das hat aber nichts mit irgendwelchen .wav-Dateien zu tun, sondern meint die System-Lautstärke von Windows...

    Gruß Andy

  • Hey,

    ich hab eine Idee...
    Beim VLC-Player kann man die Lautstärke über die Startparameter festlegen!
    Ich denke, du weißt schon, worauf ich hinaus will, aber...


    [autoit]

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

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

    Dim $Array
    Global $counter
    $Array = _FileListToArray(@ScriptDir & "\mp3","*.mp3")
    ;@HomeDrive
    $VLC = @HomeDrive & "\Program Files\VideoLAN\VLC\vlc.exe"
    $FILE2PLAY = @ScriptDir & "\mp3\" & $Array[Random(1,$Array[0]+1)]
    $PARAM = " --volume 100"
    ShellExecute($VLC,$FILE2PLAY & $PARAM)

    [/autoit]

    Bei mir klappt das. Du musst halt nur $PARAM = " --volume 100" so anpassen, dass du auf 50 kommst. 100 ergibt bei mir nämlich 39%.
    lg chess

  • Guten Morgen zusammen,

    merci nochmals für die Tipps.
    Schade daß das mit Autoit nicht möglich ist.

    Es gibt ein Programm MP3Gain,
    da kann man alle mp3 Dateien einlesen und die
    Lautstärke per % für alle Dateien gleich setzen.

    Wenn das Autoit könnte, wäre natürlich im Code toll.
    Also ohne externe Programme.

    Liebe Grüße
    Ilse ;)

  • Bei Mp3 kann man die Abspiellautstärke direkt in der Datei angeben.
    Dazu muss man glaub ich in jedem Frameheader die richtigen Bytes entsprechend setzten.
    Genau das macht MP3Gain.
    (Nicht alle Audioplayer unterstützen diese Lautstärkeneinstellungen)

    Das wäre mit AutoIt möglich, jedoch sehr aufwändig - denke ich.
    Muss ich mir erst mal ansehen...


    Ein ähnliches Script wie MP3Gain hab ich als Beispiel bei der Bass UDF und nennt sich "LoudnessNormalizer"
    Das dekodiert und encodiert eine MP3 und das bedeutet leider Qualitätsverlust.

    E

  • Ich weiß nicht so recht, was Du suchst, aber Lautstärke für viele Songs gleich oder unterschiedlich setzen und abspielen, auch gleichzeitig, ist alles locker mit der Bass-UDF machbar!
    Wenn Du Dich ein wenig mit meinem Posting #7 beschäftigst, kriegst auch Du das hin :thumbup:
    Oder sag nochmal genau was Du möchtest, in dem Script ist alles benutzt, was Du brauchst...

  • Hallo zusammen,

    hm ich fasse mal nochmal zusammen worauf es ankommt:

    1. Es gibt einen Ordner MP3 mit Hintergrundmusik

    Spoiler anzeigen


    In diesem Ordner sind etliche mp3 Files enthalten
    Wichtig: Alle Files die immer in diesem Ordner sind, sollten alle die gleiche Backgroundlautstärke besitzen.
    Diese "Hintergrundlautstärke" für alle Files in dem Ordner sollte das Script steuern.


    2. Wird von einem anderen Ordner eine mp3 aufgerufen, dann ist diese lauter.

    Der Ablauf sollte also einfach so sein:

    1. Setze die Hintergrundlautstärke aller Files im mp3 Ordner auf z.B. 50%
    2. Wähle zufällig ein mp3 aus und starte die Musik ( das klappt ja bereits prima)

    Spoiler anzeigen
    [autoit]


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

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

    Dim $Array
    Global $counter
    $Array = _FileListToArray(@ScriptDir & "\mp3","*.mp3")

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

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

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

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

    [/autoit]


    3. Wird im Skript per Soundplay eine andere Datei (die nicht im Ordner mp3 ist) gestartet, dann ist diese logischerweise lauter.

    Das hätte einfach den Vorteil,
    es müsse nichts von Hand angepasst werden, kommen neue Files in den Ordner
    dann erhalten diese sofort z.B. 50% Grundlautstärke.

    Liebe Grüße
    Ilse ;)

  • Zwischenfrage: Sollen mp3-Files mit veränderter Lautstärke gespeichert werden oder lediglich nur wiedergegeben werden?
    Sprich: Alle Files in den Ordnern sollen im Original-Zustand bleiben, ja?
    Und alle .mp3's im Background-Ordner haben dasselbe Lautstärke-Niveau oder muss das erst angepasst werden?

    Spoiler anzeigen
    [autoit]

    #include <Bass.au3> ; Include-Verzeichnis
    #include <BassConstants.au3> ; Include-Verzeichnis
    #include <File.au3>

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

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

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

    $Hintergrund_Ordner_Pfad = "" ; Ordner-Pfad der Hintergrund-Musik (am Ende "\" wichtig) | anpassen!
    $Geraeusch_Mp3_Pfad = "" ; Mp3-Pfad einer Geräusch-Mp3 | anpassen!

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

    Global $Array = _FileListToArray($Hintergrund_Ordner_Pfad, "*.mp3")
    Global $Stream_Hintergrund, $Stream_Geraeusch

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

    Wiedergabe()

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

    While 1
    If _BASS_ChannelIsActive($Stream_Hintergrund) = "0" Then ; wenn Hintergund-Musik zuende, dann Exit
    _Bass_ChannelStop($Stream_Geraeusch)
    _BASS_StreamFree($Stream_Geraeusch)
    _Bass_ChannelStop($Stream_Hintergrund)
    _BASS_StreamFree($Stream_Hintergrund)
    _Bass_Free()
    Exit
    EndIf
    Sleep(100)
    Wend

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

    Func Wiedergabe()
    $Stream_Hintergrund = _BASS_StreamCreateFile(0, $Hintergrund_Ordner_Pfad & $Array[Random(1, $Array[0], 1)], 0, 0, 0)
    _BASS_ChannelPlay($Stream_Hintergrund, 1)
    _BASS_ChannelSetVolume($Stream_Hintergrund, 50)

    $Stream_Geraeusch = _BASS_StreamCreateFile(0, $Geraeusch_Mp3_Pfad, 0, 0, 0)
    _BASS_ChannelPlay($Stream_Geraeusch, 1)
    _BASS_ChannelSetVolume($Stream_Geraeusch, 100)
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von AndyTR (5. März 2012 um 13:12)

  • Hallo Andy,

    mußte kurz wieder los...
    Ich bekomme dein Script nicht zum laufen!
    Die original Fils sind im Ordner Scriptdir\music

    Spoiler anzeigen
    [autoit]


    #include <Bass.au3> ; Include-Verzeichnis
    #include <BassConstants.au3> ; Include-Verzeichnis
    #include <File.au3>

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

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

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

    $Hintergrund_Ordner_Pfad = @ScriptDir & "\music\" ; Ordner-Pfad der Hintergrund-Musik (am Ende "\" wichtig) | anpassen!
    $Geraeusch_Mp3_Pfad = "" ; Mp3-Pfad einer Geräusch-Mp3 | anpassen!

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

    Global $Array = _FileListToArray($Hintergrund_Ordner_Pfad, "*.mp3")
    Global $Stream_Hintergrund, $Stream_Geraeusch

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

    Wiedergabe()

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

    While 1
    If _BASS_ChannelIsActive($Stream_Hintergrund) = "0" Then ; wenn Hintergund-Musik zuende, dann Exit
    _Bass_ChannelStop($Stream_Geraeusch)
    _BASS_StreamFree($Stream_Geraeusch)
    _Bass_ChannelStop($Stream_Hintergrund)
    _BASS_StreamFree($Stream_Hintergrund)
    _Bass_Free()
    Exit
    EndIf
    Sleep(100)
    Wend

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

    Func Wiedergabe()
    $Stream_Hintergrund = _BASS_StreamCreateFile(0, $Hintergrund_Ordner_Pfad & $Array[Random(1, $Array[0], 1)], 0, 0, 0)
    _BASS_ChannelPlay($Stream_Hintergrund, 1)
    _BASS_ChannelSetVolume($Stream_Hintergrund, 50)

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

    $Stream_Geraeusch = _BASS_StreamCreateFile(0, $Geraeusch_Mp3_Pfad, 0, 0, 0)
    _BASS_ChannelPlay($Stream_Geraeusch, 1)
    _BASS_ChannelSetVolume($Stream_Geraeusch, 100)
    EndFunc

    [/autoit]

    Deine Fragen

    Sollen mp3-Files mit veränderter Lautstärke gespeichert werden oder lediglich nur wiedergegeben werden?

    Wenn das Script die Wiedergabe ändern kann, dann reicht das.
    Files können dann im original-Zustand bleiben.

    Lautstärke-Niveau...
    Manche haben 80 db andere 86 db...das ist ja bei mp3 Files so eine Sache.
    Perfekt wäre es natürlich so:
    1. Alle Files im Ordner = 90 db
    2. Alle Files im Ordner - 30 db

    In deinem Script habe ich alles im original Autoit Ordner drin
    #include <Bass.au3> ; Include-Verzeichnis
    #include <BassConstants.au3> ; Include-Verzeichnis

    bekomme keinen Error, höre aber nichts!
    Muß unbedingt der Geräuschpfad existieren?

    Probiere noch...

    Liebe Grüße
    Ilse ;)

  • Ist denn das Icon in der Symbolleiste zu sehen, sprich das Script oder beendet es sich direkt? bass.dll auch da, wo sie hingehört? Denn bei mir ist genau das der fall, was Du beschreibst, wenn die .dll fehlt...
    Ansonsten weiß ich auch nicht weiter :huh:

    Kann jemand das Verhalten bestätigen?

  • Hallo Andy,

    bass.dll ist im Scriptverzeichnis
    Also im gleichen Verzeichnis wie das Hauptscript...

    ICO ist nicht zu sehen!
    Es wird sofort beendet!

    Güße
    Ilse :(

  • Versuch mal die While-Schleife zu ersetzen, wenn das nicht funktioniert und alles stumm bleibt, dann weiß ich auch nicht weiter, sorry :huh:

    Spoiler anzeigen
    [autoit]

    While 1
    #cs
    If _BASS_ChannelIsActive($Stream_Hintergrund) = "0" Then ; wenn Hintergund-Musik zuende, dann Exit
    _Bass_ChannelStop($Stream_Geraeusch)
    _BASS_StreamFree($Stream_Geraeusch)
    _Bass_ChannelStop($Stream_Hintergrund)
    _BASS_StreamFree($Stream_Hintergrund)
    _Bass_Free()
    Exit
    EndIf
    #ce
    Sleep(100)
    Wend

    [/autoit]


    Gruß Andy