I am trying to receive audio stream from microphone from browser and send it to MS Cognitive Speech Services.
I use JavaScript like below in order to get audio stream buffer.
navigator.mediaDevices.getUserMedia({ audio: true })
.then((mic) => {
var mediaStream = audioContext.createMediaStreamSource(mic);
var recorder = null;
if (audioContext.createScriptProcessor) {
recorder = audioContext.createScriptProcessor(44100, 512, 1);
} else {
recorder = audioContext.createJavaScriptNode(44100, 512, 1);
}
recorder.onaudioprocess = function (e) {
_dotNetAudio.sendAudioBuffer(e.inputBuffer.getChannelData(0));
}
mediaStream.connect(recorder);
recorder.connect(audioContext.destination);
sendSuccessMessage(mic.id);
})
.catch((e) => {
sendErrorMessage(e.message);
});
The method _dotNetAudio.sendAudioBuffer invokes C# method to service stream data.
[JSInvokable]
public Task OnAudioBufferReceived(object audioBuffer)
{
if(audioBuffer == null) return Task.CompletedTask;
if (audioBuffer is JsonElement)
{
double[] doubleArray = ((JsonElement)audioBuffer).EnumerateObject().Select(x => x.Value.GetDouble()).ToArray();
**byte[] bytesArray = doubleArray;**
AudioBufferReceived?.Invoke(this, bytesArray);
}
return Task.CompletedTask;
}
But I have no idea how to convert received microphone data from JavaScript (Fload32Array type / double[]) to byte[]. It is required for provide data for PushAudioInputStream (Microsoft.CognitiveServices.Speech.Audio).
Do you have any ideas?
question from:
https://stackoverflow.com/questions/65945994/convert-audiobuffer-from-javascript-fload32array-to-c-sharp-bytearray 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…