42

マイクからの入力を録音するために PyAudio を使用しています。

オーディオは問題なく録音されているので、エラー メッセージを単純に非表示にする必要がありますか? または、それらを解決する方法はありますか?

ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
Cannot connect to server socket err = No such file or directory
Cannot connect to server socket
jack server is not running or cannot be started
4

8 に答える 8

39

たとえば、ALSA 構成のクリーンアップを試みることができます。

ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side

によって引き起こされ/usr/share/alsa/alsa.confます:

pcm.rear cards.pcm.rear
pcm.center_lfe cards.pcm.center_lfe
pcm.side cards.pcm.side

これらの行をコメントアウトすると、これらのエラー メッセージは表示されなくなります。~/.asoundrcおよびも確認することをお勧めし/etc/asound.confます。

そうは言っても、これらのメッセージの一部は、構成に問題があることを示していますが、実際の問題は発生していません。をクリーンアップすることはお勧めしません。alsa.conf元は ALSA のものであるため、alsa-lib を更新すると上書きされる可能性があります。

Python でメッセージを抑制する方法があります。サンプル コードは次のとおりです。

#!/usr/bin/env python
from ctypes import *
import pyaudio

# From alsa-lib Git 3fd4ab9be0db7c7430ebd258f2717a976381715d
# $ grep -rn snd_lib_error_handler_t
# include/error.h:59:typedef void (*snd_lib_error_handler_t)(const char *file, int line, const char *function, int err, const char *fmt, ...) /* __attribute__ ((format (printf, 5, 6))) */;
# Define our error handler type
ERROR_HANDLER_FUNC = CFUNCTYPE(None, c_char_p, c_int, c_char_p, c_int, c_char_p)
def py_error_handler(filename, line, function, err, fmt):
  print 'messages are yummy'
c_error_handler = ERROR_HANDLER_FUNC(py_error_handler)

asound = cdll.LoadLibrary('libasound.so')
# Set error handler
asound.snd_lib_error_set_handler(c_error_handler)
# Initialize PyAudio
p = pyaudio.PyAudio()
p.terminate()

print '-'*40
# Reset to default error handler
asound.snd_lib_error_set_handler(None)
# Re-initialize
p = pyaudio.PyAudio()
p.terminate()

私のコンピューターからの出力:

messages are yummy
messages are yummy
messages are yummy
messages are yummy
messages are yummy
messages are yummy
----------------------------------------
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave

これらのメッセージは、PyAudio や PortAudio ではなく、alsa-lib によって出力されます。コードは alsa-libsnd_lib_error_set_handler関数を直接使用してエラー ハンドラを設定しpy_error_handlerます。これを使用してメッセージを削除できます。

他の Python ALSA バインディングである pyalsa と PyAlsaAudio を確認しましたが、これらはエラー ハンドラの設定をサポートしていません。ただし、PortAudio には問題があり、以前はすべての ALSA エラー メッセージが抑制されていたようです。

于 2012-11-19T11:50:15.207 に答える
4

システムでの実行方法を把握するため、これらは通常のデバッグ メッセージのように見えます。抑圧してはいけない理由が見当たりません。

おそらく、サーバー、Bluetooth デバイス、サラウンド サウンドなどの検出を何らかの方法でオフにすることができjackますが、それは必須ではなく、失敗する可能性があります。機能しているものを台無しにしないでください!

于 2011-08-17T06:25:36.073 に答える
3

sounddeviceモジュールはこれらのメッセージを抑制します。 https://github.com/spatialaudio/python-sounddevice/issues/11 を参照してください

于 2016-03-20T16:30:25.603 に答える
0

私は同じ問題に直面していました。

コマンドの最後に追加するだけ2>/dev/nullで問題が解決しました。エラーメッセージを抑制したかっただけで、うまくいきました。

例えば: python marvin.py 2>/dev/null

于 2021-12-12T17:32:44.350 に答える