summaryrefslogtreecommitdiff
path: root/music.rb
blob: c07b693b382394677d0bd48ea80fa1e34b16c2f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env ruby
require 'json'

dir = ARGV[0]
Dir.chdir dir
input = JSON.load(File.read("config.json"))
input["album"] = File.basename(dir).gsub("_", " ")
input["artist"] ||= "pdp8@pdp8.info"
input["year"] ||= `date +%Y`
input["copyright"] ||= "Creative Commons Attribution-ShareAlike 4.0 International License (http://creativecommons.org/licenses/by-sa/4.0/)"
dest = File.join(ENV["HOME"], "pub", "music", `date +%Y-%m-%d_`.strip + input["album"].gsub(" ", "_"))
puts `mkdir -p '#{dest}'`
cover = File.join(dest, "cover" + File.extname(input["cover"]))
puts `cp -v '#{input["cover"]}' '#{cover}'`
puts `exiv2 rm #{cover}`
puts `exiv2 -M"set Xmp.dc.creator pdp8@pdp8.info" -M"set Xmp.dc.rights This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (http://creativecommons.org/licenses/by-sa/4.0/)." -M"set Xmp.xmpRights.Marked True" #{cover}`
n = 1
input["tracks"].each do |t, s|
  File.open(File.join(dest, "README"), "w+") { |f| f.puts input["text"] }
  flac = File.join(dest, sprintf("%02d-%s.flac", n, t))
  puts `cp -v '#{s}' '#{flac}'`
  File.open("/tmp/meta", "w+") do |tmp|
    tmp.puts "TITLE=#{t}"
    tmp.puts "TRACK=#{n}"
    [
      "artist",
      "year",
      "album",
      "genre",
      "copyright"
    ].each do |tag|
      tmp.puts "#{tag.upcase}=#{input[tag]}"
    end
  end
  puts `metaflac --remove-all --dont-use-padding #{flac}`
  puts `metaflac --import-tags-from=/tmp/meta #{flac}`
  puts `metaflac --import-picture-from=#{cover} #{flac}`
  mp3 = flac.sub("flac", "mp3")
  puts `ffmpeg -i #{flac} -c:v copy -ab 256k -f mp3 #{mp3}`
  n += 1
end