summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSigrid <ftrvxmtrx@gmail.com>2021-04-24 16:07:24 +0200
committerSigrid <ftrvxmtrx@gmail.com>2021-04-24 16:07:24 +0200
commitb0e2ea4e5ffaec335c2a61ee98d2c5d3f1052569 (patch)
tree778bfbf13a1e58bb1a252e20fb3f3052aa181d53
parent83277da30948858da8203961d77330b7c05dc2f4 (diff)
downloadplan9front-b0e2ea4e5ffaec335c2a61ee98d2c5d3f1052569.tar.xz
libtags, zuke: add *.mod support (thanks kemal)
-rw-r--r--sys/src/cmd/audio/libtags/mkfile1
-rw-r--r--sys/src/cmd/audio/libtags/mod.c46
-rw-r--r--sys/src/cmd/audio/libtags/tags.c2
-rw-r--r--sys/src/cmd/audio/libtags/tags.h1
-rw-r--r--sys/src/cmd/audio/zuke/mkplist.c6
5 files changed, 55 insertions, 1 deletions
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);