我正在实现一个 ruby on rails 应用程序,它从 Dropbox 文件夹下载歌曲,然后对它们执行一些操作,例如提取一些元标记。现在,我正在使用属于同一专辑的 10 个 mp3,因此它们具有相同的编码等。但是,当尝试使用taglib-ruby读取元标记时,10 个文件中的 3 个会抛出错误,说:
TagLib: FileRef::tag() - Called without a valid file.
TagLib: FileRef::audioProperties() - Called without a valid file.
我使用左侧提供的代码作为指导,导致:
def read_metatags
TagLib::FileRef.open(self.local_path) do |fileref|
unless fileref.null?
logger.info "Reading tags"
tag = fileref.tag
self.title = tag.title
self.artist = tag.artist
properties = fileref.audio_properties
self.length = properties.length
end
end
self.save!
end
首先我认为下载的文件可能已损坏,但检查 nautilus 中的元数据显示结果正常,并且节奏盒也可以播放它。我想使用 taglib-ruby 的基本 API 而不是特定格式的 API,因为我只需要检索艺术家和标题,但需要能够从各种格式的文件中获取它。
有谁知道如何解决这个问题?考虑到我是这个话题的新手,我可能错过了一些非常明显的东西。
编辑:考虑到robinst 的评论,这是ls -l
各个文件的列表:
-rw-rw-r-- 1 user user 3710598 Jun 3 15:56 01 - Paradise.mp3
-rw-rw-r-- 1 user user 3731496 Jun 3 15:56 02 - Weirdo.mp3
-rw-rw-r-- 1 user user 3620319 Jun 3 15:56 03 - As It Is When It Was.mp3
-rw-rw-r-- 1 user user 3645815 Jun 3 15:56 04 - Broken Promise.mp3
-rw-rw-r-- 1 user user 3954295 Jun 3 15:56 05 - Way Of Life.mp3
-rw-rw-r-- 1 user user 4199193 Jun 3 15:57 06 - Bizarre Love Triangle.mp3
-rw-rw-r-- 1 user user 5002092 Jun 3 15:57 07 - All Day Long.mp3
-rw-rw-r-- 1 user user 3595686 Jun 3 15:57 08 - Angel Dust.mp3
-rw-rw-r-- 1 user user 4307888 Jun 3 15:57 09 - Every Little Counts.mp3
-rw-rw-r-- 1 user user 6313648 Jun 3 15:57 10 - State Of The Nation.mp3