package filetools;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.parser.audio.AudioParser;
import org.apache.tika.parser.mp3.Mp3Parser;
import org.apache.tika.parser.mp4.MP4Parser;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MetadataExtraction {
public static PrintWriter metadataOutput;
public static Metadata getMetadatafromMP3(InputStream inputfile)
throws IOException, SAXException, TikaException {
DefaultHandler handler = new DefaultHandler();
Metadata metadata = new Metadata();
Parser parser = new Mp3Parser();
ParseContext parseCtx = new ParseContext();
parser.parse(inputfile, handler, metadata, parseCtx);
return metadata;
}
public static Metadata getMetadatafromMP4(InputStream inputfile) throws IOException, SAXException, TikaException {
DefaultHandler handler = new DefaultHandler();
Metadata metadata = new Metadata();
Parser parser = new MP4Parser();
ParseContext parseCtx = new ParseContext();
parser.parse(inputfile, handler, metadata, parseCtx);
return metadata;
}
public static Metadata getMetadatafromAudio(InputStream inputfile) throws IOException, SAXException, TikaException {
DefaultHandler handler = new DefaultHandler();
Metadata metadata = new Metadata();
Parser parser = new AudioParser();
ParseContext parseCtx = new ParseContext();
parser.parse(inputfile, handler, metadata, parseCtx);
return metadata;
}
public static void outputsMetadata(Metadata metadata) throws IOException {
String tracktitle = metadata.get("title");
String artist = metadata.get("xmpDM:artist");
String compression = metadata.get("xmpDM:audioCompressor");
String durationStr = metadata.get("xmpDM:duration");
String sampleRateStr = metadata.get("xmpDM:audioSampleRate");
String channelStr = metadata.get("channels");
if (durationStr != null) {
float duration = Float.parseFloat(durationStr);
}
if (sampleRateStr != null) {
float samplerate = Float.parseFloat(sampleRateStr);
}
if (channelStr != null) {
int channel = Integer.parseInt(channelStr);
}
// TODO: Hardcoded only for testing purposes
metadataOutput = new PrintWriter(new FileWriter(
"D:\\MetadataFolder\\audiotest.txt"));
metadataOutput.println("Titel: " + tracktitle);
metadataOutput.println("Verfasser: " + artist);
metadataOutput.println("Dauer " + durationStr);
metadataOutput.println("Sample-Rate: " + sampleRateStr);
metadataOutput.println("Channel (1 for mono, 2 for stereo): "
+ channelStr);
metadataOutput.println("Audio Compression: " + compression);
metadataOutput.println();
metadataOutput.println("No. of Metadata Elements: " + metadata.size());
String[] metadataNames = metadata.names();
for (String name : metadataNames) {
metadataOutput.println(name + ": " + metadata.get(name));
}
}
}