package drogatkin.util.mediaio; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.FileFilter; import org.kc7bfi.jflac.FLACDecoder; import org.kc7bfi.jflac.io.RandomFileInputStream; import org.kc7bfi.jflac.metadata.Metadata; import org.kc7bfi.jflac.metadata.Picture; import org.kc7bfi.jflac.metadata.StreamInfo; import org.kc7bfi.jflac.metadata.VorbisComment; import org.kc7bfi.jflac.metadata.SeekTable; public class FlacExplorer { public static void main(String ...args) { System.out.printf("FLAC explorer %s%n", " version 1.0"); if (args.length == 0) { System.out.printf("Please use with file[ file ...] arguments%n"); } for(String s:args) { processRequest(s); } } private static void processRequest(String s) { File f = new File(s); if (f.exists()) { if (f.isDirectory()) processDirectory(f); else report(f); } } private static void processDirectory(File f) { System.out.printf("->%s%n", f); f.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { if (pathname.isDirectory()) processDirectory(pathname); else if (pathname.getName().endsWith(".flac")) report(pathname); return false; }}); } static void report(File f) { if (f.getName().endsWith(".flac") == false) return; System.out.printf("Exploring %s%n", f.getName()); try (InputStream inputStream = new RandomFileInputStream(f)) { FLACDecoder decoder = new FLACDecoder(inputStream); for (Metadata md: decoder.readMetadata()) { if (md instanceof SeekTable) { SeekTable st = (SeekTable)md; System.out.printf("Found seek table of %d entries%n", st.numberOfPoints()); } else if (md instanceof Picture) { Picture pic = (Picture)md; System.out.printf("Found picture of %s%n", pic.toString()); } } } catch (IOException e) { e.printStackTrace(); } } }