Получение wav-файла с микрофона Windows Phone - PullRequest
0 голосов
/ 21 декабря 2011

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

1 Ответ

0 голосов
/ 22 декабря 2011

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

...