Wert von GetVolume bei BASS-UDF?

  • Ich verstehe dein problem jetzt echt nicht.

    Der Master-volumelevel greift doch für das ganze System, den musst du doch nicht extra auf dein Programm übertragen
    _BASS_ChannelSetVolume() setzt die Lautstärke von nur einem Channel, das kombiniert sich mit der Mastervolume-Einstellung.
    Warum soll der User also einen Hörsturz bekommen?

    Beim ersten start einfach 50% verwenden und dann immer den letzten Wert aus der Ini verwenden.

  • Er möchte halt einfach, dass die Lautstärke immer die ist, die gerade der Nutzer verwendet.
    Gibt einige Szenarien die sich jeder ausdenken kann, bei denen es bei oben beschriebener Anwendung zu Unannehmlichkeiten kommen kann. zB Nutzer hat ganz laut Musik gehört > Fährt PC runter > Lautstärke ist gespeichert > Fährt PC nächsten Tag hoch > Will leise Musik hören > stellt Windowsregler auf niedrig > Öffnet Player > Player legt mit voller Lautstärke los..

  • Spoiler anzeigen
    [autoit]

    Global $iOld = -99

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

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

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

    $getvolume = _BASS_GetVolume()*100
    $Slider = GUICtrlCreateSlider(5, 55, 90, 21)
    GUICtrlSetData($Slider, $getvolume)

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

    While Sleep(75)
    $iVolume = GUICtrlRead($Slider)
    If $iOld <> $iVolume Then
    _BASS_SetVolume($iVolume / 100)
    $iOld = $iVolume
    WEnd

    [/autoit]

    So hatte ich das gelöst :)

    MfG hellboy

    [autoit]

    Do
    _help($user)
    Until $questions = 0

    [/autoit]

    Meine Werke:
    Ste`s Web-Radio

  • Zitat

    hellboy3: Mit "mal 100" bekommt man nicht den richtigen Prozentwert (siehe Werte in Post #3).

    Jo das mag sein aber die oben genannte Lösung funzt bei mir einwandfrei egal ob XP,Vista oder 7?
    Egal hoffe du bekommst das hin :rolleyes:

    MfG hellboy

    [autoit]

    Do
    _help($user)
    Until $questions = 0

    [/autoit]

    Meine Werke:
    Ste`s Web-Radio

  • Er möchte halt einfach, dass die Lautstärke immer die ist, die gerade der Nutzer verwendet.
    Gibt einige Szenarien die sich jeder ausdenken kann, bei denen es bei oben beschriebener Anwendung zu Unannehmlichkeiten kommen kann. zB Nutzer hat ganz laut Musik gehört > Fährt PC runter > Lautstärke ist gespeichert > Fährt PC nächsten Tag hoch > Will leise Musik hören > stellt Windowsregler auf niedrig > Öffnet Player > Player legt mit voller Lautstärke los..


    Ich verstehe gerade echt das Problem nicht.
    Lass das Master-Volume doch in Ruhe, das soll der User wo anders einstellen. Ich kenne jedenfalls keinen Player, der das ändert.
    Die player-interne Lautstärke kann man davon doch völlig abkoppeln. Der VLC z.B. hat auch seine eigene Lautstärkeregelung.
    Und genau so etwas kannst du mit _BASS_ChannelSetVolume() erreichen.

    --> Der Mastervolume bleibt auf dem Wert, den der Benutzer gerade verwendet
    --> Die Player-Lautstärke ist auf dem gleichen Level wie beim letzten Abspielvorgang
    Dann wird halt nicht der ab Vista verfügbare Programmlautstärkeregler verwendet, sondern ein eigener.

    • Offizieller Beitrag

    Danke, für die Informationen!
    Wobei mein Englisch nicht gerade berauschend ist (hab nicht alles verstanden, fürchte ich). Nur soviel, dass das eine logarithmische Kurve ist statt linear. Ok, das hatte ich mir schon gedacht (bei den Werten), aber wie man von den Werten jetzt auf einem Prozentwert kommt, weiß ich immer noch nicht. :huh:

    Im Starplayer habe ich jetzt (erstmal) einen Lautstärkeregler auf Basis von SoundSetWaveVolume eingebaut. _BASS_ChannelSetVolume() benutze ich bereits für das crossfading. Mit niedrigeren Werten dort hätte man nicht so viel Spieraum beim überblenden.

  • Naja so weit ich das aus dem Text gelesen hab, muss dieses nicht-lineare Verhältnis nicht immer exisitieren. In diesem (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\Audio\VolumeControl - VolumeTable) Registrykey steht die Volumetable. Das sind die Werte, die diese logarithmische Kurve beschreiben. Wenn allerdings der Wert dieses (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\Audio\VolumeControl - EnableVolumeTable) Eintrags auf '0' steht, so wird diese Tabelle nicht anerkannt und es wird eine lineare Funktion verwendet.

    So hab ich das zumindest verstanden. Das würde erklären wieso es bei einigen (zB Hellboy) funktioniert wenn man einfach mit 100 multipliziert und bei einigen nicht (siehe Oscar).
    Demnach müsstest du beim Start deines Starplayers erstmal über den Registryschlüssel herausfinden, ob den diese Tabelle verwendet wird oder nicht. Falls sie verwendet wird, müsstest dem Slider genausoviele Einträge geben wie in der Volumetable stehen. Falls der User nun den Lautstärkeregler betätigt, musste du den Wert auslesen, das ergibt dann zB 5 und den 5. Wert in der Registry nachschlagen oder in einem Array falls du das einglesen hast oder was auch immer und anschließend den ausglesenen Wert als Lautstärke setzen.

    Oder du nimmst die Variante von progany und wählst einen unabhängigen Laustärkeregler, was nicht sehr unüblich ist bei den meisten einigermaßen berühmten Mediaplayern.

  • wenn man praktisch eine kurve die logarithmisch ist zurückbekommt könne man den wert mit einem faktor multiplizieren und den kehrwehrt des wertes abziehen dann bekommt man was lineares raus oder?

    f(regler) = ( f(rückgabewert) * 1.2 ) - ( 1 / f(rückgabewert) )

    ich hab das jetzt nicht getestet aber das ist mir halt jetzt so eingefallen

  • Leider konnte ich dem Artikel auch nicht entnehmen wie sich der Verlauf der Kurve zusammensetzt.
    Logarithmisch ok, nur dazu gibt es doch unendlich viele Variationen.

    Der "unabhängigen Laustärkeregler" bewegt sich aber nur im Bereich des Masterreglers oder?
    Zumindest ist auch die Winampsteuerung abhängig davon was am Master eingestellt ist.

    Master -> 50%
    Winamp -> 0% entspricht 0% | 100% entspricht 50%

  • is zwar uralt, aber ich hatte das gleiche problem wie oscar und hab es irgendwie nicht hinbekommen die lautstärkenkurve auf linear umzustellen.
    daher hab ich folgende funktionen / workaround gebastelt ...

    Spoiler anzeigen