moc不支持ape,但是通过patch可以支持。
原帖是moc论坛的Planner发的,http://moc.daper.net/node/110。同时使用了archlinux官方的patch,支持wma,见http://repos.archlinux.org/wsvn/packages/moc/repos/extra-i686/。最终的patch如下
diff -Naur moc-2.4.4/decoder_plugins/ffmpeg/ffmpeg.c moc-2.4.4-new/decoder_plugins/ffmpeg/ffmpeg.c
--- moc-1.4.4/decoder_plugins/ffmpeg/ffmpeg.c 2008-04-09 14:44:00.000000000 -0400
+++ moc-2.4.4-new/decoder_plugins/ffmpeg/ffmpeg.c 2009-03-07 01:31:48.000000000 -0500
@@ -222,8 +222,8 @@
{
struct ffmpeg_data *data = (struct ffmpeg_data *)prv_data;
int ret;
- int data_size;
char avbuf[AVCODEC_MAX_AUDIO_FRAME_SIZE * sizeof(int16_t)];
+ int data_size = sizeof(avbuf);
AVPacket pkt;
uint8_t *pkt_data;
int pkt_size = 0;
@@ -270,7 +270,7 @@
while (pkt_size) {
int len;
- len = avcodec_decode_audio (data->enc, (int16_t *)avbuf,
+ len = avcodec_decode_audio2 (data->enc, (int16_t *)avbuf,
&data_size, pkt_data, pkt_size);
debug ("Decoded %dB", data_size);
@@ -345,6 +345,8 @@
strcpy (buf, "MP4");
else if (!strcasecmp(ext, "m4a"))
strcpy (buf, "M4A");
+ else if (!strcasecmp(ext, "ape"))
+ strcpy (buf, "APE");
}
static int ffmpeg_our_format_ext (const char *ext)
@@ -353,7 +355,8 @@
|| !strcasecmp(ext, "ra")
|| !strcasecmp(ext, "m4a")
|| !strcasecmp(ext, "mp4")
- || !strcasecmp(ext, "aac");
+ || !strcasecmp(ext, "aac")
+ || !strcasecmp(ext, "ape");
}
static void ffmpeg_get_error (void *prv_data, struct decoder_error *error)
同时也做了一个arch的pkgbuild,基本上只是改了官方的
pkgname=moc-ape
pkgver=2.4.4
pkgrel=3
pkgdesc="An ncurses console audio player with support for the mp3, ogg, and wave formats"
arch=('i686' 'x86_64')
url="http://moc.daper.net/"
license=('GPL')
depends=('libmad' 'libid3tag' 'jack-audio-connection-kit' 'curl>=7.16.2' 'libsamplerate' 'libtool')
makedepends=('speex' 'ffmpeg' 'taglib' 'libmpcdec')
conflicts=('moc' 'moc-svn')
optdepends=('speex: for using the speex plugin' 'ffmpeg: for using the ffmpeg plugin' 'taglib and libmpcdec: for using the musepack plugin')
options=('!libtool')
source=(ftp://ftp.daper.net/pub/soft/moc/stable/moc-${pkgver}.tar.bz2 moc-2.4.4-ffmpeg.diff)
md5sums=('647c770a5542a4ae5437386807a89796' '631218fcf8285fdd63a2530af28f8659')
build() {
cd ${srcdir}/moc-${pkgver}
patch -p1 < ../moc-2.4.4-ffmpeg.diff || return 1
sed -i 's|ffmpeg/avformat.h|libavformat/avformat.h|' decoder_plugins/ffmpeg/ffmpeg.c || return 1
./configure --prefix=/usr --without-rcc || return 1
make || return 1
make DESTDIR=${pkgdir} install || return 1
}
但是放到aur中的有地方写错了,但是又不让我修改,所以等有新版的时候估计就能改了,那时候版本号变了就好了。
Update: 2012-03-22
我已经没有在用moc,而moc也两年多没更新。aur上的包我orphan了,这个patch也不知道还有没有用。