Потоковая передача файлов WAV

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
4 825
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

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

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

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

Я сказал: «Это для Windows в родном C++.», Так что я подумал, что достаточно откровенен :-)

gbjbaanb 25.09.2008 16:10

мое понимание прочитанного в эти дни воняет :-) Да, вы правы

Mark 25.09.2008 17:12

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

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

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

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

Еще менее сложным было бы FMOD. Из Часто задаваемые вопросы:

Расширенные возможности Интернета

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

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

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

Другие вопросы по теме