Linux Hi-Res Audio USB-DACなどの設定

ハイレゾ対応にするための定義ファイルの編集

起稿2015/11/02 更新2020/08/14

サンプルレート、ビット深度は2行書き換えるだけ Pulse Audio でのお話

以下の記述にかかわらず、当方の最近設定(2020年8月14日)は、次の通りです。48k/24bit程度を超えても仕方ないという話ですかね。それに音源に可聴域を超える音が含まれていたとしても、それが何を意味するのか。よろしければ最近の境地は次の記事を参考にしてみてください。僕の耳に棲まう妖精。可聴音の限界についての実験と論考

default-sample-format = s32le
default-sample-rate = 48000

ターミナル(端末)を開きます。CTRL+ALT+T

sudo gedit /etc/pulse/daemon.conf
;; default-sample-format = s16le
;; default-sample-rate = 44100
default-sample-format = s32le
default-sample-rate = 192000

2行書き換えて、
pulseaudio -k ; pactl list short sinks
としてください。リブートでもいいです。これで基本的に完了です。最近のデバイスであれば、192k/24bitぐらいはデフォルトなのでほとんどこの通りでだいじょうぶかと思います。マルチブートであればWindowsの設定で実際に音が鳴るかどうかを試験して設定できますので、その上限に合わせるとよいです。かなり古いサウンドチップなどの場合は、48K(DVDのサンプリングレート)が上限だったりします。
もちろん環境に応じて書き換えてください。

以下は何か困ったら参考にしてみてください。

試しに、以下の3つのコマンドを順次実行して結果をみるといいかもしれません。(追記:かもしれませんではなく、確実に設定するにはやはり必要です)

pactl list short sink-inputs
34    7    21    protocol-native.c    s32le 2ch 192000Hz

pactl list short sinks

0    alsa_output.pci-0000_00_01.1.hdmi-stereo    module-alsa-card.c    s16le 2ch 48000Hz    SUSPENDED
2    bluez_sink._SONY_    module-bluetooth-device.c    s16le 2ch 48000Hz    SUSPENDED
7    alsa_output.pci-0000_00_14.2.iec958-stereo    module-alsa-card.c    s32le 2ch 96000Hz    RUNNING


pacmd list-sinks | grep sample
    sample spec: s16le 2ch 48000Hz
    sample spec: s16le 2ch 48000Hz
    sample spec: s32le 2ch 96000Hz

※このS/PDIF接続先のアンプがスペックで96k上限。

(おまけ)BluetoothとS/PDIFケーブルを抜いて、USB-DACに接続した場合の出力例。
pactl list short sinks       
0    alsa_output.pci-0000_00_01.1.hdmi-stereo    module-alsa-card.c    s16le 2ch 48000Hz    RUNNING
8    alsa_output.pci-0000_00_14.2.analog-stereo    module-alsa-card.c    s32le 2ch 96000Hz    SUSPENDED
9    alsa_output.usb-Burr-Brown_Japan_Burr-Brown_Japan_PCM2702-00-PCM2702.analog-stereo    module-alsa-card.c    s16le 2ch 48000Hz    SUSPENDED


9は、2002年の製品です。
 

謎というか、調べないとわからないことが多いですね。音を正しく出すというのはLinuxでも手間いらずで5分で終わるのですが、どうなっているのか?確認したり、マウス操作したくないので自動的にsinkをシェルで切り替える設定にするにはどうしたらいいの?とか思うとタコユーザーには時間かかります。

音源ソースフォーマット別の結果

それぞれのフォーマットをAudacity ,deadbeef 再生中に実行,確認。
(PulseAudio出力)
» pactl list short sink-inputs

233    1    288    protocol-native.c    s16le 2ch 44100Hz        1)
439    6    902    protocol-native.c    float32le 2ch 44100Hz   1-2)
235    1    292    protocol-native.c    float32le 2ch 96000Hz   2)
236    1    294    protocol-native.c    float32le 2ch 192000Hz 3) 
1) CDと同じ。44.1k/16bit

1-2) 320k MP3(audacity)
2) 96k/24bit
3) 192k/24bit

384k/24bitフォーマットも作っって再生してみた場合、3)と同じです。

おまけ
pactl list short sink-inputs
2    5    21    protocol-native.c    s24le 2ch 192000Hz deadbeef

●384k with audacity
50    5    125    protocol-native.c    float32le 2ch 192000Hz audacity
(5    alsa_output.pci-0000_00_14.2.analog-stereo    module-alsa-card.c    s32le 2ch 192000Hz    RUNNING
)


当方でdeadbeefは、PulseAudio出力で384kフォーマット再生は落ちます。ALSAだと落ちません。

勘違いでなければ、Realtek 892の同社のスペックシート通り、最大192k/24bit、このHD Audioの上限に設定されています(Windows7起動でも同じ)。内部の電源ノイズを拾わないのであれば、私のチープな環境では、これが最高のハイレゾ再生可能環境です。

  • アンプへのS/PDIF出力は古いアンプの仕様で律速されるので、96k/24bitが上限
  • USB-DACのUSB接続は、44.1/24bitが上限。古い製品。
  • HD Audioでマザーボード上のデジアナ変換は、192k/24bitが上限。

一般に、嫌われるオンボードサウンドデバイスですが、ノイズがのらなければ、これでハイレゾスペックは満たしますので、そこにヘッドフォンを繋いで聴くことにします。 USB-DACの交換も当面しないことにしました。


前面ミニジャックではノイズを拾いますのでリアジャック接続です。シールドすればいいのかもしれません。

ここまでの前段階で、ノイズが自分で気づかないレベルの電源に置換しています。だからノートPCの場合ににわかに適用できるかわかりませんし、S/PDIF端子とか同軸デジタル端子とかノートPCにはついていません。テストしようがありません。ThinkPadにはついていないです。 そういうモノなのでしょう。光音声出力が搭載されているマザーボードもすべてではないから、S/PDIFも試すことができるケースも限定的だとは思います。そもそも、ノートPCにどんなサウンドチップが搭載されているかは覚えてないです。音楽聴かないし。笑)


Audioデバイスの認識状況の確認コマンド。A2DPデバイスの認識状況を調べたりするのにも使いますので、覚えておくと便利かもしれません。aplay -l , aplay -Lは、再生デバイスの認識と番号付けが確認できますので、合わせてどうぞ。

追記:pacmd list-sinks | grep sample で表示されていようがいまいが、関係ない気がします。新規の15.10では何もしていませんが、s32LE、floatLEでも使えるので、「何もしなくても適切に設定してくれるのでOK」というのが正解のような気がします。念の為、削除せずに以下は保存しておきます。設定したほうが確実かなと思います。3つの環境でリブート繰り返していると安定しません。


pacmd list-sinks
とか
aplay -L
とか
aplay -l
とか...


サンプルレートがどうなっているか確認。

pacmd list-sinks | grep sample

通常のオディオデバイスであれば、s16leになっていると思う。
ハイレゾ対応品なら、s32leやS24leになれば通常OKです。
当方の今日の設定だと以下のようになる。


pacmd list-sinks | grep sample

    sample spec: s16le 2ch 48000Hz
    sample spec: s32le 2ch 96000Hz


(もう少し詳細に折り返し1行)
pacmd list-sinks | grep  -e available.$ -e index: -e alsa.name -e bluez.name -e device.profile.description -e Hz -e protocol
 (2 sink(s) 有効の場合)
 

    index: 0
    sample spec: s16le 2ch 48000Hz
        alsa.name = "ID aa01 Digital"
        device.profile.description = "デジタルステレオ (HDMI)"
  * index: 7
    sample spec: s32le 2ch 192000Hz
        alsa.name = "ALC892 Analog"
        device.profile.description = "アナログステレオ"
Bluetoothを接続します。
3 sink(s) available.
    index: 0
    sample spec: s16le 2ch 48000Hz
        alsa.name = "ID aa01 Digital"
        device.profile.description = "デジタルステレオ (HDMI)"
  * index: 1
    sample spec: s32le 2ch 192000Hz
        alsa.name = "ALC892 Analog"
        device.profile.description = "アナログステレオ"
    index: 2
    sample spec: s16le 2ch 48000Hz
        bluetooth.protocol = "a2dp"
        bluez.name = "MDR-ZX750BN"


なぜs24leでなくて、s32leに飛んでいるか? 
詳細は別として、これで正しいそうです。(この認識がもし違っていたたらぜひ教えてください)
釈然としない人は、ALSAとPuliseオーディオの開発者チームのドキュメントを参照してください。
私は理解することをあきらめました。^^;
今時点でつないでいるアンプはOptical S/PDIF 96kが上限値なので、当方の場合、この96000Hzが適切な値です。USB-DACではありません。

sudo gedit  /etc/asound.conf  

type plug
slave {
pcm "hw:1,1"
format s32le
rate 96000
}


今日現在、ユーザー配下の~/.asoundrc に全面移行しました。正しさの確信はありませんが意図通りには動いています。
defaults.pcm.rate_converter "samplerate_best"

#pcm.primary {
#    type plug
#    slave {
#    pcm "hw:1,0"
#    format s32le
#    rate 192000
#    }
#}

pcm.!default  {
    type plug
    slave {
        pcm "pcm.rtl892analog"
    }
}
#pcm.!default {
#    type hw
#    card 1
#}
ctl.!default {
    type hw         
    card 1
}
pcm.rtl892analog{
    pcm "hw:1,0"
    format s32le
    rate 192000
}
pcm.spdif96k{
    pcm "hw:1,1"
    format s32le
    rate 96000
}
pcm.bluetootheadset {
        type bluetooth
        device "FA:FA:FA:FA:FA:FA" #MAC SONY MDR
        profile "auto"
}
#pcm.upmix51 {
#    type upmix
#    slave.pcm "surround21"
#    delay 15
#    channels 3
#}



必要なら。
hw番号は個々環境、接続順などで違います。覚えておいたほうがJACKやプレイヤー設定の時便利かもしれません。s24leには設定してもs32leになりますので、s32leで設定しています。

おまけ:pulseaudio をkillして、再起動

sinkでサウンドデバイスが全く確認できなくなったら、

pulseaudio -k
pulseaudio --start  (自動なので特に必要なし)

それでもだめなら、以下も合わせて投入。


sudo alsa force-reload

どうしてもだめなら、結局。

再起動。LTSカーネルでないカーネルを使っている場合にはトラブルが多い気がします。

たとえば、HD Audio Reaktek892 ANALOGに当方の環境でコマンドラインで切り替える場合;2行

参考切り替えスクリプト


#!/bin/bash
#@ デフォルトカード、シンクの切り替え アナログにする場合。
# I'm ~/bin/analogoutput.
#### analog

pulseaudio -k #リセット。自動リスタートするはずなので再起動不要。
###sinks

echo シンクリストを表示。
pactl list short sinks

echo カードを変更。アナログに alsa_output.pci-0000_00_14.2.analog-stereo
pactl set-card-profile 1 output:analog-stereo+input:analog-stereo

echo デフォルトシンクをアナログ
pacmd set-default-sink "alsa_output.pci-0000_00_14.2.analog-stereo"
#pacmd set-default-sink alsa_output.pci-0000_00_14.2.iec958-stereo
#pacmd set-default-sink alsa_output.pci-0000_00_01.1.hdmi-stereo
###sinks
exit
#----------------------------------------------------------------------------
echo ---pactl list short sink-inputs
echo
pactl list short sink-inputs
#pactl list cards
echo
echo ---pactl list short sinks
pactl list short sinks
echo
echo ---"pacmd list-sinks | grep sample"
pacmd list-sinks | grep sample


参考文献


コマンドラインでややこしいことがしたい場合


ALSA etc...


Namida Zone :: 神々は細部に宿る――涙とともに、夜な夜なパンをかじった。

Grub2をめぐるあれこれ。テーマ、背景、フォント。それが Cute Grub 計画

No Copyright Girl / ノーコピーライトガール Grubと戯れるという意味のない日常:: Cute Grub 計画 コンピューターの電源オン後、 OS オペレーティングシステムを起動するためのブートローダーが先ず動きだす――ほぼすべてのLinux...