【发布时间】:2020-09-26 20:55:44
【问题描述】:
有没有人成功编写过本地 XCode/Swift 代码来实现 ReplayGain 或类似功能,或者知道我在哪里可以找到一些示例代码/教程?
我正在尝试将我的 python 代码转换为原生 macOS 应用程序的 XCode。我在 python 中使用 pydub 库,并通过 apply_gain 方法应用增益调整以将我的音频文件标准化为指定的 dBFS,但我已经搜索了高和低的示例代码,例如如何在 XCode 中执行此操作,我来了几乎两手空空。我正在使用 Catalina 10.15.4 和 XCode 11.5。
我找到了下面的代码here,并对其进行了修改以删除均衡器频段并添加了 globalGain 选项。但是,我现在需要弄清楚如何分析文件以确定峰值分贝/峰值增益并相应地调整 globalGain 以确保每个 mp3 的音量几乎相同,而不必一直摆弄音量。
import AVFoundation
var audioEngine: AVAudioEngine = AVAudioEngine()
var equalizer: AVAudioUnitEQ!
var audioPlayerNode: AVAudioPlayerNode = AVAudioPlayerNode()
var audioFile: AVAudioFile!
// in viewDidLoad():
equalizer = AVAudioUnitEQ(numberOfBands: 0)
audioEngine.attach(audioPlayerNode)
audioEngine.attach(equalizer)
let bands = equalizer.bands
//let globalGain = equalizer.globalGain
let freqs = [60, 230, 910, 4000, 14000]
audioEngine.connect(audioPlayerNode, to: equalizer, format: nil)
audioEngine.connect(equalizer, to: audioEngine.outputNode, format: nil)
equalizer.globalGain = 12
var filePath = "some_music_file.mp3"
do {
let filePathURL = NSURL.fileURL(withPath: filePath)
audioFile = try AVAudioFile(forReading: filePathURL)
audioEngine.prepare()
try audioEngine.start()
audioPlayerNode.scheduleFile(audioFile, at: nil, completionHandler: nil)
audioPlayerNode.play()
} catch {
print ("An error occured.")
}
【问题讨论】:
标签: xcode avfoundation