get art, spectrals

This commit is contained in:
Al Beano 2017-05-30 17:29:37 +01:00
parent a273070144
commit 861b114968
2 changed files with 84 additions and 7 deletions

View File

@ -1,4 +1,5 @@
{
"sessionId" : "insert"
"ffmpeg" : "ffmpeg"
"sessionId" : "insert",
"ffmpeg" : "ffmpeg",
"sox" : "sox"
}

View File

@ -12,6 +12,7 @@ import (
"wimp-get/platform"
"os/exec"
"net/http"
"strings"
)
func main() {
@ -51,23 +52,32 @@ func main() {
fmt.Printf("[ %s - %s (%d) ]\n", album.Artist, album.Title, album.Year)
// Determine whether we have more than one disc
multidisc := false
maxdisc := 0
for _, track := range album.Tracks {
if track.Volume > 1 {
multidisc = true
break
if track.Volume > maxdisc {
maxdisc = track.Volume
}
}
var multidisc bool
if maxdisc > 1 {
multidisc = true
}
dirName := album.Artist+" - "+album.Title+" ("+fmt.Sprintf("%d", album.Year)+") [WEB FLAC]"
dirName, e = platform.SanitiseFilename(dirName)
if e != nil {
panic(e)
}
e = os.Mkdir(dirName, os.FileMode(0755))
if e != nil {
panic(e)
}
var firstFile string // we use this later to generate spectrals
// Time to do the ripping!
for _, track := range album.Tracks {
for i, track := range album.Tracks {
num := fmt.Sprintf("%d", track.Number)
if len(num) < 2 {
num = "0"+num
@ -87,6 +97,10 @@ func main() {
panic(e)
}
if i == 0 {
firstFile = filename
}
// create disc dir if necessary
if _, e = os.Stat(path.Dir(filename)); e != nil {
if os.IsNotExist(e) {
@ -127,4 +141,66 @@ func main() {
println(" Done!")
}
// Get art
print("Getting album art...")
resp, e := http.Get(album.CoverUrl)
if e != nil {
panic(e)
}
defer resp.Body.Close()
var out io.Writer
if multidisc {
var outs []io.Writer
for i := 1; i <= maxdisc; i++ {
o, e := os.Create(fmt.Sprintf("%s/Disc %d/cover.jpg", dirName, i))
if e != nil {
panic(e)
}
outs = append(outs, o)
}
out = io.MultiWriter(outs...)
e = nil
} else {
out, e = os.Create(dirName+"/cover.jpg")
}
if e != nil {
panic(e)
}
_, e = io.Copy(out, resp.Body)
if e != nil {
panic(e)
}
println(" Done!")
// Generate Spectrals
var choice string
for !(choice == "y" || choice == "n") {
print("Generate spectrals? [y/n] ")
fmt.Scanln(&choice)
choice = strings.TrimRight(choice, "\n")
}
if choice == "y" {
full := exec.Command(magic["sox"].(string), firstFile, "-n", "remix", "1", "spectrogram",
"-x", "3000", "-y", "513", "-z", "120", "-w", "Kaiser", "-o", "SpecFull.png")
zoom := exec.Command(magic["sox"].(string), firstFile, "-n", "remix", "1", "spectrogram",
"-X", "500", "-y", "1025", "-z", "120", "-w", "Kaiser", "-S", "0:30", "-d", "0:04", "-o", "SpecZoom.png")
e = full.Run()
if e != nil {
println("Error generating full spectral!")
} else {
println("SpecFull.png written")
}
e = zoom.Run()
if e != nil {
println("Error generating zoomed spectral!")
} else {
println("SpecZoom.png written")
}
}
}