Stream Volume verstärken - BassDLL

  • Hey @ all,
    ich möchte einen Stream (mit der Bass.dll) verstärken, also über die normale Lautstärke hinaus. _BASS_ChannelSetVolume oder _BASS_ChannelSetAttribute scheinen mir hier nicht weiter helfen zu können. Wie kann ich das bewerkstelligen?

    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."

    3 Mal editiert, zuletzt von Developer30 (22. April 2011 um 15:27)

  • Der einfachste Weg ist den Gain Parameter eines Effektes zu verwenden; z.B.:

    Spoiler anzeigen
    [autoit]

    #include "Bass.au3"

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

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

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

    GUICreate("Test")
    $cSlider = GUICtrlCreateSlider(10, 10, 240, 30)
    GUICtrlSetLimit(-1, 120)
    GUICtrlSetData(-1, 60)
    GUISetState()

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

    _BASS_Startup()
    _BASS_Init(0, -1, 44100, 0, "")

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

    $hStream = _BASS_StreamCreateFile(False, $sFile, 0, 0, BitOR($BASS_SAMPLE_FLOAT, $BASS_SAMPLE_LOOP))
    $hFX = _BASS_ChannelSetFX($hStream, $BASS_FX_DX8_COMPRESSOR, 1)
    _BASS_FXSetParameters($hFX, "0|0.01|50|0|1|0")

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

    _BASS_ChannelPlay($hStream, True)

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

    $idB = 0
    While _BASS_ChannelIsActive($hStream) And GUIGetMsg() <> -3
    $iTemp = GUICtrlRead($cSlider) - 60
    If $iTemp <> $idB Then
    $idB = $iTemp
    ToolTip($idB & " dB")
    _BASS_FXSetParameters($hFX, $idB & "|0.01|50|0|1|0")
    EndIf
    Sleep(20)
    WEnd
    _Exit()

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

    Func _Exit()
    _BASS_ChannelRemoveFX($hStream, $hFX)
    _BASS_StreamFree($hStream)
    _BASS_Free()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    Rein theoretisch könnte man das auch mit einer Mixingmatrix und einem Mixerchannel lösen (wenn man Werte größer als 1 verwendet), das hab ich aber noch nie probiert...

    Oder mit einer DSP-Funktion, diese muss aber in einer anderen Sprache als .dll erstellt werden... (siehe callback tutorial in der Hilfe ;))

    E

  • ahh ok, langsam lerne ich dazu :D. perfekt. danke :)

    "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."

  • Frage: Im Beispiel von eukalyptus wird der Effekt mit _BASS_ChannelRemoveFX wieder entfernt. Muss man das tun, oder verflüchtigt sich FX nicht automatisch nach _BASS_StreamFree?

    "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."