Skip to content

Instantly share code, notes, and snippets.

View kgilmer's full-sized avatar

Ken Gilmer kgilmer

View GitHub Profile
@kgilmer
kgilmer / Picasso mirror transform
Created April 8, 2015 05:52
A picasso transform that creates a mirror (flip X) image.
private final Transformation mirror = new Transformation() {
@Override
public Bitmap transform(Bitmap source) {
Matrix m = new Matrix();
m.preScale(-1, 1);
Bitmap src = source;
Bitmap dst = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), m, false);
dst.setDensity(DisplayMetrics.DENSITY_DEFAULT);
src.recycle();
return dst;
@kgilmer
kgilmer / music.json
Created April 7, 2018 22:23
Music player sample JSON
{
"music": [
{
"title": "Jazz in Paris",
"album": "Jazz & Blues",
"artist": "Media Right Productions",
"genre": "Jazz & Blues",
"source": "Jazz_In_Paris.mp3",
"image": "album_art.jpg",
"trackNumber": 1,
@kgilmer
kgilmer / Generator.kt
Created April 9, 2018 13:44
Visit each child in a directory.
import java.io.File
fun main(args: Array<String>) {
File(args[0])
.walk()
.forEach { sourceFile ->
println("Reading $sourceFile")
}
}
fun main(args: Array<String>) {
File(args[0])
.walk()
.filter { it.isFile && it.extension.equals("mp3", ignoreCase = true) }
.forEach { sourceFile ->
println("Reading $sourceFile")
}
}
import org.jaudiotagger.audio.AudioFileIO
import java.io.File
fun main(args: Array<String>) {
File(args[0])
.walk()
.filter { it.isFile && it.extension.equals("mp3", ignoreCase = true) }
.forEach { sourceFile ->
val audioFile = AudioFileIO.read(sourceFile)
println("Reading $audioFile")
fun extractMetadataOrNull(audioFile: AudioFile): JsonObject? {
val js = JsonObject()
with(audioFile.tag ?: return null) {
js["title"] = getFirst(FieldKey.TITLE) ?: return null
js["artist"] = getFirst(FieldKey.ARTIST) ?: getFirst(FieldKey.ALBUM_ARTIST) ?: return null
js["album"] = getFirst(FieldKey.ALBUM) ?: return null
js["genre"] = if (getFirst(FieldKey.GENRE).isNullOrBlank()) "unknown" else getFirst(FieldKey.GENRE)
js["source"] = audioFile.file.absolutePath
js["image"] = ""
fun readAudioFileOrNull(file: File): AudioFile? =
try { AudioFileIO.read(file) } catch (e: Exception) { null }
fun main(args: Array<String>) {
File(args[0])
.walk()
.mapNotNull { file ->
readAudioFileOrNull(file)
}
.mapNotNull { audioFile ->
extractMetadataOrNull(audioFile)
}
.forEach { println(it) }
val manifestWriter = System.out.writer()
manifestWriter.use {
sourceDirectory
.walk()
.filter {
it.isFile && it.extension.equals("mp3", ignoreCase = true)
}
.mapNotNull { file ->
readAudioFileOrNull(file)
val sourceDirectory = File(args.getOrNull(0) ?: System.getProperty("user.dir"))