Stream schneiden (Bass.dll)

  • Hey @ all,
    wie kann man ein Stream mit der Bass.dll schneiden? Z.B. so, dass man Sekunde 1 bis 4 und 8 bis 10 hat bzw 5 bis 7 rausgeschnitten sind?

    mfG
    Developer30

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

    Einmal editiert, zuletzt von Developer30 (7. November 2010 um 18:36)

  • heißt "Offset", dass der Audiofile erst ab dieser Stelle abgespielt wird?

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • Wenn du einen DecodingStream zu einem Mixerstream hinzufügst, dann kannst du mit Channelsetpos einstellen, ab welcher Position des Streams begonnen wird.

    Eine einfachere Möglkichkeit wäre noch eine Lautstärken-Hüllkurve - damit kannst du einstellen, welche Stellen mit welcher Lautstärke gespielt werden
    Also einfach auf 0 setzen, wenn du etwas "rausschneiden" willst

    Dieses Beispiel hilft dir vielleicht:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_UseX64=n
    #include "Bass.au3"
    #include "BassMix.au3"

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

    OnAutoItExitRegister("_FreeBass")

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

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

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

    $sFile1 = FileOpenDialog("Open...", "", "playable formats (*.MP3;*.MP2;*.MP1;*.OGG;*.WAV;*.AIFF;*.AIF)")
    ___Debug($sFile1 = "", $sFile1)

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

    $sFile2 = FileOpenDialog("Open...", "", "playable formats (*.MP3;*.MP2;*.MP1;*.OGG;*.WAV;*.AIFF;*.AIF)")
    ___Debug($sFile2 = "", $sFile2)

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

    _BASS_Startup(@ScriptDir & "\bass.dll")
    ___Debug(@error, "load bass.dll")

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

    _BASS_MIX_Startup(@ScriptDir & "\bassmix.dll")
    ___Debug(@error, "load bassmix.dll")

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

    _BASS_Init(0, -1, 44100, 0, "")
    ___Debug(@error, "initialize bass")

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

    $hStream1 = _BASS_StreamCreateFile(False, $sFile1, 0, 0, $BASS_STREAM_DECODE)
    ___Debug(@error, "create stream from file 1")

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

    $hStream2 = _BASS_StreamCreateFile(False, $sFile2, 0, 0, $BASS_STREAM_DECODE)
    ___Debug(@error, "create stream from file 2")

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

    $hMixer = _BASS_Mixer_StreamCreate(44100, 2, $BASS_MIXER_END)
    ___Debug(@error, "create mixer stream")

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

    _BASS_Mixer_StreamAddChannel($hMixer, $hStream1, 0)
    ___Debug(@error, "add stream to mixer")
    _BASS_Mixer_StreamAddChannel($hMixer, $hStream2, 0)
    ___Debug(@error, "add stream to mixer")

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

    $i2Sec_Bytes = _BASS_ChannelSeconds2Bytes($hMixer, 5)
    ___Debug(@error, "2 seconds = " & $i2Sec_Bytes & " bytes")

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

    Global $aNodes1[4][2]
    $aNodes1[0][0] = 3
    $aNodes1[1][0] = 0
    $aNodes1[1][1] = 0
    $aNodes1[2][0] = $i2Sec_Bytes
    $aNodes1[2][1] = 1
    $aNodes1[3][0] = $i2Sec_Bytes * 2
    $aNodes1[3][1] = 0

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

    Global $aNodes2[4][2]
    $aNodes2[0][0] = 3
    $aNodes2[1][0] = 0
    $aNodes2[1][1] = 1
    $aNodes2[2][0] = $i2Sec_Bytes
    $aNodes2[2][1] = 0
    $aNodes2[3][0] = $i2Sec_Bytes * 2
    $aNodes2[3][1] = 1

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

    _BASS_Mixer_ChannelSetEnvelope($hStream1, BitOR($BASS_MIXER_ENV_VOL, $BASS_MIXER_ENV_LOOP), $aNodes1)
    ___Debug(@error, "set volume envelope")

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

    _BASS_Mixer_ChannelSetEnvelope($hStream2, BitOR($BASS_MIXER_ENV_VOL, $BASS_MIXER_ENV_LOOP), $aNodes2)
    ___Debug(@error, "set volume envelope")

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

    _BASS_ChannelPlay($hMixer, True)
    ___Debug(@error, "start channel")

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

    While _BASS_ChannelIsActive($hMixer)
    $aEnv1 = _BASS_Mixer_ChannelGetEnvelopePos($hStream1, $BASS_MIXER_ENV_VOL)
    $aEnv2 = _BASS_Mixer_ChannelGetEnvelopePos($hStream2, $BASS_MIXER_ENV_VOL)
    ToolTip("Volume channel 1: " & $aEnv1[1] & @CRLF & "Volume channel 2: " & $aEnv2[1])
    Sleep(10)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _FreeBass()
    _BASS_StreamFree($hStream1)
    _BASS_StreamFree($hStream2)
    _BASS_Free()
    EndFunc ;==>_FreeBass

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

    Func ___DeBug($iError, $sAction)
    Switch $iError
    Case -1
    ConsoleWrite(@CRLF & "-" & $sAction & @CRLF)
    Case -2
    ConsoleWrite(@CRLF & ">" & $sAction & @CRLF)
    Case 0
    ConsoleWrite(@CRLF & "+" & $sAction & " - OK" & @CRLF)
    Case Else
    ConsoleWrite(@CRLF & "!" & $sAction & " - FAILED, @error: " & $iError & @CRLF)
    Exit
    EndSwitch
    EndFunc ;==>___DeBug

    [/autoit]
  • vielen dank :)

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."