JavaScript Web Audio API zu laut.

Kokujou

Lieutenant
Registriert
Dez. 2017
Beiträge
948
yaho. ich erzeuge folgenden code

Code:
 static getAnalyzerFromAudio(mediaElement) {
        if (!mediaElement) return null;
        var audioContext = new AudioContext();
        var analyzer = audioContext.createAnalyser();
        var source = audioContext.createMediaElementSource(mediaElement);
        source.connect(analyzer).connect(audioContext.destination);
        analyzer.fftSize = 2048;
        return analyzer;
    }

ich wollte nämlich einen cooler visualizer erstellen.
funktioniert auch halbwegs gut nur dass die audio-ausgabe gefühlt 80 mal lauter ist als normal. angeblich soll der analyzer ja genau dasselbe wieder ausgeben. Aber ich kann das nicht bestätigen.
Ich hab einen Lautstärkeregler an das media element angedockt und das funktioniert auch. nur ist da irgendein Multiplikator im Weg

GPT-kun meinte schon das sowohl das MediaElement als auch der AudioContext gleichzeitig das Ding an den Lautsprecher senden...
meine Frage:

1. wie krieg ich das aus, ich hab nämlich schon jede konstellation ausprobiert
2. falls es nicht geht, auf welchen Wert muss ich einen Gain-Knoten (Lautstärke) einstellen, damit es diesebe lautstärke hat wie vorher
 
Kano schrieb:
Ist schwer das genaue Problem nachzuvollziehen. Wäre es möglich ein https://stackblitz.com/ zu basteln, welches das Problem nachstellt?

das wird wohl nichts... ich habs ausprobiert, stackblitz kostet aber jsfiddle hätte ich, allerdings kann man da offenbar die webapi gar nicht benutzen.. außerdem bräuchte man irgendein audio file im web, meine liegen alle nur auf localhost das bringt dir also wenig...
dennoch: das hier ist die minimale Reproduktion, vergleich das einfach mal mit nem normalen audio element dass du ohne abspielst:

Code:
var yourSource = ""

var audio = new Audio(yourSource)
audio.src=yourSource

var audioContext = new(window.AudioContext || window.webkitAudioContext)();
var analyzer = audioContext.createAnalyser();
var source = audioContext.createMediaElementSource(audio);
source.connect(analyzer).connect(audioContext.destination);

analyzer.fftSize = 2048;
audio.play();
___

okay es ist nicht kostenpflichtig, sorry dafür, aber ich habs da nachgebaut und es funktioniert auch nicht. irgendwie gibts da keine AudioContext.destination
 
Zuletzt bearbeitet:
okay... also durch das beispiel glaube ich ich habe eine Idee was falsch gelaufen sein könnte... vielleicht wurde der code mit dem ich den analyzer erzeugt habe mehrfach aufgerufen... wenn ich z.B. im stackblitz mehrmals auf den play button des modified drücke wird es immer lauter, vermutlich weil derselbe ton immer wieder abgespielt wird und sich das überlagert.

ich glaube ich muss einfach aufpassen dass ich hier wirklich einen singleton erzeuge. das könnte das Problem vielleicht lösen. Danke für den Denkanstoß :)
 
Zurück
Oben