ハイレゾ対応にするための定義ファイルの編集
起稿2015/11/02 更新2020/08/14サンプルレート、ビット深度は2行書き換えるだけ Pulse Audio でのお話
default-sample-format = s32le
default-sample-rate = 48000
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のサンプリングレート)が上限だったりします。;; default-sample-format = s16le
;; default-sample-rate = 44100
default-sample-format = s32le
default-sample-rate = 192000
2行書き換えて、
pulseaudio -k ; pactl list short sinks
もちろん環境に応じて書き換えてください。
以下は何か困ったら参考にしてみてください。
試しに、以下の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年の製品です。
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年の製品です。
音源ソースフォーマット別の結果
それぞれのフォーマットをAudacity ,deadbeef 再生中に実行,確認。
(PulseAudio出力)
» pactl list short sink-inputs
» 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)
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起動でも同じ)。内部の電源ノイズを拾わないのであれば、私のチープな環境では、これが最高のハイレゾ再生可能環境です。
一般に、嫌われるオンボードサウンドデバイスですが、ノイズがのらなければ、これでハイレゾスペックは満たしますので、そこにヘッドフォンを繋いで聴くことにします。 USB-DACの交換も当面しないことにしました。
前面ミニジャックではノイズを拾いますのでリアジャック接続です。シールドすればいいのかもしれません。
ここまでの前段階で、ノイズが自分で気づかないレベルの電源に置換しています。だからノートPCの場合ににわかに適用できるかわかりませんし、S/PDIF端子とか同軸デジタル端子とかノートPCにはついていません。テストしようがありません。ThinkPadにはついていないです。 そういうモノなのでしょう。光音声出力が搭載されているマザーボードもすべてではないから、S/PDIFも試すことができるケースも限定的だとは思います。そもそも、ノートPCにどんなサウンドチップが搭載されているかは覚えてないです。音楽聴かないし。笑)
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 = "アナログステレオ"
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"
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
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
#}
#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 -k
pulseaudio --start (自動なので特に必要なし)
それでもだめなら、以下も合わせて投入。
sudo alsa force-reload
どうしてもだめなら、結局。
再起動。LTSカーネルでないカーネルを使っている場合にはトラブルが多い気がします。
それでもだめなら、以下も合わせて投入。
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
#@ デフォルトカード、シンクの切り替え アナログにする場合。
# 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"
###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
参考文献
- http://freedesktop.org/software/pulseaudio/doxygen/sample.html
- http://askubuntu.com/questions/138611/how-to-change-audio-bit-depth-and-sampling-rate
- http://r3dux.org/2013/12/how-to-enable-high-quality-audio-in-linux/
- http://ubuntuforums.org/showthread.php?t=1803835
コマンドラインでややこしいことがしたい場合
- http://unix.stackexchange.com/questions/65246/change-pulseaudio-input-output-from-shell
- http://askubuntu.com/questions/398030/change-default-sound-device
- http://askubuntu.com/questions/14077/how-can-i-change-the-default-audio-device-from-command-line
- http://askubuntu.com/questions/71863/how-to-change-pulseaudio-sink-with-pacmd-set-default-sink-during-playback
- https://wiki.archlinuxjp.org/index.php/PulseAudio/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB#HDMI_.E3.81.A8.E3.82.A2.E3.83.8A.E3.83.AD.E3.82.B0.E3.81.AE.E5.90.8C.E6.99.82.E5.87.BA.E5.8A.9B
ALSA etc...
- https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture#Simultaneous_playback_problems
- http://d.hatena.ne.jp/gin135/20140502/1399022358
- http://wikiwiki.jp/tetsuya/?asoundrc
- http://neet.waterblue.net/2009/08/09/linux%E3%81%AE%E3%82%B5%E3%82%A6%E3%83%B3%E3%83%89%E8%A8%AD%E5%AE%9A/