2011-12-21 61 views
0

這個問題是不是重複的Get data file from microphone in windows phone 7或任何其他引用它。從Windows Phone麥克風獲取wav文件

Windows Phone中,我以下面的方式記錄麥克風數據:

  1. 我開始Dispatcher.Update定時器,模擬XNA遊戲循環。
  2. 我訂閱了Microphone.BufferReady並設置了緩衝區持續時間。然後,我啓動麥克風。

    // Event handler for getting audio data when the buffer is full 
    _microphone.BufferReady += MicrophoneBufferReady; 
    
    // Get audio data in 1/2 second chunks 
    _microphone.BufferDuration = TimeSpan.FromMilliseconds(100); 
    
  3. 然後,每次我得到的音頻數據塊從一個麥克風,我把它記錄到的數據流。

    // Retrieve audio data 
    _microphone.GetData(_buffer); 
    
    _stream.Write(_buffer, 0, _buffer.Length); 
    
  4. 無論何時錄製結束,數據流將作爲文件保存到隔離存儲器。

    var soundFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".wav"; 
    using (var isStore = IsolatedStorageFile.GetUserStoreForApplication()) 
    { 
        using (var isfStream = new IsolatedStorageFileStream(soundFileName, FileMode.Create, isStore)) 
        { 
         isfStream.Write(data.ToArray(), 0, data.ToArray().Length); 
         isfStream.Close(); 
        } 
    } 
    

    dataMemoryStream拿着所有的麥克風緩衝區,記錄過程中收集的。

問題是,實際保存的文件不是wav文件。如果我使用ISETool將其複製到桌面,我無法播放聲音。

如何將麥克風錄製文件保存爲文件,以便將其保存爲.wav格式?

P.S.如果我從IS讀取數據並將其打包到SoundEffect實例中,我可以在設備上播放它。

_soundInstance = new SoundEffect(_data, Microphone.Default.SampleRate, AudioChannels.Mono).CreateInstance(); 
+0

在這裏你可以找到的代碼如何保存原始的PCM數據作爲WAV文件:http://damianblog.com/2011/02/07/storing-wp7-recorded-audio-as-wav-format-streams/ – Roboblob 2012-02-16 21:22:29

回答

0

緩衝區的格式是原始PCM。 將WAV文件頭添加到文件的開頭是需要的。 但該文件是未壓縮的和更好的解決辦法是壓縮設備上的文件(以減小其大小),併發送到Web服務轉換爲壓縮WAV格式