AACを最高の音質で聴くためのMPDコンパイル FDK-AAC-0.1.5
MPD(Music Player Daemon)って音が良くないよね。 と思っている方々はもしかしてAACを聴いていませんか?
iTunesやmoraなどで楽曲を購入するとフォーマットはAAC(Advanced Audio Codec)になっています。
この圧縮フォーマットはATRAC(MDに使用)やPASC(DCCに使用)、MP3などよりも後発のコーデックで、圧縮率に優れていると言われています。
しかし、MPDでAACの曲を再生すると透明感や臨場感がなく128kbps以下のMP3を聴いているような錯覚に襲われますね。
データレートが250kbps以上もあり、MP3よりも圧縮率に優れている楽曲データとは思えない音です。
なぜでしょう?
MPDをよくある例通りにコンパイルしたり、apt-getでインストールするとFAAD(libfaad)というライブラリを使ってAACをデコードします。
<< FAADは16bit出力 >>
一般ユーザの間では、このFAADが音質劣化の元凶だということは、あまり知られていないのかもしれません。また、SoftwareVolumeを併用すると、libfaadがデコードした16bitデータから更にbitが削られて量子化ノイズの影響まで受けてしまいます。
sudo apt-get remove libfaad-dev
として、libfaad-devをアンインストールしてMPDをコンパイルすると、ffmpeg内のAACデコーダを使うようになります。ffmpegの内部AACデコーダはMP3デコーダと同様に24bit処理し、24bit出力するため、少しキメ細かい音が出るようになります。
<< ffmpegは24bit出力 >>
100%ボリュームで比較してもFAADよりずっと良い音になります。
本日は、せっかくですからAACエンコーダ/デコーダで最も音が良いと言われているFDK-AACを使ってみましょう。 MPDに直接取り込めないためffmpegに同梱するのがミソです。
<< FDK-AACはffmpegの外部ライブラリ >>
FDK-AACはあのFraunhofer IISのコーデックらしいです。この名前をいって解かる人はかなりのツウです。おおよそ20年前、mp3黎明期において抜群の音質を誇ったエンコーダーです。
以下、ピンク文字はコマンド入力です。コピペしてください。
FDK-AAC-0.1.5 のコンパイル
https://ja.osdn.net/projects/sfnet_opencore-amr/
こちらから fdk-aac-0.1.5.tar.gz をダウンロードして展開(tar xvf)し、フォルダの中に入ります。
./configure CFLAGS="-O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard" CXXFLAGS="-O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard"
make -j4
sudo make install
※FDK-AACは、ソースコードは公開されていますが、著作権の問題だかで、バイナリとして配布は許されていない様子です。使いたい場合は、ソースからコンパイルしかありません。
ffmpeg-3.4.2 のコンパイル
https://www.ffmpeg.org/download.html
こちらから ffmpeg-3.4.2.tar.bz2 をダウンロードして展開(tar xvf)し、フォルダの中に入ります。
sudo nano /etc/ld.so.conf で下記のように編集します。
include ld.so.conf.d/*.conf
/usr/local/lib
ファイルを保存して閉じます。
sudo ldconfig
ldd `which ffmpeg`
とコマンドを打ち、リンク先に not found という表示がないことを確認します。(lddコマンドは、コンパイルとインストールがが終わった後に確認するのが正解な気がします。)
linux-vdso.so.1 (0x7efeb000)
/usr/lib/arm-linux-gnueabihf/libarmmem.so (0x76f40000)
libasound.so.2 => /usr/lib/arm-linux-gnueabihf/libasound.so.2 (0x76e42000)
libfdk-aac.so.1 => /usr/local/lib/libfdk-aac.so.1 (0x76d9b000)
libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0x76d1c000)
libz.so.1 => /lib/arm-linux-gnueabihf/libz.so.1 (0x76cf5000)
libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0x76ccc000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76b8d000)
libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0x76b7a000)
librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0x76b63000)
/lib/ld-linux-armhf.so.3 (0x76f56000)
configureです。 内蔵aacデコーダをDisable、fdk-aacをEnableします。
./configure --enable-gpl --enable-version3 --enable-nonfree \
--enable-libfdk-aac --disable-decoder=aac \
--disable-decoder=aac_fixed --disable-decoder=aac_latm
最後にコンパイルします。
make -j4
sudo make install
ffmpegのコンパイルは結構時間がかかります。
MPD 0.20.11 のコンパイル
Moode Audio のレシピに書かれているMPDのコンパイル方法に準拠します。もっと新しいバージョンにしても良いと思います。その時はバージョン番号を読み換えて下さい。
sudo apt-get -y install automake libmad0-dev libmpg123-dev \
libid3tag0-dev libflac-dev libvorbis-dev \
libwavpack-dev libavcodec-dev libavformat-dev \
libmp3lame-dev libsoxr-dev \
libcdio-paranoia-dev libiso9660-dev \
libcurl4-gnutls-dev libasound2-dev \
libshout3-dev libyajl-dev libmpdclient-dev \
libavahi-client-dev libsystemd-dev \
libwrap0-dev libboost-dev libicu-dev \
libglib2.0-dev
ここまで一気にコピペします。
念のためfaadが紛れ込まないようにアンインストールしておきましょう。
sudo apt-get remove libfaad-dev
sudo wget http://www.musicpd.org/download/mpd/0.20/mpd-0.20.11.tar.xz
sudo tar xf mpd-0.20.11.tar.xz
cd mpd-0.20.11
sudo sh autogen.sh
ビルドオプションはPi2、Pi3用にします。vfpやneonを使用します。
sudo ./configure CFLAGS="-O2 -march=armv7-a -mtune=cortex-a7 \
-mfpu=neon-vfpv4 -mfloat-abi=hard" \
CXXFLAGS="-O2 -march=armv7-a -mtune=cortex-a7 \
-mfpu=neon-vfpv4 -mfloat-abi=hard" \
--enable-database --enable-libmpdclient --enable-alsa \
--enable-curl --enable-dsd --enable-ffmpeg --enable-flac \
--enable-id3 --enable-soundcloud --enable-lame-encoder --enable-mad \
--enable-mpg123 --enable-pipe-output --enable-recorder-output --enable-shout \
--enable-vorbis --enable-wave-encoder --enable-wavpack --enable-httpd-output \
--enable-soxr --with-zeroconf=avahi \
--disable-bzip2 --disable-zzip --disable-fluidsynth --disable-gme \
--disable-wildmidi --disable-sqlite --disable-jack --disable-ao --disable-oss \
--disable-ipv6 --disable-pulse --disable-nfs --disable-smbclient \
--disable-upnp --disable-expat --disable-lsr \
--disable-sndfile --disable-audiofile --disable-sidplay
ここまで一気にコピペします。
sudo make -j4
sudo make install
sudo strip --strip-unneeded /usr/local/bin/mpd
これで完了です。
既にmpdをapt-getでインストールしている場合は、make -j4でコンパイルが終わったあと、
sudo strip --strip-unneeded src/mpd
sudo cp -f src/mpd /usr/bin/
とした方が、これまでの環境(設定)を引き継げます。
駆け足で書いてしまいましたが、ソースコードのダウンロードはPC上で行い、WinSCPにてRaspberryPiに転送するのが手っ取り早いです。macな人はscpコマンドで転送できるはずです。
雑感
iTunesで購入した楽曲もMPDで聴きたいという人は挑戦してみてはいかがでしょうか。
エンコード(圧縮)するソフトウェアで音が変わるというのは有名ですが、デコード(伸張)側でもかなり影響があることが実感できます。
高域の音数が格段に増えて、まるで違う音源を聴いているようです。残響音もきれいに響いて空間が広く感じられます。はっきり言ってWindowsのiTunes上で再生したときよりも良いです。
LAME 320kbpsのMP3に勝る音になったかどうかは何とも言えませんが、libfaadのAACの音と比べると相当まともな音になっていて、これなら十分音楽を楽しめるのではないでしょうか。
iTunesストアで購入した曲も、これからはMPDで再生する時代です!
というのは言い過ぎですね。
Mastered for iTunes の効能がどの程度あるのかは分かりません。。。
ざっと感想を書いておきます。
FAAD
平面的で奥行き感も透明感もない。
FDK-AAC
高域が散らばるようなステレオ感があり、オーディオ的に楽しませてくれる。ただ、曲によっては若干うるさいと感じる部分もある。
ffmpeg内蔵
中音域のキメ細かさはあるが少し落ち着いた雰囲気。 へんな派手さがないので多くの曲で破綻しない。万人向けと思われる。
以上、参考になれば幸いです。
にほんブログ村
ブログランキングに参加中です。 めざせ1位!
もしよろしければ「ぽちっと」お願いします。
« RaspberryPiに最新のRT-Linuxを入れる方法 | トップページ | OSC 2018 東京/Spring 2/23(金)、2/24(土)に出展します。 »
「PCオーディオ」カテゴリの記事
- RaspberryPi Pico USB-DDC化 I2SとMSBファースト後詰め出力対応(2022.03.21)
- RaspberryPi Pico USB-DDC化? I2S出力調査(2022.03.20)
- efuさんのWaveSpectraが公開停止していた(2022.03.09)
- ラズパイをUSB-DACとしてスマホに認識させる方法 gadget mode(USB Audio Class 2.0)(2020.10.16)
- PCに組み込むヘッドホンアンプ Sound RABBIT & 900万PVありがとう企画(2020.10.10)
コメント
« RaspberryPiに最新のRT-Linuxを入れる方法 | トップページ | OSC 2018 東京/Spring 2/23(金)、2/24(土)に出展します。 »
ffmpeg内蔵AACデコーダをdisableする方法ですが、./configure するときに--disable-decoder=aac --disable-decoder=aac_fixed --disable-decoder=aac_latm のオプションを与えるのではダメなのでしょうか?
configure後のリストからaacが消えることは確認してあります。
投稿: | 2018年2月13日 (火) 09時50分
ご指摘、ありがとうございます。
その方法の方が正しいですね。 記事の方も訂正いたします。
よろしくお願いいたします。
投稿: たかじん | 2018年2月13日 (火) 12時24分
自分のiPod touchにはMacのiTunesにてAAC320(VBR)でエンコードした曲を入れているんですが、iPod touchにLightning - Docアダプターを接続し、アダプター内蔵のDAC出力をCQ版ぺるけ式ヘッドフォンアンプに接続すると、いい音を聴かせてくれます。
この場合、デコーダーはおそらくiPod touchのiOSに組み込まれているんだと思いますが、同じAACデータを別のエンコーダーと聞き比べたことはないので、上記の組み合わせが如何程のレベルなのかはちょっとわかりません。
投稿: 三毛ランジェロ | 2018年2月14日 (水) 00時28分
三毛ランジェロさん
appleのAACデコーダは、winとmac、iPodで、わざわざ別のソースコードにするということは無いと思うので、デコードされた結果は一緒のような気もしますが、アダプタ内蔵のDACが優秀なのかもしれません。
また、ぺるけ式ヘッドホンアンプは、シンプルながら、なかなかの音を聞かせてくれるアンプと思います。
FDK-AACは、AppleのAACデコーダと少し違う傾向の音で、若干やかましい部分もあると思います。 しかし、高域の音の飛び散り方(?)がスゴく、ステレオ感が増して聞こえます。 ヘッドホンだとやかましい部分が耳に付く可能性もあり、好みが分かれるかもしれません。
AACデータを記事中のffmpegでwavに変換してiPodで聞き比べると、差が見えてくるかもしれませんね。
投稿: たかじん | 2018年2月15日 (木) 08時20分
たかじんさん
AppleがiPhoneからヘッドフォンジャックを廃止した時、ほぼ同時に発売したLightning - 3.5mmヘッドフォンジャックアダプターがあるんですが、これは明らかにLightning - Docアダプター内蔵のDACより音質が劣ります。実際に購入して、iPadとヘッドフォンアンプを使って比較実験して確認しました。もっとも、測定機材を使用して客観的に比較した訳ではなく、あくまでも聴覚上の比較ですが、それでも差異が認められました。
Appleとしては、「ヘッドフォンジャックを廃止する代わりにステレオミニプラグが使えるアダプターを安価に供給するから許してね」ということで、コスト抑制のために上質なDACは搭載しなかったものと推測しています。
投稿: 三毛ランジェロ | 2018年2月15日 (木) 20時11分
三毛ランジェロさん
Docタイプはスペースに余裕があるので、デカップリングコンデンサを入れられそうですが、変換ケーブルは厳しいでしょうね。
あとは、消費電流の問題もあり、変換ケーブルタイプでは音質的に不利になる可能性もあるかと思います。
もちろん、コスト的な部分で安価なDAC/ヘッドホンドライブ回路を搭載しているかもしれませんね。
投稿: たかじん | 2018年2月19日 (月) 22時46分
試してみて、音質の変化に驚きました。
今まで聴いていた音はなんだっただろうという感じです。
ちなみに、MpdPlayのライブラリを入れ替えたのですが、Rpi 3でコンパイルしてPi Zeroで使っています。FDK-AACのconfigrパラメータも記事のままで大丈夫でした。
投稿: sliverbbs | 2018年2月22日 (木) 23時36分
sliverbbsさん
使ってくれる人がいてよかったです。ありがとうございます。
Pi Zeroでもそのまま使えたんですね。 なぜだろう。。。 実はneonなど有効になっていないのかな??
投稿: たかじん | 2018年2月25日 (日) 14時09分
遅くなりましたが、確認してみました。
lpi@raspberrypi:~/ffmpeg-3.4.2 $ ldd ffmpeg | grep fdk
libfdk-aac.so.1 => /usr/local/lib/libfdk-aac.so.1 (0xb6f27000)
pi@raspberrypi:~/ffmpeg-3.4.2 $ ldd ffmpeg | grep faad
pi@raspberrypi:~/ffmpeg-3.4.2 $
こんな感じです。
投稿: sliverbbs | 2018年3月 5日 (月) 21時35分
sliverbbs さん
イイ感じですね。
FAADが取り込まれていてもmpd.confを編集すればffmpegに流すことが出来るらしいのですが、moodeやvolumioを使っていると、mpd.confの編集はWEB-UIに任せて置いた方が整合性が崩れなくて良いですからね。
投稿: たかじん | 2018年3月 8日 (木) 21時20分
たかじんさん こんにちは
Moode 4.0とSabreberryDAC zeroとpi3でFDK-AACを組み込んで使っております。
DAC zeroは、OSコンの100uF×5を追加、ケースは、千石のアルミ削り出しにしております。2個のステレオミニジャックのネジが閉まらず、ホットメルトで固めております。
今まで、痩せて聞こえて、Moodeのミキサーで低音を盛り上げても物足りなく感じておりました。
高音の今まででていなかった音がでてきて、低音もくっきりしてきました。
すごい、良い感じです。
Moode 4.0をスクリプトは、何回か失敗しましたが、最初SDカードの領域拡張でもしているのでしょうか、ゆっくり待ってからやると失敗しなくなりました。
投稿: toto | 2018年3月20日 (火) 20時00分
toto さん
DAC zeroにOSコン 5個ですか。 すごい豪華ですね。
あのアルミ削りだしケースは、肉厚があって、端子などを設置しにくそうですが、オーディオ機器としては良さそうです。
おっしゃるとおりMoodeのスクリプト、長い時間待つことが重要です。 ネットワーク環境が良い人は1時間くらいで終わるみたいです。 私の家だと4時間ほどかかっていました。
投稿: たかじん | 2018年3月21日 (水) 09時45分
たかじんさん こんにちは
Moode4.1にインストールしてみました。
moode4.1のMPDバージョンを調べると、0.20.18
ffmpeg,3.2.10-1
次に、インストールしたバージョンは、
fdk-aac-0.1.6.tar.gz
ffmpeg-4.0.tar.bz2
MPD 0.20.18
2回失敗した後、3回目に上手くいきました。
投稿: toto | 2018年4月21日 (土) 01時00分
toto さん
三度目の正直 ですね。 うまくいってよかったです。
Moode4.1の導入スクリプトは、エラーがでるといううわさがありますね。
私も時間ができましたら挑戦しようと思います。
投稿: たかじん | 2018年4月22日 (日) 22時53分