从Windows Phone麦克风获取wav文件

时间:2011-12-21 18:11:38

标签: .net windows-phone-7 format wav microphone

此问题Get data file from microphone in windows phone 7或其中任何其他引用的副本。

在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,其中包含录制过程中收集的所有麦克风缓冲区。

  5. 问题是,实际保存的文件不是wav文件。如果我使用ISETool将其复制到桌面,我就无法播放声音。

    如何将麦克风录音保存到文件中,以便以.wav格式保存?

    P.S。如果我从IS读取数据并将其打包到SoundEffect实例中,我可以在设备上播放它。

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

1 个答案:

答案 0 :(得分:0)

缓冲区的格式是原始PCM。 将WAV标头添加到文件的开头是必需的。 然而,该文件是未压缩的,更好的解决方案是在设备上压缩文件(以减小其大小)并发送到Web服务以转换为压缩的WAV格式