寒い朝

コンピュータ系のことを書きます

Linuxでハイレゾ対応USB-DACを使う

自分の環境

  • OS: ArchLinux
  • USB-DAC: TEAC UD-H01

Ubuntuとかでも多分同じだと思います。

ハイレゾにしない場合

USB Audio Class対応のUSB-DACは、ただ接続するだけで使えるようになります。OS付属のサウンドコントロールのツールやpavucontrol(PulseAudio音量設定)でデバイスを有効にすれば、どんなプレーヤーでも使えるはずです。ただし、排他的にデバイスを利用できないし、サンプリング周波数も44.1kHzとかになってしまう。

ハイレゾで聞きたい場合

Linuxのサウンドシステム

Linuxのサウンド周りのデータの流れは、

PulseAudio -> ALSA -> サウンドデバイス

となっているようです。以下の図がわかりやすいです。

https://wiki.ubuntulinux.jp/UbuntuStudioTips/Setup/UbuntuSoundSystem?action=AttachFile&do=get&target=soundStructure-PulseAudio.png https://wiki.ubuntulinux.jp/UbuntuStudioTips/Setup/UbuntuSoundSystem

つまり、音声ファイルそのままの周波数で再生するためにはALSAに直接データを送るべき、ということです、たぶん(Windowsで言えばWASAPI排他モードに当たるのでしょうか)。

設定

まず、PulseAudioがUSB-DACを利用しないようにします。pavucontrol(PulseAudio音量設定)をインストールし、設定タブから使いたいデバイスをオフにします。これはCUIでできるかもしれません。 f:id:microwaver17:20150917135936p:plain

次に、自分のUSB-DACがどう認識さているか確認します。card2, stream0 は違う数字かもしれません。

% cat /proc/asound/card2/stream0 
TEAC TEAC USB AUDIO DEVICE at usb-0000:00:13.2-2, high speed : USB Audio

Playback:
  Status: Stop
  Interface 3
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 3 OUT (ASYNC)
    Rates: 32000, 44100, 48000, 88200, 96000, 176400, 192000
    Data packet interval: 125 us
  Interface 3
    Altset 2
    Format: S24_3LE
    Channels: 2
    Endpoint: 3 OUT (ASYNC)
    Rates: 32000, 44100, 48000, 88200, 96000, 176400, 192000
    Data packet interval: 125 us

次にプレーヤーの設定です。ALSAで直接再生できるプレーヤーをいくつか探してみたところAudaciousが良さそうでした。PCMデバイスをUSB-DACに設定します。いくつか同デバイスの項目が出てきたので、デジタルで送ってくれそうなS/PDIFに設定しました。ビット震度は先程のFormatの一番高い値にしたいのですが、S24_3LEとあるのに24ビットにできませんでした。"_3"が付いているのはは3ビット単位で転送するフォーマットのようで、Audaciousではその設定ができないようです、たぶん。 f:id:microwaver17:20150917140030p:plain

以上です。