2013-06-04 4 views
8

Ich erhalte eine verschachtelte 16 Bit PCM Samples über die Leitung. Jede Probe ist signiertPCM Web Audio API Javascript - Ich bekomme verzerrte Sounds

Ich lese es als Int16bit-Array, können wir ALL_DATA nennen. So ist jeder der Array-Einträge ein 16-Bit-Sample.

Da es interleaved ist extrahiere ich es in 2 Kanäle R-L-R-L Ich am Ende mit 2 (16 Bit) Arrays die halbe Größe von ALL_DATA-Array.

Danach gehe ich über jedes Beispiel und normalisieren es auf Float32Array, weil das ist, was Web Audio API verwendet.

var normalisierteSamples = (Beispiel> 0)? Probe/32768: Probe/-32768;

Ist dies der richtige Weg?

Ich bekomme verzerrte Sounds. Sie können sehen, was vor sich geht. Wenn man also klassische Gitarre hört, klingt es wie elektrisch mit Verzerrung.

Für Argumente willen Ich stelle den Beispielcode nach unten, aber Dieser Code behandelt

Monoton das Beispiel einfacher zu machen, so dass wir es nicht so gut

var startTime = 0; 
    var fileReader = new FileReader(); 
    fileReader.onload = function (e) { 
         var data = new DataView(e.target.result); 

        var audio = new Int16Array(data.byteLength/Int16Array.BYTES_PER_ELEMENT); 
        var len = audio.length; 
        for (var jj = 0; jj < len; ++jj) { 
         audio[jj] = data.getInt16(jj * Int16Array.BYTES_PER_ELEMENT, true); 
        } 

        var right = new Float32Array(audio.length); 

        var channleCounter = 0; 
        for (var i = 0; i < audio.length;) { 
         var normalizedRight = (audio[i] > 0) ? audio[i]/32768 : audio[i]/-32768; 

         i = i + 1; 
         right[channleCounter] = normalizedRight; 

         channleCounter++; 
        } 






        var source = audioContext.createBufferSource(); 


        var audioBuffer = audioContext.createBuffer(1, right.length, 44100); 
        audioBuffer.getChannelData(0).set(right); 


        source.buffer = audioBuffer; 


        source.connect(audioContext.destination); 

        source.noteOn(startTime); 
        startTime += audioBuffer.duration; 

       }; 

Irgendwelche Vorschläge verschachteln müssen das könnte dazu führen, dass der verzerrte Sound hilft. Ich habe die PCM-Daten geschrieben, bevor ich es auf der Serverseite an eine Datei sende, ist gut und Sound ist perfekt.

+0

Ihr Beitrag ENDLICH ich Audio Arbeits ... Dank eine Tonne für die Buchung Ihre Bemühungen, machte es mein Audio in der Nähe von kristallklar jetzt :) – ole

+0

hier erwähnt, dass Sie Mono-Ton verwendet haben, erhalten gemacht, es zu machen einfach. Ich versuche es mit Stereo-Sound. Weißt du, wie man es macht? –

Antwort

17

Statt zu sagen

var normalizedSample= (sample > 0) ? sample/32768 : sample/-32768; 

versuchen

var normalizedSample= sample/32768; 

Ihre Berechnung, wie sie derzeit geschrieben, die negativen Teile Ihrer Wellenform umgekehrt, in einer Art und Weise ähnlich wie bei einem Vollweggleichrichter (Ihre Proben sind immer positive Zahlen).

enter image description here

+0

Lange Rede kurzer Sinn, ich bin ein Idiot. :) Ich weiß nicht, warum ich das gemacht habe. Vielen Dank. Manchmal kommen die einfachsten Dinge zurück und verfolgen mich. Wenn ich könnte, würde ich dieser Antwort für die Grafik einen Extrapunkt geben. –

Verwandte Themen