Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@fabiiw05

Windows(Cygwin)でも mpd + ncmpcppを使いたい

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
error
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
error
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時エラーがでます。

error
lametime.c:139:25: エラー: ‘_O_BINARY’ が宣言されていません (この関数内での最初の使用)
     setmode(fileno(fp), _O_BINARY);

frontend内のlametime.cを修正してください。138行目あたりです

lametime.c
#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
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
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に

.bashrc
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の途中エラーが出た場合

error
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
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

コメントアウトをはずしていきます

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
error
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
status.cpp
//追加
#include <sys/types.h>
#include <sys/socket.h>

$ vi src/Makefile
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

コメントアウトをはずしていきます

~/.ncmpcpp/config
mpd_host = localhost
mpd_port = 6600
$ mpd && ncmpcpp

mpd+ncmpcpp.png

ncmpcpp テーマなど

http://dotshare.it/category/mpd/ncmpcpp/
こちらを参考に

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What is going on with this article?