【发布时间】:2021-04-28 17:12:01
【问题描述】:
我目前有一个用于音乐可视化的 macOS 应用程序,使用 AVAudioEngine 读取音乐文件。它包含以下 swift 代码(为清楚起见,省略了无关代码):
import AVFoundation
class AudioManager: ObservableObject {
static let audioManager = AudioManager()
var selectedSongURL = Bundle.main.url(forResource: "music", withExtension: "mp3"
var engine : AVAudioEngine!
engine = AVAudioEngine()
let player = AVAudioPlayerNode()
do {
let audioFile = try AVAudioFile(forReading: selectedSongURL!)
player.scheduleFile(audioFile, at: nil, completionHandler: nil)
}
player.play()
}
该应用包含其他代码,允许用户将 selectedSongURL 更改为不同的文件。
我想将我的应用更改为使用AVCaptureSession 而不是AVAudioEngine,以利用它提供的更精细的粒度。有许多代码示例展示了如何将AVCaptureSession 与麦克风输入一起使用。
但是,我找不到任何代码或教程,说明如何通过读取音乐文件的输入来使用它(类似于上面的代码)。
我不确定这是否可能。是否可以?如果是这样,我将如何做到这一点?
【问题讨论】:
-
如果我解释为什么我想从使用 AVAudioEngine 切换到 AVCaptureSession 作为我的音乐可视化应用程序的音频捕获部分,也许会有所帮助:使用 AVAudioEngine 的 Tap-on-bus 方法,最精细的音频我可以获得的采样(在运行 macOS Big Sur 的 2017 iMac 上)是每 0.1 秒 4,410 个采样。另一方面,使用带有麦克风输入的 AVCaptureSession,对应的数字是每 0.0116 秒 512 个样本。这提供了更低的延迟和更快的刷新率。要是我能想出一种方法让 AVCaptureSession 读取音频文件就好了……
标签: swift macos audio avcapturesession avaudioengine