Mar 02, 2013
Vine Mpd ppcについて覚書(8)サンプリング周波数とビットレートの変更+追記:mpd.confの設定
以前、覚書(5)で、以下のようなことを書いた。
usb出力が44.1kHzから48kHzになってしまった。
ファイルは44.1kHzなのでアップサンプリングしてる。
どうもこれはalsaのデフォルト設定らしく、どこかで変更も出来るらしいということが分かった。
いつまでも48kHzのままというのもどうなのかなということで、44.1kHzに戻すことにした。
以下のサイトを参考にした。
>Tuning - Music Player Daemon Community Wiki : ALSA dmix
Since version 1.0.9-rc2, ALSA enables dmix (allows multiple applications to play audio on a single sound card) by default. dmix is a little overhead, if you want direct output to the device, use something like the following syntax:
audio_output { type "alsa" name "my ALSA device" device "hw:0,0" }Another reason to bypass dmix is that dmix forces 48khz (see here). So if you playback 44.1khz this will require resampling even if your soundcards supports 44.1khz samplerate, this causes extra cpu usage.
前半を約してみる。
「version 1.0.9-rc2以降、ALSAはデフォルトでdmixを有効にしている(dmixによって複数のアプリを1つのサウンドカードで対応させて音を出すことが出来るようになる)。dmixというのは、デバイスにダイレクトに出力したい向きには、ちょっとやりすぎの感があるので、以下のような記述を使うといい。」
ここで書かれている記述には見覚えがある。mpd.confの、alsaの設定である。
というわけで、書かれているように直してみた。
mpdを終了し、mpd.confを編集する。
## device "hw:0,0" # optional
文頭の##を削除して保存。
mpdを再起動する。
usb出力が44.1kHzになった。
なんと簡単なことか。
ここで「top」コマンドを打つと、mpdのCPU使用率が2、3%になっている。
48kHzだったときの1/10になってしまった。
システムへの負担は相当少ないみたい。
そもそもVoyage MPD Starter Kitとかみると、かなりのロースペックで動かしている。
後半も約してみる。
「dmixをバイパスするもう一つの理由は、dmixが強制的に48kHzにしてしまうことだ。例えば、サウンドカードが44.1kHzをサポートしていて、44.1kHz戻すためにリサンプリングする必要があるといった場合、余分なCPU負荷の原因になる。」
dmix自体のせいで無駄にCPU負荷が10倍になるのなら、バイパスするほうが順当だろう。
ちなみに、mpd.confのalsaの設定には、サンプリングレートを決める項目もある。
## format "44100:16:2" # optional
コメントアウトを削除して96000:24:2にしたら、usb出力が不安定になった。
ブチブチ出力が途切れてしまう。
アップサンプリングして出力するには他の方法じゃないと駄目なようだ。
ちなみにこのときもCPU負荷は数%しかなかった。
音質がどうなったかというと、例によってちゃんとした比較は出来ていないんだけど、48kHzのときのほうがゆったりして暖かい音が出ていた印象がある。44.1kHzにしてからシャープな音になった。固いといえば固いのだけど、こちらのほうがリアルなような気もする。
そのうち余裕が出来たらじっくり聴き比べてみよう。
4月6日追記。
今更だけどmpd.confの記載内容を記録しておく。
うちでは「~/.mpd/mpd.conf」で設定している。
これは「INSTALL」ファイルに記載されてるデフォルトだ。
# Files and directories #### music_directory "~/Music" playlist_directory "~/.mpd/playlists" db_file "~/.mpd/database" log_file "~/.mpd/log" pid_file "~/.mpd/pid" state_file "~/.mpd/state" sticker_file "~/.mpd/sticker.sql" #rootでMPDを動かしてるので、~はrootディレクトリである。
# General music daemon options #### #user "nobody" #group "nogroup" # For network #bind_to_address "any" #bind_to_address "~/.mpd/socket" port "6600" #log_level "default" #gapless_mp3_playback "yes" #restore_paused "no" #save_absolute_paths_in_playlists "no" #metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" auto_update "yes" auto_update_depth "6" # # Symbolic link behavior #### follow_outside_symlinks "yes" follow_inside_symlinks "yes" #
portは6600で固定。
auto_updateは効いてるのかどうか分からない。ライブラリがオートアップデートしたの見たことないし。
depthは一応、深めに設定している。
MusicディレクトリにNASのディレクトリをマウントしてるんだけど、結構深いとこまで辿らないと音楽ファイルとか辿り付かない場合があるので。設定しなかったらどうなるかは試していない。
# Zeroconf / Avahi Service Discovery #### # Permissions #### # Input ####
ここは触っていない。
# Audio Output #### # An example of an ALSA output: # audio_output { type "alsa" name "My ALSA Device" device "hw:0,0" # optional ## format "44100:16:2" # optional ## mixer_type "hardware" # optional ## mixer_device "default" # optional ## mixer_control "PCM" # optional ## mixer_index "0" # optional } audio_output_format "88200:24:2" #ここの項目で有効にしてるのはalsaの項目と、ずっと下のほうの「audio_output_format」という項目。
以前は「pulseaudio」の項目も有効にしていたんだけど、不具合があって現在はコメントアウトしている。
ここから4月1日に追記していた内容。
サンプリング周波数とビットレートの変更はalsaの設定以外でもできる。
mpd.confの、alsaのずっと下のほうに、以下のような記載がある。
# This setting will change all decoded audio to be converted to the specified # format before being passed to the audio outputs. By default, this setting is # disabled. # #audio_output_format "44100:16:2"
ここのセッティングでは、デコードされた全てのオーディオ信号を出力される前に指定されたフォーマットに変換する、とある。
ここを以下のように書き変え、コメントアウト削除した。
audio_output_format "96000:24:2"
これでusb出力を24bit/96kHzに変換できた。
alsaの設定でしたときのような不具合はないようだ。
CPU負荷は4%ぐらい。フォーマット変換を設定する前の倍ぐらいになっている。
音質の変化は、まだちゃんとした比較はしていない。
なかなか比較する余裕がないのが現状だ。
ここからまた4月6日追記分。
# Normalization automatic volume adjustments #### replaygain "album" #replaygain_preamp "0" #volume_normalization "no" #
ここはよく分からない。
「See <http://www.replaygain.org>」とか書いてあるけど、充分読めていない。
リプレイと関係あるらしく、ここの設定を変えるとncmpcppでYを打ったときのmpdの反応が違ってくるようだ。しかしどうなってるのか充分に把握できていない。
# MPD Internal Buffering #### audio_buffer_size "384" buffer_before_play "5%" #
ここの設定は音質にも影響があるらしい。
audio_buffer_sizeは多分「kb」だと思う。256だと音が出ない。
buffer_before_playだけど、何の割合か分からない。メモリのなのかファイルのなのか。現在少なめに設定している。
# Resource Limitations #### # Client TCP keep alive ####
ここは触っていない。
# Character Encoding #### filesystem_charset "UTF-8" #id3v1_encoding "ISO-8859-1" #
一応、UTF-8で、コメントアウト削除。
# SIDPlay decoder ####
ここは触っていない。
ざっとこんな感じ。
今後、変わるところもあるかもしれないけど
とりあえず、今回はここまで。
wikieditish message: Ready to edit this entry.
A quick preview will be rendered here when you click "Preview" button.