javascript - 将 AudioBuffer 从 JavaScript (Fload32Array) 转换为 C# (ByteArray)
问题描述
我正在尝试从浏览器接收来自麦克风的音频流并将其发送到 MS 认知语音服务。
我使用下面的 JavaScript 来获取音频流缓冲区。
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);
});
_dotNetAudio.sendAudioBuffer 方法调用 C# 方法来服务流数据。
[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;
}
但我不知道如何将接收到的麦克风数据从 JavaScript(Fload32Array 类型/双 [])转换为字节 []。为 PushAudioInputStream (Microsoft.CognitiveServices.Speech.Audio) 提供数据是必需的。
你有什么想法?
解决方案
推荐阅读
- makefile - 更改makefile文件中的所有目标位置
- javascript - Javascript变量范围问题?
- javascript - 带有条件的 RxJs 鼠标移动事件
- mule - HTTPS API 在 Anypoint Studio 中正常工作,但在运行时独立引擎中不正常 - 返回 503 服务不可用
- python - 如何使用 Pandas 读取最后一个字段中存在分隔符的 CSV 文件?
- javascript - 如何理解这个 JavaScript 代码输出?
- objective-c - 使用 Objective C 的 POST 请求中的问题
- javascript - 如何重定向到rails中另一个页面的选项卡?
- javascript - 如何在不使用 chart.getSelection 方法的情况下获取谷歌面积图的 X 轴值
- rabbitmq - 消息未显示在队列中(RabbitMQ)