У меня есть вопрос о воспроизведении файлов .wav в C ++. Я ищу способ воспроизвести его в Linux и Windows, и я хочу разбить его, пока функция не завершена, знаете ли вы образец для этого?
Спасибо за любой ответ :)!
Я из Германии, пожалуйста, не сердитесь на мою грамматику или орфографию: D.
Есть несколько способов сделать это.
Самый простой, уродливый и самый хакерский способ сделать это — написать прямо на ваше звуковое устройство, расположенное в /dev/snd/
, Однако это действительно зависит от вашего дистрибутива Linux, и некоторые современные больше не позволяют вам делать это. В общем, прямое чтение / запись на /dev/
устройства исчезают. Вот вопрос, отвечающий на это.
В течение очень долгого времени «официальным» способом было использование библиотеки alsa, которая использует интерфейс в стиле C. Обычно это довольно сложно, полно подводных камней и «обходных путей», которые зависят от вашего точного аудиооборудования.
Я думаю, что Альса постепенно заменяется Джек, который, я надеюсь, проще в использовании. У меня нет никакого опыта с этим.
Последний метод, который я знаю, с Portaudio, который, как следует из названия, является несколько переносимым по крайней мере между Windows, Linux и OSX.
Все эти библиотеки позволят вам контролировать ваше аудио оборудование, init / setup / play. Что просто в файлах wav, так это то, что содержимое является необработанным pcm, который обычно является форматом, используемым этими библиотеками. Формат WAV обычно выглядит так:
[wav header]
Если вы можете управлять несколькими миллисекундами мусора в начале воспроизведения, вы также можете «безопасно» отправить заголовок для воспроизведения и избежать его разбора. Вы должны будете понимать форматы PCM и должны принести некоторые дополнительные чтения.
В качестве дополнительной «хитрости», которая не имеет прямого отношения к C ++, я настоятельно рекомендую использовать Audacity. Это небольшая программа, которую я вижу как блокнот / VIM аудио файлов. Он небольшой, быстро загружается, позволяет копировать / вставлять сегменты аудио и определять форматы PCM. (На самом деле, вы просто изменяете настройки PCM, пока звук не «звучит» правильно, но все же полезно
В названии упоминается Linux, но затем вы упомянули Windows и Linux в этом посте.
Для Linux лучше всего использовать gstreamer, если вы настаиваете на C ++. Посмотрите код gstreamer для gst-launch. Он запускается, как показано ниже, на машине с Linux.
$ gst-launch filesrc location = «местоположение файла»! wavparse! alsasink
http://lazyfoo.net/SDL_tutorials/lesson11/
Другой альтернативой (кроссплатформенный, объектно-ориентированный) является SFML. Проверьте пример воспроизведения аудио файла wav по адресу,