потоковые файлы WAV - PullRequest
       18

потоковые файлы WAV

3 голосов
/ 25 сентября 2008

У меня есть сервер, который отправляет данные через сокет, данные представляют собой wav-файл. Я могу легко записать данные на диск и затем воспроизвести их в WMP, но я не представляю, как я могу их воспроизвести, когда я читаю их из сокета. Возможно ли это?

Бонусный вопрос: как бы я это сделал, если бы поток был в mp3 или другом формате?

Это для Windows на родном C ++.

Ответы [ 3 ]

3 голосов
/ 25 сентября 2008

Поскольку вы сказали WMP, я предполагаю, что вопрос относится к попытке воспроизведения файла wav на компьютере с Windows. Если нет, то этот ответ не актуален.

То, что вы хотите сделать, не тривиально. Есть хорошая статья здесь о проекте кода, которая описывает модель звука Windows. Он описывает, как настроить аудиоустройство и как передавать данные на устройство для воспроизведения. Вам просто нужно предоставить данные, поступающие из вашего сокета, в качестве данных для буферов воспроизведения. Но вот где вся сложная работа. Вы должны быть уверены, что

  • У вас достаточно данных, чтобы начать воспроизведение
  • Обработайте случай, когда ваш сокет нуждается в данных, и вам нечего отправить в буфер воспроизведения
  • Вы можете считывать данные с сокета с достаточной скоростью, чтобы буферы воспроизведения были заполнены

Это интересное упражнение. Но хитрый.

1 голос
/ 25 сентября 2008

Марк прав в том, что это сложная проблема. Это может быть менее сложно, если вы используете DirectSound вместо waveOut. Вот статья о потоковой передаче волновых файлов с диска: потоковая передача из сети - это по сути тот же процесс. Прежде чем начать, убедитесь, что вы собрали достаточно данных из сети - вам понадобится больше двух буферов, о которых говорится в статье.

Еще менее хитрым будет FMOD . Из FAQ :

Расширенные функции Интернета

  • Потоковое аудио в Интернете. Включен пользовательский код для потоковой передачи через Интернет, что обеспечивает бесперебойную поддержку потоковой передачи SHOUTcast, Icecast и http.
  • Возможность загрузки. Побочный эффект модульной файловой системы FMOD, которая поддерживает сетевые файлы, даже статические образцы могут быть загружены из Интернета.

Поддержка форматов файлов : FMOD в настоящее время поддерживает широкий спектр форматов аудиофайлов. частичный список :

  • MP3 - (MPEG I / II Layer 3, включая поддержку VBR)
  • OGG - (формат Ogg Vorbis)
  • WAV - (файлы Microsoft Wave, включая сжатые файлы WAV. PCM, MP3 и IMA ADPCM сжатые файлы WAV
0 голосов
/ 25 сентября 2008

Марк прав в том, что это сложная проблема. API waveOutXXXX является древним (он предшествует Windows 95) и требует более подверженного ошибкам кодирования, чем вы думаете. Вам будет проще взаимодействовать с API в C ++, чем с C #. Просто убедитесь, что это то, что вы действительно хотите сделать.

Если ваш поток имеет формат, отличный от данных файла WAV (например, MP3 или WMA), вам придется выполнить дополнительный этап декодирования данных в формат WAV и воспроизведения его с помощью API waveOutXXXX. Найти хороший компонент для декодирования MP3 сложнее, чем вы ожидаете - я думаю, это связано с ситуацией с лицензированием Fraunhofer (вы должны платить им, если вы используете код MP3 любым способом).

Я бы нашел готовый продукт для этого, если только вам не нужен опыт обучения.

...