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

标签 javascript c# audio naudio naudio-framework

我有一个使用C#编写的客户端和一个使用java编写的服务器。我捕获音频并通过套接字发送到服务器,而服务器通过Web套接字发送到浏览器,并想与浏览器一起播放。但是,当我尝试浏览器说“未捕获( promise )”时,DOMException:无法加载,因为未找到受支持的源。
你可以帮帮我吗?

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();
        }
    }
};

最佳答案

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

即使您能够正常工作,我也怀疑您会得到非常断断续续的音频,因为每个WAV文件将只有几百毫秒,而且不一定会完美播放。

关于javascript - 使用naudio捕获音频并使用javascript播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39814295/

相关文章:

c# - 如何将 ListBox 项绑定(bind)到用户控件?

c# - CSharpCodeProvider 编译性能

javascript音频在 react 中当前播放时暂停先前播放的音频

google-chrome - 音频无法播放(Chrome和Firefox都存在浏览器错误?)

python - 我可以在 Windows 上监控系统音频并进行分析吗?

javascript - dc.js:dispose() 和 deregisterChart() 的问题

c# - 尝试使用 Google API 将授权代码交换为访问代码时出错

javascript - jquery ajax调用重定向到命名url而不是相同的模板

javascript - 如何在 moment.js 中四舍五入到最接近的上 15 分钟

javascript - 有没有更简洁的方法在顶层定义 React Hooks useState?