Transmission de données audio en HTML5

Je reçois des données audio PCM du serveur en petits morceaux et les ai stockées dans une matrice. Maintenant, je voudrais jouer ces morceaux audio séquentiellement sans lacunes en utilisant une fonction HTML5. Deux options que je considère comme des solutions «possibles» sont:

  1. Balise audio HTML5 avec URI de données
  2. API audio Web

Pendant que je suis en train d'enquêter sur ces options, me suggérer toute autre option ou vue sur les deux options que je regarde. Bien qu'une solution croisée soit la meilleure, mais je peux me contenter de la seule solution Chrome

Scheduling audio est quelque chose pour lequel l'API Web Audio a été conçue. Si vous avez les blocs audio PCM décodés en tant que tableaux dactylographiés ( AUDIO_CHUNKS ), vous pouvez créer des tampons audio pour chaque morceau et les programmer à l'heure exacte (l'une après l'autre) en utilisant noteOn() . Quelque chose comme:

 var startTime = 0; for (var i = 0, audioChunk; audioChunk = AUDIO_CHUNKS[i]; ++i) { // Create/set audio buffer for each chunk var audioBuffer = audioCtx.createBuffer(NUM_CHANNELS, NUM_SAMPLES, SAMPLE_RATE); audioBuffer.getChannelData(0).set(audioChunk); var source = audioCtx.createBufferSource(); source.buffer = audioBuffer; source.noteOn(startTime); source.connect(audioCtx.destination); startTime += audioBuffer.duration; } 

L'option 1 ne fonctionnera probablement pas parce que l'étiquette audio ne joue pas aux données audio brutes (ce que je suppose, c'est ce que vous entendez par les données audio du PCM, ou est-ce que je ne me trompe pas?). Chaque navigateur a besoin de codecs spécifiques. Pour compléter la balise audio n'est pas fiable du tout pour jouer sans lacunes.

L'option 2 pourrait fonctionner. Le web audio api contient des tampons qui pourraient probablement être remplis avec des données brutes et joués, mais je n'ai jamais essayé de le faire. Le grand inconvénient en ce moment est le cas; une. Chrome uniquement b. L'utilisateur doit configurer chrome en tapant sur: drapeaux et activer l'audio Web qui pourrait être effrayant pour certains.

Une troisième option serait l'API de données audio qui est quelque chose d'un terrain d'entente. Je ne l'ai jamais essayé moi-même, mais à partir de la spécification, il ressemble exactement à ce que vous recherchez. Je ne parle même pas des implémentations, alors vous devriez faire des recherches par vous-même 🙂 https://wiki.mozilla.org/Audio_Data_API#Writing_Audio

Je ne suis pas content de donner ces réponses au dessus de ma tête, et je suis toujours très nouveau pour l'audio HTML5.