У меня есть приложение на C ++, которое использует libespeak и, соответственно, ALSA.
Когда это приложение воспроизводит звук в первый раз, на stderr создается следующий вывод:
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_dmix.c:961:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
У меня есть свое собственное ведение журнала, и я хотел бы либо отключить эти ошибки, либо перенаправить их через собственную структуру ведения журнала для дополнительной обработки и создания отчетов.
Можно перенаправить вывод stderr с помощью freopen. ( Можно ли отключить stderr в C ++?) В моем случае эти ошибки были сгенерированы, когда Pa_Initialize();
был вызван, поэтому я перенаправил stderr в / dev / null, прежде чем он был вызван, и перенаправил его обратно после этого.
freopen("/dev/null","w",stderr);
PaError err= Pa_Initialize();
freopen("/dev/tty","w",stderr);
Вы можете посмотреть на snd_lib_error_set_handler
функция для регистрации произвольного обратного вызова обработки ошибок.
http://www.alsa-project.org/alsa-doc/alsa-lib/group___error.html#ga6ba1f0aa6c6bc5d335ab297d6019cb03