2013-06-21 4 views
5

Ich arbeite an einem kleinen Projekt, das (mit openpgp.js) entschlüsselt und dekodiert eine serverseitige Audiodatei mit der Web-Audio-API. Die entschlüsselte Datei kommt als Rohaudio beim Client an. Momentan kann ich Audiodateien unter Verwendung von source.start(0) wiedergeben, aber es scheint keine einfache Möglichkeit zu sein, die Audiodaten an eine GUI zu senden, die es Benutzern erlauben würde, Dinge wie die Lautstärke einzustellen und über das Audio zu suchen.Verwendung von <audio> Element für die Wiedergabe von Roh-Audio

Ich habe ein AudioContext Objekt, das mit createBufferSource

function playSound(decodedAudio) { 
    var source = context.createBufferSource(); 
    source.buffer = decodedAudio; 
    source.connect(context.destination); 
    source.start(0); 
} 

dekodiert und gepuffert ist, weil es ausgewertete Audio Ich kann nicht einfach Verwendung so etwas wie audio.src = ... mit einem Audio-Elemente empfangen wird. Oder vielleicht übersehe ich etwas Offensichtliches?
Gibt es eine Möglichkeit, dieses dekodierte Audio innerhalb der Web Audio API mit einem Ziel <audio> Element zu spielen?

Die ideale Strömung etwas aussehen würde ...
1) Benutzer klickt auf die Wiedergabe eines Audio-Clip
2) Der Ton wird Serverseite entschlüsselt und
an den Client als Ausgangsaudio geschickt zu engagieren 3) Das Audio ist dekodiert und abspielbar, suchbar ... etc.

Mögliche Lösungen, die ich Gedanken über
lieben würde - Da die Audio-Dateien überall von 1 Minute bis 60 Minuten reichen können, schreiben die Audio-Datei, die den Filesystem-API verwenden und dann für die tatsächlichen ein <audio> Element verwenden Wiedergabe
- Schreiben Sie mein eigenes Kontrollsystem für Pause, Scrubbing und Lautstärke auf der Web Audio API

Antwort

2

Nette Frage! Die einfachste Lösung wäre das Speichern des dekodierten Inhalts in einem Blob.

Damit können Sie das src Attribut festlegen.

var blob = new Blob(decodedData, {type: "correct-mimetype/here"}); 
var url = URL.createObjectURL(blob); 
audio.src = url; 
+0

Wäre es effizienter, einen Blob für jedes Paket oder den gesamten Clip zu erstellen? – bobbybee

+0

Das hängt von dem Ziel ab, oder wie die Daten vom Client gesendet werden (welches Protokoll? HTTP? WS? WebRTC? Das ändert sich je nachdem, was OP wirklich will und wenn Teildaten helfen. –

+1

Vielleicht WebSockets (das ist alles theoretisch, Ich denke nur über eine VoIP-Tipp-Sache, aber ich habe das Gefühl, Blobs haben große Overhead ...) – bobbybee

Verwandte Themen