经过数周的努力,我试图自己解决这个问题。我已经设法为这个确切的问题找到了一个非常hacky的解决方案。
不过,您不会喜欢它,请注意。
即使音频是从 Beats 收音机流式传输的,为了获得当前播放曲目,您将不得不考虑 OCR 方法(截屏,将图像转换为文本)
以下 Ruby 代码将帮助您开始使用此解决方案。
它将检查当前轨道,如果该artist
字段为空白,(这是流式传输轨道时的情况),则属于 OCR 方法。
require 'json'
require 'rtesseract'
class CurrentTrack
def self.check
js_command = %Q{var itunes = Application("iTunes");
var currentTrack = itunes.currentTrack;
JSON.stringify({
window_bounds: itunes.windows[0].bounds(),
name: currentTrack.name(),
artist: currentTrack.artist(),
position: itunes.playerPosition()
})
}
command = "osascript -l JavaScript -e '#{js_command}'"
result = `#{command}`
json = JSON.parse(result, symbolize_names: true)
json[:position] = json[:position].to_i
json[:cue] = Time.at(json[:position]).utc.strftime('%H:%M:%S')
if json[:artist] == ''
sc_command = %Q{screencapture -R #{json[:window_bounds][:x]},#{json[:window_bounds][:y].to_i + 30},#{json[:window_bounds][:width]},#{json[:window_bounds][:height]} capture.png}
`#{sc_command}`
image = RTesseract.new("capture.png", processor: 'none')
ocr = image.to_s.split("\n") # Getting the value
unless ocr.first == 'Soulection'
json[:name] = ocr.first
json[:artist] = ocr[1].split(' — ').first
end
end
json.delete :window_bounds
json
end
end
您需要安装rtesseract才能使其正常工作。
需要注意的是,此脚本要求 iTunes 迷你播放器窗口在您桌面的某处可见。