Swift 包装器,用于 Chromaprint,AcoustID 项目的音频指纹库
添加 https://github.com/wallisch/ChromaSwift
作为 SwiftPM 依赖项,并 import ChromaSwift
通过 URL 生成包含音轨文件的指纹。这也适用于视频文件(例如音乐视频)
let fileURL = URL(fileURLWithPath: "Test.mp3")
let testFingerprint = try AudioFingerprint(from: fileURL)
可选地,指定 AudioFingerprintAlgorithm(默认值:.test2
)
您可以使用 .test4
移除前导静音
警告:只有 .test2
指纹可以在 AcoustID 服务中查找
let testFingerprint = try AudioFingerprint(from: fileURL, algorithm: .test4)
以及/或者要采样的最大持续时间(秒)(默认值:120
)。传递 nil
以采样整个文件
let testFingerprint = try AudioFingerprint(from: fileURL, maxSampleDuration: 10.0)
获取用于生成指纹的算法
let algorithm = testFingerprint.algorithm // AudioFingerprint.Algorithm.test2
获取整个文件的持续时间(秒)
let duration = testFingerprint.duration // 46.0
以原始形式获取指纹,作为无符号 32 位整数数组
let rawFingerprint = testFingerprint.raw // [4107342261, 4107276695, ... ]
以 Base64 表示形式获取指纹
let base64FingerprintString = testFingerprint.base64 // "AQABYJGikFSmJBCPijt6Hq..."
以二进制字符串形式获取指纹哈希值
let binaryHashString = testFingerprint.hash // "01110100010011101010100110100100"
从其原始形式、算法和整个文件持续时间实例化指纹对象
let newFingerprint = AudioFingerprint(from: rawFingerprint, algorithm: .test2, duration: duration)
从其 Base64 表示形式和整个文件持续时间实例化指纹对象
let newFingerprint = try AudioFingerprint(from: base64FingerprintString, duration: duration)
获取与其他指纹对象的相似度 (0.0
到 1.0
)
let similarity = try newFingerprint.similarity(to: testFingerprint) // 1.0
可选地,忽略指纹之间大于 20% 的样本持续时间差异(默认值:false
)
如果您想检查例如较长的混音是否包含特定曲目,这将非常有用
警告:当与为非常短的持续时间采样的指纹进行比较时,这可能会导致错误的结果
try newFingerprint.similarity(to: testFingerprint, ignoreSampleDuration: true) // 1.0
您也可以获取与指纹哈希值的相似度
警告:这不如比较指纹对象准确,尤其是在算法不匹配的情况下
try newFingerprint.similarity(to: binaryHashString) // 1.0
使用您的 AcoustID API 密钥初始化服务
let acoustID = AcoustID(apiKey: "zfkYWDrOqAk")
可选地,指定超时时间(秒)(默认值:3.0
)
let acoustID = AcoustID(apiKey: "zfkYWDrOqAk", timeout: 10.0)
查找 AudioFingerprint 对象
do {
let results = try await acoustID.lookup(newFingerprint)
// [AcoustID.APIResult]
for result in results {
// Matching score (0.0 to 1.0)
let score = result.score
for recording in result.recordings! {
// Song title
let title = recording.title
// Song artists
let artists = recording.artists
// Song release groups (Albums, Singles, etc.)
let releasegroups = recording.releasegroups
}
}
} catch {
// AcoustID.Error
}
AudioFingerprint
类抛出 AudioDecoder.Error
或 AudioFingerprint.Error
错误,AcoustID
类抛出 AcoustID.Error
错误。
您还可以 import CChromaprint
以直接与 Chromaprint C 接口交互。请参阅官方文档以获取更多信息。
注意:为了避免许可问题,CChromaprint 禁用了内部输入重采样,因此需要指纹识别器的输入音频已经处于配置的指纹采样率。
此软件包根据 MIT 许可证分发,有关详细信息,请参阅 LICENSE 文件。
chromaprint 项目默认包含来自 ffmpeg 库的重采样代码,该库在 LGPL 2.1 下获得许可。然而,ChromaSwift 使用 Apple 的 AVFoundation 进行重采样,并从构建中移除了所有 ffmpeg 代码,使软件包完全符合 MIT 规范。