Этот вопрос не дублирует Получите файл данных с микрофона в Windows Phone 7 или любой другой, упомянутый в нем.
В Windows Phone я записываю данные с микрофона следующим образом:
- Я запускаю таймер Dispatcher.Update, чтобы имитировать игровой цикл XNA.
Я подписываюсь на 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();