mpdとは、音楽ファイルやプレイリストを管理するサーバーです。mpdは単体だけでは動きません。操作するクライアント(ncmpcpp等)が必要になります。今回紹介するのはmpdとncmpcppをCygwin上でのビルド方法です。mpdとncmpcppはCygwin Ports
http://cygwinports.org/ からインストールすることができます。また、windows向け(Cygwin非依存)ビルド済みmpdをhttp://www.musicpd.org/download.html からダウンロードできます。
環境
Windows 8.1 64-bit
Cygwin 1.7.35 64-bit
mpd 0.19.9
#MPD
##必要なパッケージのインストール
cyg-fastでパッケージをインストールします。cyg-fastについては
http://qiita.com/d9magai@github/items/ff867393b7c257135e70
を参考にしてください。
$cyg-fast -m ftp://ftp.iij.ad.jp/pub/cygwin/ update
$cyg-fast install gcc-core gcc-g++ make libboost-devel doxygen cygrunsrv libsqlite3-devel autoconf automake pkg-config libglib2.0-devel zlib-devel libiconv flac flac-devel libogg libvorbis libvorbis-devel libao-devel libao4 libao libcurl-devel curl libopus-devel libsndfile libsndfile-devel
一応これだけでビルドができますが、flacやDSDくらいしか聴けません。mp3やaacに対応させたいので機能を追加していきます。使用用途に合わせて追加していきます。
mpdのインストールを簡潔にするためパッケージはすべて-prefix=/usr
にしています。
/usr/local/
にインストールした場合、mpd の configure実行時に以下のように環境変数を設定します。
libid3tagの場合
$ ID3TAG_CFLAGS=-I/usr/local/include ID3TAG_LIBS="-L/usr/local/lib -lid3tag" ./configure
###libmpdclient
ncmpcppでも使うので、入れておきましょう。
$ mkdir -p /tmp/mpd
$ cd !$
$ wget http://www.musicpd.org/download/libmpdclient/2/libmpdclient-2.9.tar.xz
$ tar Jxf libmpdclient-2.9.tar.xz
$ cd libmpdclient-2.9
$ ./configure --prefix=/usr
###libid3tag
ID3タグを読み込むのに使います
mkdir -p /tmp/mpd
cd !$
wget 'http://sourceforge.net/projects/mad/files/libid3tag/0.15.1b/libid3tag-0.15.1b.tar.gz'
tar -xzvf libid3tag-*.tar.gz
cd libid3tag-*
./configure --prefix=/usr
make && make install
configure: error: cannot guess build type; you must specify one
64bitで./configure実行のとき、このエラーが出た場合
./configure --prefix=/usr --build=x86_64-unknow-cygwin
で実行してみてください。
###libmad
MAD(MPEG Audio Decoder)、MP3の再生に使います
mkdir -p /tmp/mpd
cd !$
wget 'http://sourceforge.net/projects/mad/files/libmad/0.15.1b/libmad-0.15.1b.tar.gz'
tar -xzvf libmad-0.15.1b.tar.gz
cd libmad-0.15.1b
./configure --prefix=/usr
gcc: error: unrecognized command line option '-fforce-mem'
make時たぶんこのエラーがでます。このgccオプションは廃止されてるみたいなので
vi
などでMakefileのCFLAGSから-fforce-mem
を消してください
make && make install
###LAME
MP3エンコーダーです。
mkdir -p /tmp/mpd
cd !$
wget 'http://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz'
tar -xzvf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --prefix=/usr
こちらもmake時エラーがでます。
lametime.c:139:25: エラー: ‘_O_BINARY’ が宣言されていません (この関数内での最初の使用)
setmode(fileno(fp), _O_BINARY);
frontend内のlametime.cを修正してください。138行目あたりです
#elif defined __CYGWIN__
//setmode(fileno(fp), _O_BINARY);
setmode(fileno(fp), O_BINARY); // _を消します
make && make install
###mpg123
MP3再生用。MADの替わりに使うことができます。
mkdir -p /tmp/mpd
cd !$
wget 'http://sourceforge.net/projects/mpg123/files/mpg123/1.22.0/mpg123-1.22.0.tar.bz2'
tar jxf mpg123-1.22.0.tar.bz2
cd mpg123-1.22.0
./configure --prefix=/usr
make && make install
###FAAD2
aac(.m4a)再生に使います。
mkdir -p /tmp/mpd
cd !$
wget 'http://sourceforge.net/projects/faac/files/faad2-src/faad2-2.7/faad2-2.7.tar.bz2'
tar jxf faad2-2.7.tar.bz2
cd faad2-2.7
./configure --prefix=/usr
make && make install
###Audio File Library
AIFFやWAVE再生用
$ cyg-fast install audiofile libaudiofile-devel
または、
$ mkdir -p /tmp/mpd
$ cd !$
$ wget 'http://audiofile.68k.org/audiofile-0.3.6.tar.gz'
$ tar -xzvf audiofile-0.3.6.tar.gz
$ cd audiofile-0.3.6
$ ./configure --prefix=/usr
$ make && make install
###FFMPEG
http://ffmpeg.zeranoe.com/builds/ から[Shared]と[Dev]をダウンロードし解凍します
$ mkdir -p /usr/local/ffmpeg
この中にDevの中身すべてとSharedのbinを入れてください
.
├── bin
├── doc
├── include
├── lib
├── licenses
└── README.txt
pkgconfigを追加します。
$ vi /lib/pkgconfig/ffmpeg.pc
# Package Information for pkg-config
prefix=/usr/local/ffmpeg
exec_prefix=${prefix}
libdir=
includedir=${prefix}/include
Name: ffmpeg
Description: Open Source Computer Vision Library
Version: 2.4.9
Libs: ${exec_prefix}/lib/libavcodec.dll.a ${exec_prefix}/lib/libavdevice.dll.a ${exec_prefix}/lib/libavfilter.dll.a ${exec_prefix}/lib/libavformat.dll.a ${exec_prefix}/lib/libavutil.dll.a ${exec_prefix}/lib/libpostproc.dll.a ${exec_prefix}/lib/libswresample.dll.a ${exec_prefix}/lib/libswscale.dll.a -lm -ldl -lrt
Cflags: -I${includedir}
確認
$ vi ffmpeg.c
#include <libavcodec/avcodec.h>
int main() {
av_register_all();
return 0;
}
$ gcc ffmpeg.c -o ffmpeg `pkg-config --cflags --libs ffmpeg`
$ ls ffmpeg.*
~/.bashrc または~/.zshrcに
export PATH=$PATH:/usr/local/ffmpeg/bin
を追加、パスを通します
$ source ~/.bashrc
$ ffmpeg -version
###その他のパッケージ
fluidsynth, AdPlug, GME(Game Music Emu), ModPlug, WavPack などがあります。
mpd の ./configure --help
で確かめてください。
##MPDインストール
$ mkdir -p /tmp/mpd
$ cd !$
$ wget http://www.musicpd.org/download/mpd/0.19/mpd-0.19.9.tar.xz
$ tar xvf mpd-0.19.9.tar.xz
$ cd mpd-0.19.9
$ ./configure
ffmpegをいれた場合
$ FFMPEG_CFLAGS=`pkg-config --cflags ffmpeg` FFMPEG_LIBS=`pkg-config --libs ffmpeg` ./configure
追加した機能が+になっていることを確認
########### MPD CONFIGURATION ############
Archive support:
(-bzip2) (-ISO9660) (-ZIP)
Client support:
(+IPv6) (+TCP) (+UNIX Domain Sockets)
Storage support:
(-NFS) (-SMB)
File format support:
(+AAC) (-AdPlug) (+DSD) (-C64 SID) (+FFMPEG) (+FLAC) (-FluidSynth) (-GME)
(+libsndfile) (-MikMod) (-MODPLUG) (+MAD) (+MPG123) (-Musepack)
(+Opus) (-OggTremor) (+OggVorbis) (+WAVE) (-WavPack) (-WildMidi)
Other features:
(-libsamplerate) (-libsoxr) (+libmpdclient) (-inotify) (+SQLite)
Metadata support:
(+ID3)
Playback support:
(-ALSA) (+FIFO) (+File Recorder) (+HTTP Daemon) (-JACK)
(+libao) (+OSS) (-OpenAL) (-OS X) (-Pipeline)
(-PulseAudio) (-ROAR) (-SHOUTcast) (-Solaris) (-WinMM)
Streaming encoder support:
(+FLAC) (+LAME) (-Shine) (+Ogg Vorbis) (+Opus) (-TwoLAME) (+WAVE)
Streaming support:
(-CDIO_PARANOIA) (+CURL) (-SMBCLIENT) (-Soundcloud)
(-MMS)
Event loop:
poll
make && make install
makeの途中エラーが出た場合
src/system/SocketUtil.cxx:79:29: エラー: ‘SO_PASSCRED’ was not declared in this scope
setsockopt(fd, SOL_SOCKET, SO_PASSCRED,
^
$ ./configure --disable-un
または、コードを修正します
$ vi src/system/SocketUtil.cxx
//56行目あたり
#ifdef HAVE_STRUCT_UCRED
//setsockopt(fd, SOL_SOCKET, SO_PASSCRED,
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
(const char *) &reuse, sizeof(reuse));
#endif
##MPD設定
$ mkdir -p ~/.mpd
$ mkdir -p ~/.mpd/playlists
$ cp /usr/local/share/doc/mpd/mpdconf.example ~/.mpd/mpd.conf
$ vi ~/.mpd/mpd.conf
コメントアウトをはずしていきます
music_directory "~/music"
db_file "~/.mpd/database"
playlist_directory "~/.mpd/playlists"
log_file "~/.mpd/log"
audio_output {
type "oss"
name "My OSS Device"
format "44100:16:2"
device "/dev/dsp" # optional
mixer_type "software" # optional
mixer_control "PCM" # optional
}
filesystem_charset "UTF-8"
id3v1_encoding "UTF-8"
##動作確認
$ mpd --verbose --no-daemon --stdout
#ncmpcpp
##必要なパッケージのインストール
$ cyg-fast install libfftw3-devel fftw3 ncurses ncursesw libncurses-devel libncursesw-devel libreadline-devel
##ncmpcppインストール
$ mkdir -p /tmp/ncmpcpp
$ cd !$
$ wget http://ncmpcpp.rybczak.net/stable/ncmpcpp-0.6.3.tar.bz2
$ tar xvf ncmpcpp-0.6.3.tar.bz2
$ cd ncmpcpp-0.6.3
$ BOOST_LIB_SUFFIX="" ./configure --enable-visualizer --enable-clock --enable-unicode --enable-outputs --with-curl --with-fftw
$ make
status.cpp:131:71: エラー: ‘setsockopt’ was not declared in this scope
setsockopt(Mpd.GetFD(), IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(flag));
^
$ vi src/status.cpp
//追加
#include <sys/types.h>
#include <sys/socket.h>
$ vi src/Makefile
# -lreadline を追加
LDFLAGS = -lboost_filesystem -lboost_system -lboost_locale -lboost_program_options -lboost_regex -lboost_thread -lmpdclient -lpthread -lncursesw -lfftw3 -lm -lcurl -lreadline
make && make install
##ncmpcpp設定
$ mkdir -p ~/.ncmpcpp
$ cp /usr/local/share/doc/ncmpcpp/config ~/.ncmpcpp/
$ vi ~/.ncmpcpp/config
コメントアウトをはずしていきます
mpd_host = localhost
mpd_port = 6600
$ mpd && ncmpcpp
##ncmpcpp テーマなど