snd-usb-audio ドライバーは、外部 dac のハードウェア ボリューム コントロールをサポートします。問題は、あなたのDACがそれをサポートしているかどうかです。私は Micromega MYDAC を USB 2.0 に設定し、背面に小さなスイッチを付けて使用しています。プラグインした後、 dmesg は次のようになります。
$ dmesg
[ 489.232193] usb 2-2: new high-speed USB device number 4 using ehci-pci
[ 489.365330] usb 2-2: New USB device found, idVendor=26f2, idProduct=0200
[ 489.365340] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 489.365348] usb 2-2: Product: MICROMEGA MYDAC
[ 489.365355] usb 2-2: Manufacturer: MICROMEGA
[ 489.365361] usb 2-2: SerialNumber: 0000
[ 489.855449] usbcore: registered new interface driver snd-usb-audio
amixer を使用すると、ボリューム コントロール インターフェイスが表示されます。
$ amixer -c MYDAC scontents
Simple mixer control 'MICROMEGA Clock Selector',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 127
Mono:
Front Left: Playback 127 [100%] [0.00dB] [off]
Front Right: Playback 127 [100%] [0.00dB] [off]
Simple mixer control 'MICROMEGA Clock Selector',1
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 127
Mono: Playback 121 [95%] [-6.00dB] [off]
私の mpd.conf の audio_output セクションには以下が含まれます。
audio_output {
type "alsa"
name "MICROMEGA MYDAC"
device "hw:MYDAC"
mixer_type "hardware"
mixer_device "hw:MYDAC"
mixer_control "MICROMEGA Clock Selector"
replay_gain_handler "mixer"
auto_resample "no"
auto_channels "no"
auto_format "no"
}
mpc コマンドまたはその他の mpd クライアントを使用して、ボリュームを任意のパーセンテージに設定できるようになりました。
$ mpc volume 100
Oscar Peterson - On A Clear Day You Can See Forever
[playing] #169/213 0:30/4:25 (11%)
volume:100% repeat: on random: on single: off consume: off
$ mpc volume 90
Oscar Peterson - On A Clear Day You Can See Forever
[playing] #169/213 0:33/4:25 (12%)
volume: 90% repeat: on random: on single: off consume: off
しかし、ここから悪いニュースが始まります。amixer とのインターフェースを見ると、ボリュームを 90% に設定したときに外部 DAC が実際に何をしたかがわかります。音量の制限は 0..127 であるため、音量を 127 の 90%、つまり 114 に設定しました。114 は 127-13 であるため、単純に音量を 13 dB 下げました。
$ amixer -c MYDAC scontents
Simple mixer control 'MICROMEGA Clock Selector',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 127
Mono:
Front Left: Playback 114 [90%] [-13.00dB] [on]
Front Right: Playback 114 [90%] [-13.00dB] [on]
したがって、127 から 1 段階下げるごとに、音量が 1 dB 減少します。これは、ボリュームの 90% がどうあるべきかということではありません。dB スケールは次のように機能します。
0 dB = 100%
-0.9 dB = 90%
-1.9 dB = 80%
-6 dB = 50%
-20 dB = 10%
したがって、DAC は音量を 13 dB ではなく 0.9 dB 下げる必要があります。
これは、replaygain を使用して音量を自動的に制御したい場合には、さらに悲惨なことになります。mpd は、上で示した dB スケールを使用します。すべての CD を flac にリッピングし、replaygain タグを追加しました。これらは、外部 DAC を使用しない他の 2 つのシステム (Samsung タブレットの Android の Poweramp と openPandora デバイスの Deadbeaf) で正常に動作します。すべてのボリュームがきれいに均等に出ます。
たとえば、MYDAC で mpd を使用すると、次のようなことが起こります。mpd は、トラック再生ゲインが -4.3 dB の曲を再生します。20log 0.60 = -4.3 dB であるため、mpd はインターフェイスに 60% になるように指示します。ただし、インターフェースはボリュームの 60% には達しません。代わりに、パラメータ 0..127 を 60% の値 (0.60 x 127=76) に設定します。パラメータの最大値 127 は 0 dB に対応し、76 は 127-51 であるため、DAC は意図した -4.3 dB ではなく、単に -51 dB に減少します。その結果、音楽がまったく聞こえなくなりました。
$ metaflac --list 01.Dancers_in_Love.flac
....
METADATA block #2
type: 4 (VORBIS_COMMENT)
comments: 11
comment[0]: ARTIST=Duke Ellington
comment[1]: ALBUM=The Small Groups
comment[2]: TITLE=Dancers in Love
comment[3]: GENRE=Big Band
comment[4]: TRACKNUMBER=01
comment[5]: CDDB=7d10d619
comment[6]: REPLAYGAIN_REFERENCE_LOUDNESS=89.0 dB
comment[7]: REPLAYGAIN_TRACK_GAIN=-4.34 dB
comment[8]: REPLAYGAIN_TRACK_PEAK=0.81216431
comment[9]: REPLAYGAIN_ALBUM_GAIN=-3.61 dB
comment[10]: REPLAYGAIN_ALBUM_PEAK=0.81216431
$ mpc
Duke Ellington - Dancers in Love
[playing] #90/213 0:04/1:55 (3%)
volume: 60% repeat: on random: on single: off consume: off
$ amixer -c MYDAC scontents
Simple mixer control 'MICROMEGA Clock Selector',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 127
Mono:
Front Left: Playback 76 [60%] [-51.00dB] [on]
Front Right: Playback 76 [60%] [-51.00dB] [on]
この外部 DAC によるボリュームのパーセンテージとボリュームの dB の解釈はまったく役に立たないようです。残念ながら、「amixer scontents」コマンドの同様の出力を提供する別の外部 DAC があります。つまり、1dB ステップ全体で減少し、パーセンテージ ボリューム コントロール コマンドを単純に DAC のボリューム パラメータのパーセンテージにマップします。ここでは誰が悪いとは言えません。私はDACメーカーを主張します。最終的な結果として、外部 DAC でのボリューム コントロールは事実上不可能になります。
dB スケールに従ってハードウェア ボリューム コントロールを正しく行う外部 DAC のレポートは見つかりませんでした。したがって、ソフトウェア ミキサーのボリューム コントロールが唯一のオプションだと思います。しかし、私は修正されたいと思っています。