我有一个带有编写c#的客户端和一个带有java编写的服务器。我捕获音频并使用套接字发送到服务器,服务器使用Web套接字发送到浏览器并想要使用浏览器。但是,当我尝试浏览器说Uncaught(承诺)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();
}
}
};
答案 0 :(得分:0)
您只是发送原始样本,而不是格式正确的WAV文件。您需要使用WaveFileWriter
写入MemoryStream
(包含在IgnoreDisposeStream
中)配置WaveFileWriter
,然后访问MemoryStream
基础字节数组。另外,您没有考虑BytesRecorded
。
即使你让这个工作,我怀疑你会得到非常不稳定的音频,因为每个WAV文件将是几百毫秒,并且它们不一定会一个接一个地完美播放。