Здрасте!
Задача: нужно огранизовать запись аудио-информации в устройство звука ( /dev/dsp ) сразу с нескольких источников.
Звуковая система: OSS
Звуковая система ( OSS ) предоставляет мне 10 звуковых устройств ( это для моей карты ).
Это значит что я могу слушать сразу с 10-ти источников ( audacious, gajim, mplayer ... )
Но мне требуется написать кусок кода ( для мультиплатформенной игры ) в которой я смогу воспроизвести несколько источников звука
( фон, шаги, стрельбы, голоса и т.д ) через ОДИН источник ( engine ) + через единый файловый дескриптор.
Аналог - SDL.
Я посмотрел что все игры замученые на нем, без проблем справляются с этой задачей, хотя сам по себе OSS это как бы не поддерживает на прямую.
Просмотр исходного текста не принес результатов. Я ничего там особенного не нашел...
Кто нить подскажет куда рыть?
Для ясности приведу несколько примеров:
// Этой коммандой мы воспроизводим wav-файл.
// Конечно звук будет не тот ( ибо нужно выставить правильно канали, дисретизацию и т.д ), но для теста годится отлично
cat step.wav > /dev/dsp
А теперь поспробуем запустить несколько копий с консоли:
cat wind.wav > /dev/dsp & cat voice.wav > /dev/dsp & cat shortgun.wav > /dev/dsp
Все прекрасно работает, НО: у нас задействовао уже 3 звуковых вывода ( можно проверить напр. ossxmix )
Осталось всего-то 7....
Еще несколько бомбочек и выстрелов - и у нас закончится звук... )
Вот собственно и проблема. мне нужно как SDL все звуки вывести через одинин звуковой вывод ( и единый файловый дескриптор. )
mkfifo test
cat test > /dev/dsp
cat wind.wav > test
cat voice.wav > test
cat shortgun.wav > test
Если попытаться это сделать, звук начнет конкретно плужить, вплоть до остановки всей звуковой системы.
Это все с консоли для примера.
Пишу конечно на C++.
И так. Что есть. Есть OpenAL - но это мне не подходит.
Есть SDL - это мне не нужно, так как я сам пишу свой код ( библиотеку ).
осталось - куда мне рыть?
Я приблезительно догадываюсь что наверное надо все источники загрузить в буфер,
потом смешать ( как-то.. ) и скормить /dev/dsp.
Не уверен...
Возможно кто-то знает как это сделать в ALSA ( ведь они похожи ) че-ли..
// елементраный пример воспроизведения звука ( одного файла )
dspDev = open ( "/dev/dsp", O_WRONLY );
input_fd = open ( "voice.wav", O_RDONLY );
int actlen = 0;
const int buf_size = 4096;
char buf [ buf_size ];
while ( ( actlen = read ( input_fd, buf, buf_size ) ) ) {
write ( dspDev, buf, actlen );
// fwrite(buf,1,actlen,stdout); // для перенаправления по >
}
Ответ на:
комментарий
от xintrea
Ответ на:
комментарий
от INFOMAN
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Проблема со звуком (2007)
- Форум Несколько звуковых карт одновременно (2014)
- Форум Вывод видео, несколько источников (2006)
- Форум Одновременное воспроизведение звука (2007)
- Форум Одновременное воспроизведение на несколько карт в ALSA (2013)
- Форум Выводить звук одновременно от нескольких пользователей (2020)
- Форум Одновременное использование одной звуковой карты несколькими приложениеями (2005)
- Форум А бывают армоодноплатники с несколькими звуковыми выводами? (2014)
- Форум Несколько DNS одновременно (2010)
- Форум Несколько VCS одновременно (2009)