ALSA:特定のオーディオデバイスでWAVファイルを再生すると再生速度エラーが発生します。

ALSA:特定のオーディオデバイスでWAVファイルを再生すると再生速度エラーが発生します。

Ubuntu 22.04設定では、ヘッドフォン、HDMIモニター、USBオーディオジャック(オシロスコープに接続されています)オシロスコープで見られるように、USBオーディオジャックで.WAVファイルを再生しようとしています。

フラグなしでaplayを使用すると、デフォルトのオーディオデバイスで.WAVファイルが再生されます。

aplay stereo_1kHz_sine_1sec.wav

Ubuntu設定->サウンド->出力->出力デバイスを開き、出力デバイスを「AB13X USBオーディオ」に変更すると、オシロスコープに1kHzの正弦波が表示されます。同様に、出力デバイスをモニターまたはヘッドフォンに変更すると、そのデバイスから1kHzのトーンが聞こえます。だから、すべてのハードウェアが正しく動作することを知っています。

サウンド設定GUIを操作することなく.WAVファイルを再生するためにaplayコマンドにフラグを追加したいと思います。私の究極の目標は自動化されたオーディオテストを実行することですので、スクリプトで書くことができるCLIコマンドを使用したいと思います。見ているaplay マニュアルページ、ターゲットPCMデバイスを指定する-Dフラグがあるので、それを使い始めました。

aplay -l を実行して、使用可能な PCM デバイスをリストします。

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: HDMI [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA ATI HDMI], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA ATI HDMI], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA ATI HDMI], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA ATI HDMI], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA ATI HDMI], device 11: HDMI 5 [HDMI 5]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Generic_1 [HD-Audio Generic], device 0: ALC897 Analog [ALC897 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 4: Audio [AB13X USB Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

私の設定には統合グラフィックスとGPUの両方が含まれているので、HDMIオプションがそれほど多くは驚くべきことではありません。いくつかの実験で、私のデバイスがどこにあるかを見つけました。ただし、特定のターゲットデバイスでaplayを呼び出すと、モニターとヘッドフォンでの再生ピッチがはるかに高くなります。また、為替レートが正しくないという警告メッセージを受け取りました。

# Right monitor, recorded as freq 2kHz
$ aplay -D hw:0,3 stereo_1kHz_sine_1sec.wav
Playing WAVE 'stereo_1kHz_sine_1sec.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Stereo
Warning: rate is not accurate (requested = 16000Hz, got = 32000Hz)
         please, try the plug plugin

# Left monitor, recorded as freq 2kHz
$ aplay -D hw:0,8 stereo_1kHz_sine_1sec.wav
Playing WAVE 'stereo_1kHz_sine_1sec.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Stereo
Warning: rate is not accurate (requested = 16000Hz, got = 32000Hz)
         please, try the plug plugin

# Headphones, recorded as freq 2.75kHz
$ aplay -D hw:2,0 stereo_1kHz_sine_1sec.wav
Playing WAVE 'stereo_1kHz_sine_1sec.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Stereo
Warning: rate is not accurate (requested = 16000Hz, got = 44100Hz)
         please, try the plug plugin

記録頻度の違いは報告された速度誤差と一致するため、驚くべきことではありません。ただし、aplayをデフォルトのデバイスとして使用すると正しい周波数で.WAVファイルを再生できますが、再生デバイスがコマンドラインで指定されていると、誤った速度/周波数を再生する理由は不明です。

また、モノの.WAVファイルを再生する際に問題があります。基本デバイスで再生できるモノラルwavファイルを入手でき、ステレオバージョンと同じサウンドを提供します。ただし、再生デバイスを指定すると、モノバージョンはまったく再生されません。

$ aplay -D hw:2,0 1kHz_sine_1sec.wav
Playing WAVE '1kHz_sine_1sec.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
aplay: set_params:1358: Channels count non available

$HOME/.asoundrcまたは、同じALSA用の設定ファイルを作成できることを読みました/etc/asound.conf。現在、マイコンピュータには対応するファイルはありません。ネイティブオーディオデバイスに背後にある役割を果たすALSAプロファイルがある場合は見つかりません。可能であれば、追加の設定ファイルを設定したくありません。

現在選択されているデフォルトのオーディオデバイスを変更せずにコマンドラインから特定のオーディオデバイスに.WAVファイルを再生するにはどうすればよいですか?

これを行うには、新しいプロファイルを追加する必要がありますか?

ベストアンサー1

おすすめ記事