SDK Javascript
Vue d'ensemble
Le skd en javascript est un client léger pour interagir avec l'api de Speaqr en temps réel. Il facilite l'accès du programmeur aux méthodes de l'api en lui fournissant certaines fonctionnalités prêtes à l'emploi. Il est compatible avec les environnements de navigateur et de Node.jsLe paquet est publié sur npm.Pour utiliser le SDK tu as besoin d'une clé API valide. Pour l'obtenir, contactez-nous via le formulaire de contact.Installation
Via npm
npm install @speaqr/javascript-sdk
Via cdn
<script src="https://unpkg.com/@speaqr/javascript-sdk@latest/dist/sdk.min.js"></script>
Télécharger les fichiers
sdk.jssdk.min.js
Instancier la classe
Le SDK de Speaqr peut être instancié et utilisé dans divers environnements, tels que les navigateurs, Node.js et les modules importés depuis un CDN. Ci-dessous, les différentes manières de l'initialiser en fonction de l'environnement sont expliquées.Dans le paquet npm, tu as des exemples avec des langues spécifiques dans le dossier :dist/examples/howInstantiateSdk
Navigateurs (avec CDN)
Le SDK est disponible via un CDN pour être utilisé directement dans le navigateur, sans besoin d'installation préalable.
<html>
<script src="https://unpkg.com/@speaqr/javascript-sdk@latest/dist/sdk.min.js"></script>
<script src="https://my_code.js"></script>
</html>
// my_code.js
const sdk = new SpeaqrSDK({
apiKey: "YOUR_API_KEY",
showLogs: true
});
Node.js
Dans un environnement Node.js, tu peux installer le SDK via npm et l'importer avec require ou import selon ton configuration.
// Using CommonJS (require)
const SpeaqrSDK = require("@speaqr/javascript-sdk");
const sdk = new SpeaqrSDK({
apiKey: "YOUR_API_KEY",
showLogs: true
});
TypeScript
Si tu travaillez dans un environnement TypeScript, le SDK inclut des définitions de type(index.d.ts)
qui facilitent l'utilisation du SDK avec un typage fort.
import { SpeaqrSDK } from "@speaqr/javascript-sdk";
const sdk = new SpeaqrSDK({
apiKey: "YOUR_API_KEY",
showLogs: true
});
Environnements Modules ES (ESM)
Si tu travaillez dans un environnement qui prend en charge les modules ES, comme les navigateurs modernes ou un environnement de développement prenant en charge ESM, tu peux utiliserimport.
import SpeaqrSDK from "https://unpkg.com/@speaqr/javascript-sdk@latest/dist/sdk.min.js";
const sdk = new SpeaqrSDK({
apiKey: "YOUR_API_KEY",
showLogs: true
});
RequireJS
Le SDK est compatible avec des systèmes de chargement comme RequireJS.
<html>
<script data-main="app" src="https://requirejs.org/docs/release/2.3.6/minified/require.js"></script>
<script src="https://my_code.js"></script>
</html>
// my_code.js
require(["https://unpkg.com/@speaqr/javascript-sdk@latest/dist/sdk.min.js"],
function(SpeaqrSDK) {
const sdk = new SpeaqrSDK({
apiKey: "YOUR_API_KEY",
showLogs: true
});
Bâtisseurs et destructeurs
La classeSpeaqrSDK
inclut deux façons d'instanciation : un constructeur synchrone et une méthode statique asynchrone create
. De plus, elle fournit la méthode destroy()
pour libérer les ressources lorsque l'instance du SDK n'est plus nécessaire.Constructeur synchrone
Ce constructeur crée une instance du SDK de manière immédiate. Il nécessite que la clé API soit fournie, mais ne réalise pas de validations au moment de l'initialisation.Paramètres
Exemple
const sdk = new SpeaqrSDK({
apiKey: "YOUR_API_KEY",
showLogs: true
});
Constructeur asynchrone
Cette méthode statique renvoie une promesse qui se résout avec une instance du SDK, en validant la clé API avant de terminer l'initialisation.Paramètres
Exemple
try {
const sdk = await SpeaqrSDK.create({
apiKey: "YOUR_API_KEY",
showLogs: true
});
console.log("SDK initialized:", sdk);
} catch (error) {
console.error("Error initializing SDK:", error);
}
Méthode destroy()
(libération des ressources)
Le SDK fournit la méthode destroy() pour libérer des ressources lorsque l'instance n'est plus nécessaire. La méthode est asynchrone et retourne une promesse. Cette méthode :- Ferme les connexions de sockets actives.
- Supprime les écouteurs d'événements enregistrés.
- Libérez les références internes pour éviter les fuites de mémoire.
- Annule toutes les méthodes du SDK pour prévenir les utilisations indésirables après la destruction.
Exemple
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
// SDK use
sdk.languages()
.then((languages) => console.log("Supported languages:", languages))
.catch((error) => console.error(error));
//When the SDK is no longer needed
await sdk.destroy();
Si tu essayez d'appeler une méthode après avoir détruit l'instance, une erreur sera lancée :
sdk.languages(); // Error: Method "languages" cannot be called after the SDK instance has been destroyed.
Propriétés
La classe SpeaqrSDK contient plusieurs propriétés accessibles qui permettent de configurer et d'obtenir des informations sur l'état du SDK.apiKey
Stocke la clé API utilisée pour authentifier les requêtes à l'API de Speaqr.Accès
get apiKey(): string;
set apiKey(apiKey: string);
Exemple
// Get the current API key
console.log("Current API key:", sdk.apiKey);
// Set a new API key
sdk.apiKey = "NEW_API_KEY";
logs
Indique si les journaux du SDK sont activés dans la console.Accès
get logs(): boolean;
set logs(show: boolean);
Exemple
// Enable logs
sdk.logs = true;
// Check if logs are enabled
console.log("Logs enabled:", sdk.logs);
socketOpened
Indique si la connexion des sockets est ouverte.Accès
get socketOpened(): boolean;
Exemple
// Check if the socket connection is open
if (sdk.socketOpened) {
console.log("Socket is currently open.");
} else {
console.log("Socket is closed.");
}
Méthodes
Le SDK fournit plusieurs méthodes pour interagir avec l'API de Speaqr en batch. Ci-dessous, leurs utilisations et configurations sont détaillées.languajes
Obtenez la liste des langues prises en charge par le SDK pour la transcription, la traduction et la synthèse vocale.Syntaxe
languages(): Promise<{
id: string;
name: string;
}[]>;
Exemple
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
// Fetch the list of supported languages
sdk.languages()
.then((languages) => {
console.log("Supported languages:", languages);
})
.catch((error) => {
console.error("Error fetching languages:", error);
});
Réponse
Cette méthode renvoie une promesse qui se résout avec un tableau d'objets, où chaque objet représente une langue prise en charge. L'identifiant de la langue sera retourné en ISO3, et le nom de la langue en anglais.
voices
Obtenez la liste des voix disponibles pour la synthèse vocale (TTS) dans une langue. Il est possible de filtrer le résultat par genre de voix, mode de réponse et/ou moteur de voix.Par ce moyen, on peut savoir si une configuration de langue, de genre, de mode de réponse et de moteur peut être réalisée, car il n'existe pas de voix pour toutes les combinaisons.Syntaxe
voices(
language: string,
mode?: 'block' | 'streaming',
voiceGender?: 'F' | 'M',
voiceEngine?: Array<'standard' | 'neural' | 'generative'>
): Promise<{
uuid: string;
language: string;
gender: VoiceGender;
engines: Array<'standard' | 'neural' | 'generative'>;
modes: Array<'block' | 'streaming'>;
}[]>;
Paramètres
Exemple
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
// Fetch the list of available voices for English (UK) with a block mode
sdk.voices('en-gb', 'block')
.then( (response) => {
divResponse.innerText = JSON.stringify(response, null, 4);
})
.catch( (err) => {
alert('An error occurred while requesting available voices.');
});
Réponse
file
Traitez un Blob contenant une onde audio et effectuez l'opération spécifiée dansmode
. Le résultat dépendra du mode sélectionné et sera retourné dans une promesse.Syntaxe
file(params: {
mode?: 'sts' | 'stt' | 'stt+translation';
languageIdSource?: string;
languageIdTarget?: string;
voiceGender?: 'F' | 'M';
file: Blob;
}): Promise<{
transcription: string
languageIdSource: string
translation?: string
languageIdTarget?: string
file?: {
type: string
data: ArrayBuffer
}
}>;
Paramètres
Exemple
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
// Process an audio file with speech-to-text and translation
sdk.file({
mode: "stt+translation",
file: audioBlob,
languageIdTarget: "en-us"
})
.then((result) => {
console.log("Processing result:", result);
})
.catch((error) => {
console.error("Error processing file:", error);
});
Réponse
Le résultat de file
dépendra du mode
utilisé. Une réponse avec mode=sts
inclurait tous les champs. Le champ file.data
est un ArrayBuffer
au format mp3.
Erreurs
Communication avec les sockets
Le SDK de Speaqr permet la communication en temps réel via des sockets. Ces méthodes permettent d'envoyer et de recevoir des données audio et texte sans avoir besoin d'attendre une réponse bloquante, améliorant ainsi la latence et optimisant l'interaction avec l'api.Flux d'utilisation
L'utilisation des sockets dans le SDK suit le flux suivant :- Initialiser la configuration de la session avec
socketsInstance
. - Configurer l'écoute des réponses avec
socketsAddListener
. - Ouvrir la connexion avec
socketsOpen
. - Envoyer des données via
socketSendText
ousocketsSendStream
. - Fermer la connexion lorsqu'elle n'est plus nécessaire avec
socketsClose
.
Gestion de Socket.IO
Le SDK de Speaqr utilise Socket.IO pour la communication en temps réel. Pour garantir la compatibilité dans tous les environnements, au cas oùsocket.io-client
ne serait pas présent, il gère automatiquement son chargement de la manière suivante :Détection de l'environnement
Avant d'initialiser une connexion de sockets (en appelantsocketsInstance
), le SDK vérifie l'environnement dans lequel il s'exécute :- Si tu es sur un navigateur, essayez de charger
socket.io-client
depuis un CDN. - Si tu es sur Node.js, essayez d'importer
socket.io-client
depuis les modules installés (require("socket.io-client")
). - Si tu ne pouvez pas charger
socket.io-client
, lancez une erreur indiquant qu'il doit être installé manuellement.
#loadSocketIO() {
return new Promise((resolve, reject) => {
//We check if we are in a browser
if (
typeof document !== 'undefined' &&
typeof document.nodeType !== 'undefined' &&
typeof window !== 'undefined' &&
window.document === document &&
document.nodeType === 9
){
//Browser
this.#loadSocketIOBrowser()
.then( resolve )
.catch( reject );
}else{
//We check if we are in Node
if (
typeof process !== 'undefined' &&
typeof process.versions !== 'undefined' &&
typeof process.versions.node !== 'undefined'
){
this.#loadSocketIONode()
.then( resolve )
.catch( reject );
}else{
reject('Socket IO cannot be loaded dynamically. You must instantiate it in your project.');
}
}
});
}
Chargement dynamique dans les navigateurs
Si le SDK détecte que tu es dans un navigateur et queio
n'est pas défini, il charge socket.io-client
à partir du CDN Socket.IO. Si socket.io-client
est déjà disponible dans le navigateur, le SDK ne le recharge pas. La fonction du SDK qui se charge du chargement est la suivante :
// static #SOCKETIO_SRC = 'https://cdn.socket.io/4.8.1/socket.io.min.js';
// static #SOCKETIO_INTEGRITY = 'sha384-mkQ3/7FUtcGyoppY6bz/PORYoGqOl7/aSUMn2ymDOJcapfS6PHqxhRTMh1RR0Q6+';
#loadSocketIOBrowser() {
return new Promise((resolve, reject) => {
if (typeof io!='undefined'){ //If it is already present we do not load it
resolve();
return;
}
const script = document.createElement('script');
script.src = SpeaqrSDK.#SOCKETIO_SRC;
script.integrity = SpeaqrSDK.#SOCKETIO_INTEGRITY;
script.crossOrigin = 'anonymous';
// When the script is loaded successfully
script.onload = () => resolve();
// En caso de error durante la carga
script.onerror = () => reject(new Error(`Failed to load script ${script.src}`));
// We add the script to the document
document.head.appendChild(script);
});
}
Chargement dynamique en Node.js
Si le SDK détecte que tu es dans un environnement Node.js et queglobalThis.io
n'est pas défini, il tente d'importer socket.io-client
directement. S'il ne peut pas l'importer, il lancera une erreur indiquant qu'il doit être installé manuellement. La fonction qui gère l'importation est la suivante :
#loadSocketIONode() {
return new Promise((resolve, reject) => {
if (typeof globalThis.io !== 'undefined') {
resolve();
return;
}
try {
const { io } = require('socket.io-client');
globalThis.io = io;
resolve();
} catch (error) {
reject(new Error(`Failed to load socket.io-client on Node. Please install with "npm install socket.io-client". Error: ${error}`));
}
});
}
Pour éviter les problèmes
Si tu travaillez avec Node.js, installez manuellementsocket.io-client
. Ainsi, tu éviterez que le SDK échoue s'il essaie de l'importer et ne le trouve pas.
npm install socket.io-client
Si tu travaillez dans un navigateur avec des restrictions réseau (pare-feux, CSP), assurez-tu que ton environnement permet de charger des scripts depuis https://cdn.socket.io/
. Sinon, installez socket.io-client
manuellement dans ton projet et chargez-le avant d'initialiser le SDK.socketsInstance
Configurez une instance de sockets pour la communication en temps réel avec l'API. Cette méthode doit être appelée avant d'ouvrir la connexion avecsocketsOpen()
. Elle retourne une promesse qui se résout lorsque Socket.io
a été instancié.Selon la fonctionnalité souhaitée, l'espace de noms approprié sera choisi : stt, translator, tts ou sts.Syntaxe
socketsInstance(
namespace: 'stt' | 'translator' | 'tts' | 'sts',
params: 'STTSocketParams' | 'TranslatorSocketParams' | 'TTSSocketParams' | 'STSSocketParams'
): Promise<void>;
STT
Paramètres
Exemple
Configurer une session de socket en temps réel pour transcrire l'audio.
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
sdk.socketsInstance("stt", {
languageIdSource: "en-us",
sendAudio: {
broadcastVia: "chunk"
}
});
TRANSLATOR
Paramètres
Exemple
Configurer une session de socket en temps réel pour la traduction.
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
sdk.socketsInstance("translator", {
languageIdSource: "en-us",
languageIdTarget: "es-es",
});
TTS
Paramètres
Exemple
Configurer une session de socket en temps réel pour synthétiser de l'audio à partir d'un texte.
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
sdk.socketsInstance("tts", {
languageIdTarget: "en-us",
receiveAudio: {
obtainVia: "chunk"
}
});
STS
Paramètres
Exemple
Configurer une session de socket en temps réel speech-to-speech
.
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
sdk.socketsInstance("sts", {
languageIdSource: "en-us",
languageIdTarget: "en-us",
sendAudio: {
broadcastVia: "chunk"
},
receiveAudio: {
obtainVia: "chunk"
}
});
socketsOpen
Ouvre la connexion de sockets préalablement configurée avecsocketsInstance()
. Si socketsInstance
n'a pas été appelé, une erreur sera obtenue. Cette méthode renvoie une promesse qui se résout avec un booléen, ou avec l'URL pour recevoir l'audio en streaming si receiveAudio.obtainVia = url
.Syntaxe
socketsOpen(): Promise<boolean | string>;
Exemple
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
sdk.socketsInstance("sts", {
languageIdSource: "en-us",
languageIdTarget: "en-us",
sendAudio: {
broadcastVia: "chunk"
},
receiveAudio: {
obtainVia: "chunk"
}
})
.then( () => {
//We establish the connection with the sockets
sdk.socketsOpen()
.then( (response) => {
//Open sockets
console.log(response);
})
.catch( (err) => {
console.error('An error occurred while connecting to the sockets.', err);
});
})
.catch( (err) => {
console.error('An error occurred while instantiating to the sockets.', err);
});
socketsClose
Renvoie une promesse qui se résout lorsque la connexion de sockets établie avecsocketsOpen
est fermée. Si socketsInstance
n'a pas été appelé, une erreur sera obtenue. Si socketsOpen
n'a pas été appelé, cette méthode n'effectue aucune action et résoudra néanmoins la promesse.Syntaxe
socketsClose(): Promise<void>;
Exemple
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
sdk.socketsInstance("sts", {
languageIdSource: "en-us",
languageIdTarget: "en-us",
sendAudio: {
broadcastVia: "chunk"
},
receiveAudio: {
obtainVia: "chunk"
}
})
.then( () => {
//We establish the connection with the sockets
sdk.socketsOpen()
.then( (response) => {
//Open sockets
console.log(response);
// We close the sockets
sdk.socketsClose()
.then( () => {
console.log('sockets are closed');
})
.catch( (err) => {
console.error('There was an error closing the sockets.', err);
});
})
.catch( (err) => {
console.error('An error occurred while connecting to the sockets.', err);
});
})
.catch( (err) => {
console.error('An error occurred while instantiating to the sockets.', err);
});
socketsAddListener
Abonnez un écouteur à un événement spécifique de la connexion des sockets. Cela permet de recevoir des données en temps réel. SisocketsInstance
n'a pas été appelé, une erreur se produira.Syntaxe
socketsAddListener(
eventType: 'connected' | 'start' | 'error' | 'result',
listener: (data: any) => void
): void;
Paramètres
Exemple
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
sdk.socketsInstance("sts", {
languageIdSource: "en-us",
languageIdTarget: "en-us",
sendAudio: {
broadcastVia: "chunk"
},
receiveAudio: {
obtainVia: "chunk"
}
})
.then( () => {
// We subscribe to events
sdk.socketsAddListener('result', (data) => {
console.log(data);
});
sdk.socketsAddListener('error', (error) => {
console.error(error);
});
//We establish the connection with the sockets
sdk.socketsOpen()
.then( (response) => {
//Open sockets
console.log(response);
// We close the sockets
sdk.socketsClose()
.then( () => {
console.log('sockets are closed');
})
.catch( (err) => {
console.error('There was an error closing the sockets.', err);
});
})
.catch( (err) => {
console.error('An error occurred while connecting to the sockets.', err);
});
})
.catch( (err) => {
console.error('An error occurred while instantiating to the sockets.', err);
});
Réponse
Selon l'événement, la réponse obtenue sera différente. Ils sont détaillés ci-dessous pour chacun d'eux.connected
Cet événement ne renvoie pas l'objet avec lequel les sockets ont été instanciés.
start
Renvoie un booléen ou l'URL pour recevoir l'audio en streaming sireceiveAudio.obtainVia = url
.result
Les champs de l'objet reçu dépendront de l'espace de noms avec lequel les sockets ont été instanciés. Voici un objet poursts
qui contient tous les champs possibles.
error
Cet événement reçoit un objet avec différentes descriptions d'erreurs qui pourraient survenir, soit en raison de défaillances dans la programmation de l'instanciation des modes d'utilisation, soit dans les données qui sont tentées d'être traitées. Les erreurs d'exécution possibles sont listées.Erreurs
disconnect
Recevez une chaîne avec le motif de la déconnexion. Par exemple :"io client disconnect" ou "transport close"
socketsRemoveListener
Supprimez un écouteur d'un événement et d'une fonction spécifiques auxquels tu tu étiez précédemment abonné avecsocketAddListener
. Si tu n'aviez pas fait le socketAddListener
à ce type d'événement et/ou à cette fonction, une erreur se produira. Si socketsInstance
n'a pas été appelé, une erreur se produira.Syntaxe
socketsRemomveListener(
eventType: 'connected' | 'start' | 'error' | 'result' | 'disconnect',
listener: (data: any) => void
): void;
Paramètres
Exemple
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
sdk.socketsInstance("sts", {
languageIdSource: "en-us",
languageIdTarget: "en-us",
sendAudio: {
broadcastVia: "chunk"
},
receiveAudio: {
obtainVia: "chunk"
}
})
.then( () => {
// We subscribe to events
sdk.socketsAddListener('result', evt_result);
sdk.socketsAddListener('start', (status) => {
console.log(status);
// Once the connection is established, I unsubscribe from "result"
sdk.socketsRemoveListener('result', evt_result);
});
//We establish the connection with the sockets
sdk.socketsOpen()
.then( (response) => {
//Open sockets
console.log(response);
// We close the sockets
sdk.socketsClose()
.then( () => {
console.log('sockets are closed');
})
.catch( (err) => {
console.error('There was an error closing the sockets.', err);
});
})
.catch( (err) => {
console.error('An error occurred while connecting to the sockets.', err);
});
})
.catch( (err) => {
console.error('An error occurred while instantiating to the sockets.', err);
});
// Function for the "result" event
function evt_result(data){
console.log(data);
}
socketsSendText
Envoyez un texte pour qu'il soit traité et renvoyez une promesse, qui se résout avec l'état de l'envoi reçu des sockets. Si les sockets ne sont pas ouverts, une erreur se produira. En cas d'erreur, elle sera rejetée en informant de l'erreur.Syntaxe
socketsSendText(text: string): Promise<boolean>;
Paramètres
Exemple
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
sdk.socketsInstance('translator', {
languageIdSource:'en-gb',
languageIdTarget:'fr-fr',
})
.then( () => {
// We subscribe to events. Here we will receive the translation
sdk.socketsAddListener('result', (data) => {
console.log(data);
});
// We establish the connection with the sockets
sdk.socketsOpen()
.then( (response) => {
//Open sockets
console.log(response);
//I send the text to process
sdk.socketsSendText('Hello, world. How are you today?')
.then( response => console.log('Send status', response))
.catch( respose => console.error('Send status', response));
})
.catch( (err) => {
console.error('An error occurred while connecting to the sockets.', err);
});
})
.catch( (err) => {
console.error('An error occurred while instantiating to the sockets.', err);
});
socketsSendStream
Envoyez un extrait audio pour le traiter et renvoyez une promesse, qui se résout avec l'état de l'envoi reçu des sockets. Si les sockets ne sont pas ouverts, une erreur se produira. En cas d'erreur, elle sera rejetée en informant de l'erreur.Syntaxe
socketsSendStream(data: ArrayBuffer | Blob): Promise<boolean>;
Paramètres
Exemple
const apiKey='xxxxx'; //Your valid apiKey
sdk = await SpeaqrSDK.create({apiKey, showLogs:true});
sdk.socketsInstance("sts", {
languageIdSource: "en-us",
languageIdTarget: "en-us",
sendAudio: {broadcastVia: "chunk"},
receiveAudio: {obtainVia: "chunk", codec: 'mp3', sampleRate: 16000}
})
.then( () => {
//We subscribe to events. Here we will receive the translation
sdk.socketsAddListener('result', result => console.log(result));
sdk.socketsAddListener('start', (status) => {
console.log(status);
// Once the connection is established, I unsubscribe from "result"
sdk.socketsRemoveListener('result', evt_result);
});
//We establish the connection with the sockets
sdk.socketsOpen()
.then(async (response) => {
//Open sockets
console.log(response);
await start();
console.log('Speak now!!!!');
})
.catch( (err) => {
console.error('An error occurred while connecting to the sockets.', err);
});
})
.catch( (err) => {
console.error('An error occurred while instantiating to the sockets.', err);
});
// Start capturing and processing microphone audio
const start = async () => {
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.ondataavailable = ondataavailable;
mediaRecorder.start(500);
})
.catch(error => {
console.error("Error starting recording:", error);
});
}
// Here you receive each audio fragment in a Blob
const ondataavailable = (event) => {
if (!sdk.socketOpened) return;
if (event.data && event.data.size > 0) {
const audioChunk = event.data;
sdk.socketsSendStream(audioChunk);
}
};
Ce site web utilise des cookies
Les cookies de ce site web sont utilisées pour personnaliser le contenu et analyser le trafic.
Tu pouvez trouver les détails de celles-ci dans la section Politique de confidentialité