2016-10-02 10 views
0

필자는 C#으로 작성된 클라이언트와 작성된 Java로 서버를 작성했습니다. 나는 오디오를 포착하고 소켓으로 서버로 보내고 서버는 웹 소켓으로 브라우저에 보내고 브라우저로 재생하고 싶다. 하지만 브라우저에서 Uncaught (약속 있음)를 시도하면 DOMException이 발생합니다. 지원되는 소스가 없으므로로드하지 못했습니다. 도와 주시겠습니까?naudio로 오디오를 캡쳐하고 자바 스크립트로 재생

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에 랩핑 됨)에 쓰고 MemoryStream 기본 바이트 배열에 액세스하려면 WaveFileWriter을 사용해야합니다. 또한 BytesRecorded을 고려하지 않았습니다.

이 작업을 수행하더라도 각각의 WAV 파일이 수백 밀리 초일 것이므로 매우 고르지 못한 오디오가 나올 것이라고 생각합니다.