Hi Leute,
Ich habe im moment ein kleines Problem mit dem BASS-Kram.
Ich würde gerne 2 getrennte Musik-Channels ineinanderfaden (also sowas wie CrossFade) und das Ergebnis in Echtzeit an den Bass Encoder weiterleiten (der die Daten an einen Shoutcastserver übermittelt).
Die Übertragung zum Shoutcast Server klappt tadellos (bis auf den Fade, wie gesagt)
Ich habe es bisjetzt mit dem Mixer-Modul von BASS probiert, aber bisjetzt kein zufriedenstellendes Ergebnis.
Den aktuellen Sourcecode packe Ich natürlich bei.
Edit: Ich häng ihn auch mal als Spoiler an
Spoiler anzeigen
;~ #NoTrayIcon
#include ".\Includes\Bass.au3"
#include ".\Includes\BassEnc.au3"
#include ".\Includes\BassMix.au3"
#include ".\Includes\Helper.au3"
Global $hStream1, $hStream2, $hEncoder
[/autoit] [autoit][/autoit] [autoit]Global Const $sStreamInfo_Server = "*****"
Global Const $sStreamInfo_PW = "*****"
Global $aMixerMatrix[2][3]
$aMixerMatrix[0][0] = 1
$aMixerMatrix[0][1] = 2
Global Const $sStreamInfo_Content = "Keine Ahnung"
Global Const $sStreamInfo_Name = "Name"
Global Const $sStreamInfo_URL = "URL"
Global Const $sStreamInfo_Genre = "Genre"
Global Const $sStreamInfo_Desc = "Description"
Global Const $sStreamInfo_Headers = ""
Global Const $iStreamInfo_Bitrate = 128
Global Const $fStreamInfo_Pub = False
__Debug("init Bass libarys")
_BASS_Startup(@ScriptDir & "\Resources\Bass.dll")
_BASS_ENCODE_Startup(@ScriptDir & "\Resources\BassEnc.dll")
_BASS_MIX_Startup(@ScriptDir & "\Resources\BassMix.dll")
_BASS_Init(0, -1, 44100, 0, "")
__Debug("create stream(s) with music")
$hStream1 = _BASS_StreamCreateFile(False, @ScriptDir & "\Music1.mp3", 0, 0, $BASS_STREAM_DECODE)
_BASS_ChannelStop($hStream1)
$hStream2 = _BASS_StreamCreateFile(False, @ScriptDir & "\Music2.mp3", 0, 0, $BASS_STREAM_DECODE)
_BASS_ChannelStop($hStream2)
__Debug("create mixer")
$hMixer = _BASS_Mixer_StreamCreate(44100, 2, $BASS_MIXER_NONSTOP)
__Debug("set channel matrix")
;~ _BASS_Mixer_ChannelSetMatrix($hStream1, $aMixerMatrix)
;~ _BASS_Mixer_ChannelSetMatrix($hStream2, $aMixerMatrix)
__Debug("add channels to mixer")
_BASS_Mixer_StreamAddChannel($hMixer, $hStream1, $BASS_MIXER_DOWNMIX)
_BASS_Mixer_StreamAddChannel($hMixer, $hStream2, $BASS_MIXER_DOWNMIX)
__Debug("create encoder")
$hEncoder = _BASS_Encode_Start($hMixer, '"' & @ScriptDir & '\Resources\lame" -r -x -s 44.1 -m j -b 128 -', 0)
_BASS_Encode_SetNotify($hEncoder, "_EncodeNotifyProc", 0)
__Debug("init encoder cast")
$fCastSuccess = _BASS_Encode_CastInit($hEncoder, "stream2cloud.de:8002", "wechseln", $BASS_ENCODE_TYPE_MP3, $sStreamInfo_Name, $sStreamInfo_URL, _
$sStreamInfo_Genre, $sStreamInfo_Desc, $sStreamInfo_Headers, $iStreamInfo_Bitrate, $fStreamInfo_Pub)
__Debug("set encoder title/url")
_BASS_Encode_CastSetTitle($hEncoder, $sStreamInfo_Name, $sStreamInfo_URL)
Sleep(1000)
[/autoit] [autoit][/autoit] [autoit]_BASS_ChannelSetVolume($hStream1, 100)
_BASS_ChannelSetVolume($hStream2, 0)
__Debug("play file(s) on channel(s)")
_BASS_ChannelPlay($hStream1, True)
_BASS_ChannelPlay($hStream2, True)
ProgressOn("StreamerTool", "streaming (" & (@ScriptDir & "\Music.mp3") & ")", "please wait")
$iPercent = 0
$iChannel1Vol = 0
$iChannel2Vol = 0
For $iX = 0 To 200
$iPercent = $iX * 100 / 200
$iChannel1Vol = 100 - $iPercent
$iChannel2Vol = $iPercent
ProgressSet($iPercent, $iPercent & " percent of song finished")
_BASS_ChannelSetVolume($hStream1, $iChannel1Vol)
_BASS_ChannelSetVolume($hStream2, $iChannel2Vol)
ConsoleWrite("Channel1: " & $iChannel1Vol & " | Channel2: " & $iChannel2Vol & @LF)
[/autoit] [autoit][/autoit] [autoit]Sleep(100)
Next
ProgressOff()
__Debug("stop encoder")
_BASS_Encode_Stop($hEncoder)
__Debug("free stream")
_BASS_StreamFree($hStream1)
__Debug("release bass libary")
_BASS_Free()
Func _EncodeNotifyProc($handle, $status, $user)
Switch $status
Case $BASS_ENCODE_NOTIFY_ENCODER
ConsoleWrite(@CRLF & "!The encoder died." & @CRLF)
Case $BASS_ENCODE_NOTIFY_CAST
ConsoleWrite(@CRLF & "!Cast server connection died." & @CRLF)
Case $BASS_ENCODE_NOTIFY_CAST_TIMEOUT
ConsoleWrite(@CRLF & "!Cast server connection died." & @CRLF)
Case Else
ConsoleWrite(@CRLF & "!EncodeNotifyProc" & @CRLF)
EndSwitch
EndFunc ;==>_EncodeNotifyProc
Wäre Nett, wen mir da jemand helfen könnte.
mfg,
Dominik