Этот вопрос не Дубликат Получить файл данных с микрофона в 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();