Holophonor 0.1.1

Holophonor 0.1.1

SpongeBobSun维护。



 
依赖项
RxSwift~> 4.0
RxCocoa~> 4.0
 

  • SpongeBobSun

Holophonor

CI Status Version License Platform

logo

用于管理和查询音乐的方便库。用Swift编写。

功能

  • 支持来自iTunes库或本地文件和文件夹的音乐文件。
  • 解析ID3和iTunes格式标签信息,包括-
    • 艺术家名称
    • 专辑名称
    • 流派名称
    • 艺术作品图片,也称为封面图片
    • 持续时间
    • 标题
    • 曲目编号
    • 文件URL
  • 通过名称、艺术家、专辑及其它维度查询库。
  • 使用CoreData进行持久存储。

设计

依赖项

Holophonor使用CoreData作为持久存储,并使用RxSwift作为数据总线。

概念

多媒体项

正如其名所表示的,多媒体项代表一个多媒体项目。

多媒体项可以是一首歌曲或者一个具有代表性的项目,它可以代表专辑、艺术家或流派。

多媒体项将保留歌曲或所代表的多媒体集合的元数据。

多媒体项在iOS的MediaPlayer框架中类似于MPMediaItem

媒体集合

媒体集合多媒体项的集合。

媒体集合包含一个具有此集合元数据的代表性项目。

媒体集合在iOS的MediaPlayer框架中类似于MPMediaItemCollection

代表性项目

代表性项目是多媒体项的一个实例,它包含了一个媒体集合的常见元数据。

代表性项目在iOS的MediaPlayer框架中类似于MPMediaItemCollection.representativeItem

元数据

音乐文件中的ID3或iTunes格式的元数据,通常包含例如艺术家名称、专辑名称、流派名称、轨道持续时间等信息。

可以通过多媒体项实例访问元数据。

以下是元数据的完整字段列表。

  • albumTitle: 专辑的标题。
  • artist: 专辑的艺术家。
  • fileURL: 文件的URL。
  • filePath: 文件的绝对路径,仅适用于本地项目。
  • genre: 流派名称。
  • mediaType: 媒体项的位置 - iTunes或本地文件。
  • trackNumber: 轨道编号。
  • title: 此媒体项的标题。
  • duration: 此媒体项的持续时间。
  • _itemArtwork: 此项目的封面图像。通过getArtworkWithSize访问。
  • persistentID: 此媒体项的持久ID。
  • albumPersistentID: 数据库中专辑的持久ID。
  • genrePersistentID: 数据库中流派名称的持久ID。
  • artistPersistentID: 数据库中艺术家的持久ID。
  • mpPersistentID: MediaPlayer的持久ID,仅适用于iTunes项。

结构 & 关系

安装

Holophonor 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile

pod "Holophonor"

API

初始化

使用 Holophonor.instance 初始化 Holophonor 并获取实例。

在初始化过程中,Holophonor 将其数据库文件保存在 -

  • Documents 文件夹中用于调试构建,您可以通过 iTunes 导出 sqlite 文件。
  • Library 文件夹用于非调试构建。

本地目录

Holophonor 将在初始化期间自动将 Documents 文件夹添加到其扫描路径并搜索本地目录中的音乐。

要在重新扫描库之前添加或删除本地目录,请使用以下功能 之前

addLocalDirectory(dir: String)
removeLocalDirectory(dir: String)

"dir" 是一个目录的绝对路径字符串。确保您有添加的目录的访问权限。

重新扫描库

您需要执行重新扫描操作以完善Holophonor的数据库。

重新扫描操作将首先删除Holophonor的数据库,然后从iTunes和本地目录中搜索音乐文件。

调用rescan函数以重新扫描库。

rescan(_ force: Bool = false, completion: @escaping () -> Void)

您可以通过订阅进度主题来观察重新扫描进度。

observeProgress() -> PublishSubject<Int64> 

同样,您可以在重新扫描启动时接收通知。

observeRescan() -> PublishSubject<Bool>

查询

使用如holophonor.get**By(**: )的查询方法来查询媒体项。

示例

获取库中所有艺术家

let foo = self.holo.getAllArtists()
foo.forEach({ (each) in
    print((each.representativeItem?.artist)!)
})

获取库中所有专辑

let foo = self.holo.getAllAlbums()
foo.forEach({ (item) in
    print(item.representativeItem?.albumTitle)
})

按艺术家获取专辑

let albums = self.holo.getAlbumsBy(artist: "The Killers")
let foo = self.holo.getAllArtists()
let bar = self.holo.getAlbumsBy(artistId: foo.first?.artistPersistentID)

获取专辑中的歌曲

let songs = self.holo.getAlbumsBy(artist: "Iron Maiden")?.first.items ?? []
print(songs)

获取歌曲中的元数据

let songs = self.holo.getAlbumsBy(artist: "Iron Maiden")?.first.items ?? []
songs.forEach({ (each) in
    print(each.title)
    print(each.artist)
    print(each.albumTitle)
    print(each.getArtworkWithSize(size: CGSize(width: 200, height: 200)) ?? #imageLiteral(resourceName: "ic_album"))
    print(each.fileURL)
    print(each.genre)
    print(each.duration)
    print(each.trackNumber)
})

运行示例项目

  • 克隆仓库
  • 从示例目录运行 bundle install &&(bundle exec pod install)
  • 打开 Holophonor.xcworkspace
  • 点击运行按钮

使用此库的应用

关于这个名字

来自 Futurama 维基

Holophonor 是 30 世纪的一种乐器,它就像是双簧管和全息投影仪的结合体。

...

根据《失落寄生体》的评论,Holophorer 是基于艾萨克·阿西莫夫的 1951-1953 年出版的《基地》三部曲中的 Visa-Sonor。1968 年,塞缪尔·R·迪兰尼在其小说 'Nova' 中创造了一个类似的概念,即 Sensory Syrinx。

作者

sponegbobsun, [email protected]

许可

Holophonor 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。