iOS:对音乐库内容应用音频修改

iOS: Apply audio modifications to Music library content

我正在开发一个 iOS/Flutter 应用程序,我正在尝试研究是否可以通过音频修改来播放 iOS 上音乐库中的音频(例如均衡设置)已应用。

我似乎在寻找可以与 MPMusicPlayerController, since that appears to be the strategy for playing local audio from the user's iOS Music library. I can find examples of applying EQ to audio on iOS (e. g. using AVAudioUnitEQ and AVAudioEngine: SO link, tutorial) 一起使用的解决方案,但我找不到任何资源来帮助我了解是否有可能弥合这些资源之间的差距。

Flutter 特定上下文:

有些 Flutter 插件提供了我正在寻找的一些功能,但似乎无法协同工作。比如just_audio plugin has a robust set of features for modifying audio, but does not work with the local Music application on iOS/MPMusicPlayerController. Other plugins that do work with MPMusicPlayerController, like playify,没有能力modify/transform的音频。

即使我正在使用 Flutter,iOS 方面的任何一般性建议也会非常有帮助。我很感激有更多知识的人可以与我分享任何见解!

在这里为未来的人更新我自己的答案:看起来我唯一的前进道路(目前)是直接进入 AVAudioEngine。这是对我有用的粗略 POC:

var audioPlayer = AVAudioPlayerNode()
var audioEngine = AVAudioEngine()
var eq = AVAudioUnitEQ()

let mediaItemCollection: [MPMediaItem] = MPMediaQuery.songs().items!
let song = mediaItemCollection[0]
    
do {
  let file = try AVAudioFile(forReading: song.assetURL!)
  audioEngine.attach(audioPlayer)
  audioEngine.attach(eq)
  audioEngine.connect(audioPlayer, to: eq, format: nil)
  audioEngine.connect(eq, to: audioEngine.outputNode, format: file.processingFormat)
  audioPlayer.scheduleFile(file, at: nil)
  try audioEngine.start()
  audioPlayer.play()
} catch {
  // catch
}

对我来说最棘手的部分是如何将“音乐 library/MPMediaItem”世界与“AVAudioEngine”世界联系起来——这只是 AVAudioFile(forReading: song.assetURL!)