From b0e2ea4e5ffaec335c2a61ee98d2c5d3f1052569 Mon Sep 17 00:00:00 2001 From: Sigrid Date: Sat, 24 Apr 2021 16:07:24 +0200 Subject: [PATCH] libtags, zuke: add *.mod support (thanks kemal) --- sys/src/cmd/audio/libtags/mkfile | 1 + sys/src/cmd/audio/libtags/mod.c | 46 ++++++++++++++++++++++++++++++++ sys/src/cmd/audio/libtags/tags.c | 2 ++ sys/src/cmd/audio/libtags/tags.h | 1 + sys/src/cmd/audio/zuke/mkplist.c | 6 ++++- 5 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 sys/src/cmd/audio/libtags/mod.c diff --git a/sys/src/cmd/audio/libtags/mkfile b/sys/src/cmd/audio/libtags/mkfile index fbf4a6004..e247e5f02 100644 --- a/sys/src/cmd/audio/libtags/mkfile +++ b/sys/src/cmd/audio/libtags/mkfile @@ -9,6 +9,7 @@ OFILES=\ id3v2.$O\ it.$O\ m4a.$O\ + mod.$O\ opus.$O\ s3m.$O\ tags.$O\ diff --git a/sys/src/cmd/audio/libtags/mod.c b/sys/src/cmd/audio/libtags/mod.c new file mode 100644 index 000000000..d4d6b56d3 --- /dev/null +++ b/sys/src/cmd/audio/libtags/mod.c @@ -0,0 +1,46 @@ +#include "tagspriv.h" + +/* insane. */ +static char* variants[] = +{ + "M.K.", + "M!K!", + "M&K!", + "N.T.", + "NSMS", + "FLT4", + "M\0\0\0", + "8\0\0\0", + "FEST", + "FLT8", + "CD81", + "OCTA", + "OKTA", + "16CN", + "32CN", + nil, +}; + +int +tagmod(Tagctx *ctx) +{ + char d[20+1]; + int i; + + if (ctx->seek(ctx, 1080, 0) != 1080) + return -1; + if (ctx->read(ctx, d, 4) != 4) + return -1; + for (i = 0; ; i++) + if (variants[i] == nil) + return -1; + else if (memcmp(d, variants[i], 4) == 0) + break; + memset(d, 0, sizeof d); + if (ctx->seek(ctx, 0, 0) != 0) + return -1; + if (ctx->read(ctx, d, 20) != 20) + return -1; + txtcb(ctx, Ttitle, "", d); + return 0; +} diff --git a/sys/src/cmd/audio/libtags/tags.c b/sys/src/cmd/audio/libtags/tags.c index da8121609..e6fa85962 100644 --- a/sys/src/cmd/audio/libtags/tags.c +++ b/sys/src/cmd/audio/libtags/tags.c @@ -18,6 +18,7 @@ extern int tags3m(Tagctx *ctx); extern int tagvorbis(Tagctx *ctx); extern int tagwav(Tagctx *ctx); extern int tagxm(Tagctx *ctx); +extern int tagmod(Tagctx *ctx); static const Getter g[] = { @@ -31,6 +32,7 @@ static const Getter g[] = {tagit, Fit}, {tagxm, Fxm}, {tags3m, Fs3m}, + {tagmod, Fmod}, }; void diff --git a/sys/src/cmd/audio/libtags/tags.h b/sys/src/cmd/audio/libtags/tags.h index b8ed7c5f1..0c58220a1 100644 --- a/sys/src/cmd/audio/libtags/tags.h +++ b/sys/src/cmd/audio/libtags/tags.h @@ -33,6 +33,7 @@ enum Fit, Fxm, Fs3m, + Fmod, Fmax, }; diff --git a/sys/src/cmd/audio/zuke/mkplist.c b/sys/src/cmd/audio/zuke/mkplist.c index dd5b77bc3..a8988da22 100644 --- a/sys/src/cmd/audio/zuke/mkplist.c +++ b/sys/src/cmd/audio/zuke/mkplist.c @@ -31,6 +31,7 @@ static char *fmts[] = [Fit] = "mod", [Fxm] = "mod", [Fs3m] = "mod", + [Fmod] = "mod", }; static Meta * @@ -196,7 +197,10 @@ scanfile(char *path) } if(ctx.duration == 0){ - if(ctx.format == Fit || ctx.format == Fxm || ctx.format == Fs3m) + if(ctx.format == Fit || + ctx.format == Fxm || + ctx.format == Fs3m || + ctx.format == Fmod) ctx.duration = modduration(path); if(ctx.duration == 0) fprint(2, "%s: no duration\n", path);