xorg1990
New member
Hi, ich brauche für ein Amateurfunk Projekt eine Voice Verlangsamung zum Senden und zum Empfang eine Verschnellerung.
Das createBufferSource() Objekt kann die Playbackrate verändern.
Dazu erstelle ich im onaudioprocess event einen AudioBuffer
Der wird dann in das createBufferSource() Objekt gespeist, die wiederum ist mit der destination verbunden.
Problem:
Irwie hört sich der Ton blechern an, ab und zu mal karkst es, dann ist der Ton wider voll Laut und irgendwann wird es wieder blechern und leiser bis es wider knarkst usw.
Ich kann nicht finden woran das liegt.
Meine Meinung ist ich erzeuge zu schnell/zu oft BufferSource'es. Das knarksen verbinde ich damit das irwo der Ausgabepuffer überläuft und Zurückgesetzt wird eine art flush(). Dann ist der Ton wider voll da.
html5 - How to release buffers in Web Audio Api? - Stack Overflow
Ich habe mir drauf hin 2 Arrays erstellt wo ich die BufferSource'es reinpacke.
Dann, nach einer gewissen Pufferung mit den Abspielen beginne. Ein Array für den ungespielten Puffer und eins für den gespielten. Ist der Puffer komplette gespielt wird onended aufgerufen und der Puffer gelöscht via .disconnect();
Wenn einer weiß wie man das Problem löst wäre cool.
die BufferSource lässt sich leider nicht mit dem ScriptProcessor verbinden
Irwo in diesen drei funktion steckt das korpus delikti.
ich hab das hier mal gehostet:
OfflineAudioRecoder_test
Die Slider und Button sind erst mal egal.
Funktioniert leider nur noch im FF, Chrome unterstüzt nur noch https bei getUserMedia
Das createBufferSource() Objekt kann die Playbackrate verändern.
Dazu erstelle ich im onaudioprocess event einen AudioBuffer
Der wird dann in das createBufferSource() Objekt gespeist, die wiederum ist mit der destination verbunden.
Problem:
Irwie hört sich der Ton blechern an, ab und zu mal karkst es, dann ist der Ton wider voll Laut und irgendwann wird es wieder blechern und leiser bis es wider knarkst usw.
Ich kann nicht finden woran das liegt.
Meine Meinung ist ich erzeuge zu schnell/zu oft BufferSource'es. Das knarksen verbinde ich damit das irwo der Ausgabepuffer überläuft und Zurückgesetzt wird eine art flush(). Dann ist der Ton wider voll da.
html5 - How to release buffers in Web Audio Api? - Stack Overflow
Ich habe mir drauf hin 2 Arrays erstellt wo ich die BufferSource'es reinpacke.
Dann, nach einer gewissen Pufferung mit den Abspielen beginne. Ein Array für den ungespielten Puffer und eins für den gespielten. Ist der Puffer komplette gespielt wird onended aufgerufen und der Puffer gelöscht via .disconnect();
Wenn einer weiß wie man das Problem löst wäre cool.
die BufferSource lässt sich leider nicht mit dem ScriptProcessor verbinden
Code:
var ring = [];
var garbageBuffer = [];
processor.onaudioprocess = function(e) {
var input = e.inputBuffer.getChannelData(0);
var output = e.outputBuffer.getChannelData(0);
var total = 0,
rms = 0,
decibel = 0;
var outputBuffer = offlineCtx.createBuffer(1, input.length, Fs);
var source = offlineCtx.createBufferSource()
for (var i = 0; i < input.length; i++) {
total += Math.abs(input[i]);
if (record === true) {
if (j < audioRecordBuffer.length) {
audioRecordBuffer[j++] = input[i];
} else {
document.getElementById("aufnahme")
.innerHTML = "record beendet buffer voll";
}
} else {
outputBuffer.getChannelData(0)[i] = input[i];
}
output[i] = 0; //mute ScriptProcessor output
}
source.buffer = outputBuffer
ring.push(source);
if (ring.length > 10) { // make sure we put at least 10 chunks in the buffer before starting
playtrougth();
}
rms = Math.sqrt(total / (input.length / 2));
decibel = 20 * (Math.log(rms) / Math.log(10));
document.getElementById("ausgabe").innerHTML = Math.round(decibel * 100) / 100 + " dB";
}
function RxGrabageCollection() {
if (garbageBuffer.length > 0) {
var buf = garbageBuffer.shift();
buf.disconnect();
}
}
function playtrougth() {
var audio = ring.shift();
audio.playbackRate.value = outRate;
audio.connect(offlineCtx.destination);
garbageBuffer.push(audio);
audio.onended = RxGrabageCollection;
if (nextTime == 0) {
nextTime = offlineCtx.currentTime + 0.10; /// add 100ms latency to work well across systems - tune this if you like
}
audio.start(nextTime);
nextTime += audio.buffer.duration;
console.log(garbageBuffer.length)
}
ich hab das hier mal gehostet:
OfflineAudioRecoder_test
Die Slider und Button sind erst mal egal.
Funktioniert leider nur noch im FF, Chrome unterstüzt nur noch https bei getUserMedia
Zuletzt bearbeitet von einem Moderator: