2016-10-02 102 views
0

我有編寫的C#客戶端,並與編寫的Java服務器。我捕捉音頻和套接字發送到服務器和服務器發送與網絡套接字到瀏覽器,並希望與瀏覽器玩。但是,當我嘗試瀏覽器說未捕獲(承諾)DOMException:無法加載,因爲沒有找到支持的來源。 你能幫我嗎?捕捉音頻與n音訊和播放使用javascript

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

你只是發送原始樣本,而不是格式正確的WAV文件。你需要使用WaveFileWriter寫入到MemoryStream(包裹在一個IgnoreDisposeStream)處置WaveFileWriter,然後訪問MemoryStream底層字節數組。你也沒有考慮到BytesRecorded

即使你得到這個工作,我懷疑你會得到非常波濤洶涌的聲音,因爲每個WAV文件將是幾百毫秒,而他們不一定會完美播放一前一後。