Получение wav-файла с микрофона Windows Phone

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

    Где data - это MemoryStream, содержащий все микрофонные буферы, которые были собраны во время записи.

Проблема в том, что фактически сохраненный файл не является файлом WAV. Если я скопирую его на рабочий стол с помощью ISETool, я не смогу воспроизвести звук.

Как мне сохранить запись микрофона в файл, чтобы он был сохранен в формате .wav?

P.S. Я могу нормально воспроизвести его на устройстве, если я прочитаю данные из IS и запаковываю их в экземпляр SoundEffect.

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

person Maxim V. Pavlov    schedule 21.12.2011    source источник
comment
здесь вы можете найти код, как сохранить необработанные данные PCM в виде файла WAV: damianblog.com/2011/02/07/   -  person Roboblob    schedule 17.02.2012


Ответы (1)


Формат буфера - необработанный PCM. Все, что требуется - добавить заголовок WAV в начало файла. Однако файл не сжат, и лучшим решением было бы заархивировать файл на устройстве (чтобы уменьшить его размер) и отправить в веб-службу для преобразования в сжатый формат WAV.

person Graham Wright    schedule 22.12.2011