From 3c99c411bf117f99fa58621937d0c219e15f05f3 Mon Sep 17 00:00:00 2001 From: Ales Tsurko Date: Sun, 17 Jun 2018 12:47:28 +0300 Subject: [PATCH] convert to eerie package --- README.md | 45 +++++++++++ build.io | 10 +++ depends | 0 io/TagLib.io | 1 + io/TagLib_extras.io | 13 ++++ package.json | 15 ++++ protos | 1 + samples/sounds/max.mp3 | Bin 0 -> 16063 bytes samples/sounds/max.wav | Bin 0 -> 159632 bytes samples/tag.io | 18 +++++ source/IoTagLib.c | 170 +++++++++++++++++++++++++++++++++++++++++ source/IoTagLib.h | 29 +++++++ 12 files changed, 302 insertions(+) create mode 100644 README.md create mode 100755 build.io create mode 100644 depends create mode 100644 io/TagLib.io create mode 100644 io/TagLib_extras.io create mode 100644 package.json create mode 100755 protos create mode 100644 samples/sounds/max.mp3 create mode 100644 samples/sounds/max.wav create mode 100755 samples/tag.io create mode 100644 source/IoTagLib.c create mode 100644 source/IoTagLib.h diff --git a/README.md b/README.md new file mode 100644 index 0000000..ba9bae0 --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +# TagLib +Used to set meta data tags on the following audio formats: + +``` +ape +flac +mp3 +mpc +mpeg +ogg +``` + +Supports reading and writing the following attributes: + +``` +title +artist +album +year +track +genre +``` + +And reading the attributes: +``` +bitRate +sampleRate +channels +length +``` + +Example use (load and modify a track genre): + +```Io +t := TagLib clone setPath("foo.mp3") load +writeln("genre = ", t genre) +t setGenre("ambient") +t save +``` + +# Installation +`taglib` should be installed and foundable in your system. Then: +``` +eerie install https://github.com/IoLanguage/TagLib.git +``` diff --git a/build.io b/build.io new file mode 100755 index 0000000..1b7662b --- /dev/null +++ b/build.io @@ -0,0 +1,10 @@ +AddonBuilder clone do( + dependsOnLib("tag_c") + dependsOnHeader("taglib/tag_c.h") + + debs atPut("tag_c", "libtagc0-dev") + ebuilds atPut("tag_c", "taglib") + pkgs atPut("tag_c", "taglib") + rpms atPut("tag_c", "taglib-devel") +) + diff --git a/depends b/depends new file mode 100644 index 0000000..e69de29 diff --git a/io/TagLib.io b/io/TagLib.io new file mode 100644 index 0000000..18d4ef3 --- /dev/null +++ b/io/TagLib.io @@ -0,0 +1 @@ +/* TagLib */ diff --git a/io/TagLib_extras.io b/io/TagLib_extras.io new file mode 100644 index 0000000..aa810db --- /dev/null +++ b/io/TagLib_extras.io @@ -0,0 +1,13 @@ +TagLib do( + path ::= nil + title ::= nil + artist ::= nil + album ::= nil + year ::= nil + track ::= nil + genre ::= nil + bitRate ::= nil + sampleRate ::= nil + channels ::= nil + length ::= nil +) \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..a81c58b --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "TagLib", + "version": "0.1", + "description": "Used to set meta data tags on the following audio formats: ape, flac, mp3, mpc, mpeg, ogg.", + "author": "Steve Dekorte", + "website": "http://iolanguage.org/", + "readme": "README.md", + "protos": ["TagLib"], + "dependencies": { + "libs": ["tag_c"], + "headers": ["taglib/tag_c.h"], + "protos": [], + "packages": [] + } +} diff --git a/protos b/protos new file mode 100755 index 0000000..0a6c64c --- /dev/null +++ b/protos @@ -0,0 +1 @@ +TagLib diff --git a/samples/sounds/max.mp3 b/samples/sounds/max.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..30c5d4f28a0052f69899fdbe15a45f3d39af5cc5 GIT binary patch literal 16063 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 +ape +flac +mp3 +mpc +mpeg +ogg + +Supports reading and writing the following attributes: +
title
+artist
+album
+year
+track
+genre 
+
+And reading the attributes: +
+bitRate
+sampleRate
+channels
+length
+
+ +Example use (load and modify a track genre): + +
+t := TagLib clone setPath("foo.mp3") load
+writeln("genre = ", t genre)
+t setGenre("ambient")
+t save
+
+*/ + +//doc TagLib setPath(aSeq) Sets the path to the file. +//doc TagLib path Returns the path to the file. + +#include "IoTagLib.h" +#include "IoState.h" +#include "IoNumber.h" +#include "IoSeq.h" +#include + +#define DATA(self) ((IoTagLibData *)IoObject_dataPointer(self)) +static const char *protoId = "TagLib"; + +IoTag *IoTagLib_newTag(void *state) +{ + IoTag *tag = IoTag_newWithName_("TagLib"); + IoTag_state_(tag, state); + IoTag_cloneFunc_(tag, (IoTagCloneFunc *)IoTagLib_rawClone); + return tag; +} + +IoTagLib *IoTagLib_proto(void *state) +{ + IoObject *self = IoObject_new(state); + IoObject_tag_(self, IoTagLib_newTag(state)); + + IoState_registerProtoWithId_(state, self, protoId); + + { + IoMethodTable methodTable[] = { + {"load", IoTagLib_load}, + {"save", IoTagLib_save}, + {NULL, NULL}, + }; + IoObject_addMethodTable_(self, methodTable); + } + + return self; +} + +IoTagLib *IoTagLib_rawClone(IoTagLib *proto) +{ + IoObject *self = IoObject_rawClonePrimitive(proto); + return self; +} + +IoTagLib *IoTagLib_new(void *state) +{ + IoObject *proto = IoState_protoWithId_(state, protoId); + return IOCLONE(proto); +} + +// ----------------------------------------------------------- + + +IoObject *IoTagLib_load(IoTagLib *self, IoObject *locals, IoMessage *m) +{ + /*doc TagLib load + Loads tag data from the file specified in the path slot. Returns self. + */ + + TagLib_File *file; + TagLib_Tag *tag; + const TagLib_AudioProperties *properties; + IoSeq *path = IoObject_symbolGetSlot_(self, IOSYMBOL("path")); + IOASSERT(path, "missing path slot"); + + taglib_set_strings_unicode(0); + + file = taglib_file_new(CSTRING(path)); + + IOASSERT(file, "unable to open file"); + + tag = (TagLib_Tag *)taglib_file_tag(file); + properties = taglib_file_audioproperties(file); + + IoObject_setSlot_to_(self, IOSYMBOL("title"), IOSYMBOL(taglib_tag_title(tag))); + IoObject_setSlot_to_(self, IOSYMBOL("artist"), IOSYMBOL(taglib_tag_artist(tag))); + IoObject_setSlot_to_(self, IOSYMBOL("album"), IOSYMBOL(taglib_tag_album(tag))); + IoObject_setSlot_to_(self, IOSYMBOL("year"), IONUMBER(taglib_tag_year(tag))); + IoObject_setSlot_to_(self, IOSYMBOL("comment"), IOSYMBOL(taglib_tag_comment(tag))); + IoObject_setSlot_to_(self, IOSYMBOL("track"), IONUMBER(taglib_tag_track(tag))); + IoObject_setSlot_to_(self, IOSYMBOL("genre"), IOSYMBOL(taglib_tag_genre(tag))); + + // audio data - can't write this - it's up to the mp3 encoder + IoObject_setSlot_to_(self, IOSYMBOL("bitRate"), IONUMBER(taglib_audioproperties_bitrate(properties))); + IoObject_setSlot_to_(self, IOSYMBOL("sampleRate"), IONUMBER(taglib_audioproperties_samplerate(properties))); + IoObject_setSlot_to_(self, IOSYMBOL("channels"), IONUMBER(taglib_audioproperties_channels(properties))); + IoObject_setSlot_to_(self, IOSYMBOL("length"), IONUMBER(taglib_audioproperties_length(properties))); + + taglib_tag_free_strings(); + taglib_file_free(file); + + return self; +} + +IoObject *IoTagLib_save(IoTagLib *self, IoObject *locals, IoMessage *m) +{ + /*doc TagLib save + Saves the tag settings and returns self. + */ + + TagLib_File *file; + TagLib_Tag *tag; + //const TagLib_AudioProperties *properties; + IoSeq *path = IoObject_symbolGetSlot_(self, IOSYMBOL("path")); + IOASSERT(path, "missing path slot"); + + taglib_set_strings_unicode(0); + + file = taglib_file_new(CSTRING(path)); + + IOASSERT(file, "unable to open file"); + + tag = (TagLib_Tag *)taglib_file_tag(file); + + taglib_tag_set_title(tag, CSTRING(IoObject_seqGetSlot_(self, IOSYMBOL("title")))); + taglib_tag_set_album(tag, CSTRING(IoObject_seqGetSlot_(self, IOSYMBOL("album")))); + taglib_tag_set_year(tag, (int)IoObject_doubleGetSlot_(self, IOSYMBOL("year"))); + taglib_tag_set_comment(tag, CSTRING(IoObject_seqGetSlot_(self, IOSYMBOL("comment")))); + taglib_tag_set_track(tag, (int)IoObject_doubleGetSlot_(self, IOSYMBOL("track"))); + taglib_tag_set_genre(tag, CSTRING(IoObject_seqGetSlot_(self, IOSYMBOL("genre")))); + + taglib_file_save(file); + + taglib_tag_free_strings(); + taglib_file_free(file); + + return self; + +} + diff --git a/source/IoTagLib.h b/source/IoTagLib.h new file mode 100644 index 0000000..d963e2a --- /dev/null +++ b/source/IoTagLib.h @@ -0,0 +1,29 @@ +/* copyright: Steve Dekorte, 2002 + * All rights reserved. See _BSDLicense.txt. + */ + +#ifndef IoTagLib_DEFINED +#define IoTagLib_DEFINED 1 + +#include "IoObject.h" +#include "IoSeq.h" + +typedef IoObject IoTagLib; + +typedef struct +{ + +} IoTagLibData; + +IoTagLib *IoTagLib_proto(void *state); +IoTagLib *IoTagLib_new(void *state); +IoTagLib *IoTagLib_rawClone(IoTagLib *self); + +void IoTagLib_free(IoTagLib *self); + +// ----------------------------------------------------------- + +IoObject *IoTagLib_load(IoTagLib *self, IoObject *locals, IoMessage *m); +IoObject *IoTagLib_save(IoTagLib *self, IoObject *locals, IoMessage *m); + +#endif