此问题不是Get data file from microphone in windows phone 7或其中任何其他引用的副本。
在Windows Phone中,我以下列方式录制麦克风数据:
我订阅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);
然后,每当我从麦克风中获取一大块音频数据时,我都会将其录制到数据流中。
// Retrieve audio data
_microphone.GetData(_buffer);
_stream.Write(_buffer, 0, _buffer.Length);
每当录制结束时,数据流将作为文件保存到隔离存储。
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();
}
}
其中data
是MemoryStream
,其中包含录制过程中收集的所有麦克风缓冲区。
问题是,实际保存的文件不是wav文件。如果我使用ISETool将其复制到桌面,我就无法播放声音。
如何将麦克风录音保存到文件中,以便以.wav格式保存?
P.S。如果我从IS读取数据并将其打包到SoundEffect实例中,我可以在设备上播放它。
_soundInstance = new SoundEffect(_data, Microphone.Default.SampleRate, AudioChannels.Mono).CreateInstance();
答案 0 :(得分:0)
缓冲区的格式是原始PCM。 将WAV标头添加到文件的开头是必需的。 然而,该文件是未压缩的,更好的解决方案是在设备上压缩文件(以减小其大小)并发送到Web服务以转换为压缩的WAV格式