【问题标题】:Getting a wav file from Windows Phone microphone从 Windows Phone 麦克风获取 wav 文件
【发布时间】:2012-01-25 12:47:54
【问题描述】:

此问题不是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,用于保存在录制期间收集的所有麦克风缓冲区。

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

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

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多