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
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
Im Prinzip wie in diesem Beispiel: [ gelöst ] Fehler in meinem Script (Bass.dll)
Du musst halt nach jeder "Pause" den Stream erneut adden.
und mit _Bass_channelSetPos den Offset einstellen.
Oder ein Audiofile mehrmals laden und zu Beginn die gewünschten Offsets und Abspiellänge einstellen...
E
heißt "Offset", dass der Audiofile erst ab dieser Stelle abgespielt wird?
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:
#AutoIt3Wrapper_UseX64=n
#include "Bass.au3"
#include "BassMix.au3"
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)
$sFile2 = FileOpenDialog("Open...", "", "playable formats (*.MP3;*.MP2;*.MP1;*.OGG;*.WAV;*.AIFF;*.AIF)")
___Debug($sFile2 = "", $sFile2)
_BASS_Startup(@ScriptDir & "\bass.dll")
___Debug(@error, "load bass.dll")
_BASS_MIX_Startup(@ScriptDir & "\bassmix.dll")
___Debug(@error, "load bassmix.dll")
_BASS_Init(0, -1, 44100, 0, "")
___Debug(@error, "initialize bass")
$hStream1 = _BASS_StreamCreateFile(False, $sFile1, 0, 0, $BASS_STREAM_DECODE)
___Debug(@error, "create stream from file 1")
$hStream2 = _BASS_StreamCreateFile(False, $sFile2, 0, 0, $BASS_STREAM_DECODE)
___Debug(@error, "create stream from file 2")
$hMixer = _BASS_Mixer_StreamCreate(44100, 2, $BASS_MIXER_END)
___Debug(@error, "create mixer stream")
_BASS_Mixer_StreamAddChannel($hMixer, $hStream1, 0)
___Debug(@error, "add stream to mixer")
_BASS_Mixer_StreamAddChannel($hMixer, $hStream2, 0)
___Debug(@error, "add stream to mixer")
$i2Sec_Bytes = _BASS_ChannelSeconds2Bytes($hMixer, 5)
___Debug(@error, "2 seconds = " & $i2Sec_Bytes & " bytes")
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
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
_BASS_Mixer_ChannelSetEnvelope($hStream1, BitOR($BASS_MIXER_ENV_VOL, $BASS_MIXER_ENV_LOOP), $aNodes1)
___Debug(@error, "set volume envelope")
_BASS_Mixer_ChannelSetEnvelope($hStream2, BitOR($BASS_MIXER_ENV_VOL, $BASS_MIXER_ENV_LOOP), $aNodes2)
___Debug(@error, "set volume envelope")
_BASS_ChannelPlay($hMixer, True)
___Debug(@error, "start channel")
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
Func _Exit()
Exit
EndFunc ;==>_Exit
Func _FreeBass()
_BASS_StreamFree($hStream1)
_BASS_StreamFree($hStream2)
_BASS_Free()
EndFunc ;==>_FreeBass
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
vielen dank