使用 naudio 捕获音频并使用 javascript 播放

Posted

技术标签:

【中文标题】使用 naudio 捕获音频并使用 javascript 播放【英文标题】:Capture audio with naudio and play with javascript 【发布时间】:2016-10-02 06:00:14 【问题描述】:

我有一个编写 c# 的客户端和一个编​​写 java 的服务器。我捕获音频并使用套接字发送到服务器,服务器使用 Web 套接字发送到浏览器并希望使用浏览器播放。但是当我尝试浏览器时说 Uncaught (in promise) DOMException: Failed to load because no supported source was found。 你能帮帮我吗?

private static void Recordwav()
    
        waveInEvent = new WaveInEvent();
        int devicenum = 0;
        for (int i = 0; i < WaveIn.DeviceCount; i++)
        
            if (WaveIn.GetCapabilities(i).ProductName.Contains("icrophone"))
                devicenum = i;
        

        waveInEvent.DeviceNumber = devicenum;
        waveInEvent.WaveFormat = new WaveFormat(44100, WaveIn.GetCapabilities(devicenum).Channels);
        waveInEvent.DataAvailable += new EventHandler<WaveInEventArgs>(VoiceDataAvailable);

        waveInEvent.StartRecording();
    

private static void VoiceDataAvailable(object sender, WaveInEventArgs e)
    
        JObject jObject = new JObject();
        jObject["voice"] = Convert.ToBase64String(e.Buffer);

        byte[] messageByte = Encoding.ASCII.GetBytes(jObject.ToString().Replace("\r\n", "") + "\n");
        socket.Send(messageByte);
    

$scope.socket.onmessage = function (response) 
 
    var data = JSON.parse(response.data);
    if(data.id == $scope.id) 
        if(data.voice) 
            var voice = data.voice;
            var sound = new Audio("data:audio/wav;base64," + voice);
            sound.play();
        
    
;

【问题讨论】:

你在上次事件中使用的音频类是什么,然后将 base64 传递给它。 . ? 【参考方案1】:

您只是发送原始样本,而不是格式正确的 WAV 文件。您需要使用WaveFileWriter 写入MemoryStream(包装在IgnoreDisposeStream 中)处置WaveFileWriter,然后访问MemoryStream 底层字节数组。你也没有考虑到BytesRecorded

即使你让这个工作正常,我怀疑你会得到非常断断续续的音频,因为每个 WAV 文件都会有几百毫秒,而且它们不一定会一个接一个地完美播放。

【讨论】:

以上是关于使用 naudio 捕获音频并使用 javascript 播放的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ASIO 和 Naudio 将音频捕获保存在 wav 文件中?

如何使用 NAudio 将原始音频从 WasapiCapture 重新采样到 g711 mulaw?

使用 NAudio 录制音频并在麦克风输入静音时写入文件

NAudio:使用 ASIO 录制音频并用吉他输出

带有 NAudio 的音频中继器

无法使用麦克风 c# naudio 捕捉 15k 的音调