Node.js

Créer le WebSocket

Tout d'abord, il faut s'occuper de la connection afin que vous puissiez signaler que votre serveur webhook est en ligne et prêt à recevoir l'appel audio :

expressWs.getWss().on('connection', function (ws) {
  console.log('Websocket connection is open');
});

Lorsque l'on écrit de l'audio sur une WebSocket de Voice API, l'audio est attendu dans un fichier de type format spécifique. Pour ce faire, vous aurez besoin d'une fonction qui sépare les données audio binaires en tableaux de la bonne taille :

function chunkArray(array, chunkSize) {
    var chunkedArray = [];
    for (var i = 0; i < array.length; i += chunkSize)
        chunkedArray.push(array.slice(i, i + chunkSize));
    return chunkedArray;
}

Ensuite, créez un gestionnaire de route pour le /socket route. Lorsque la WebSocket est connectée, cette route est appelée :

app.ws('/socket', (ws, req) => {
    const wav = new WaveFile(fs.readFileSync("./sound.wav"));
    wav.toSampleRate(16000);
    wav.toBitDepth("16");

    const samples = chunkArray(wav.getSamples()[0], 320);
    for (var index = 0; index < samples.length; ++index) {
        ws.send(Uint16Array.from(samples[index]).buffer);
    }
})

L'itinéraire charge un fichier audio à partir du disque, vous pouvez télécharger le même fichier à partir de GitHubLa première étape consiste à utiliser la bibliothèque WaveFile pour modifier la fréquence d'échantillonnage et la profondeur de bits pour l'API Voice. Ensuite, il récupère les échantillons audio du premier canal audio et utilise la fonction précédente pour modifier la taille du tableau de données audio binaires. Enfin, les données audio binaires sont itérées et envoyées à l'appel via le WebSocket avec la fonction send() fonction.

NOTE : Vonage ne peut mettre en mémoire tampon que 3072 messages ce qui devrait être suffisant pour environ 60 secondes d'audio. Si votre fichier est plus long que cela, vous devez ajouter un délai de 18-19 ms entre chaque message.