iOS 11之前的音频套件导出歌曲
请注意,这不是重复的,因为在那篇文章中只给出了使用什么方法,但没有关于如何使用它的示例 因此,我尽可能深入研究了iOS 11之前的音频套件导出歌曲,ios,swift,xcode,avfoundation,audiokit,Ios,Swift,Xcode,Avfoundation,Audiokit,请注意,这不是重复的,因为在那篇文章中只给出了使用什么方法,但没有关于如何使用它的示例 因此,我尽可能深入研究了AKOfflineRenderNode,并查看了我能找到的所有示例。然而,我的代码似乎从未在iOS 10.3.1设备(以及其他iOS 10版本)上正常工作,因为结果总是无声的。我试图效仿其他SO帖子中提供的例子,但没有成功。我试图在SongProcessor中遵循这一点,但它使用了较旧版本的Swift,我甚至无法编译它。尝试SongProcessor使用AKOfflineRenderN
AKOfflineRenderNode
,并查看了我能找到的所有示例。然而,我的代码似乎从未在iOS 10.3.1设备(以及其他iOS 10版本)上正常工作,因为结果总是无声的。我试图效仿其他SO帖子中提供的例子,但没有成功。我试图在SongProcessor中遵循这一点,但它使用了较旧版本的Swift,我甚至无法编译它。尝试SongProcessor使用AKOfflineRenderNode的方式也没有帮助。结果总是一声不响
我创建了一个测试程序来测试这一点。因为我没有用于测试的音频文件,所以无法将其上载到GitHub。在编译到iOS 10.3.1模拟器之前,请将名为“Test”的音频文件添加到项目中。(如果您的文件不在m4a中,请记住在我初始化的代码中更改文件类型AKPlayer
)
如果您不想下载并运行该示例,那么关键部分如下:
@IBAction func export() {
// url, player, offlineRenderer and others are predefined and connected as player >> aPitchShifter >> offlineRenderer
// AudioKit.output is already offlineRenderer
offlineRenderer.internalRenderEnabled = false
try! AudioKit.start()
// I also tried using AKAudioPlayer instead of AKPlayer
// Also tried getting time in these ways:
// AVAudioTime.secondsToAudioTime(hostTime: 0, time: 0)
// player.audioTime(at: 0)
// And for hostTime I've tried 0 as well as mach_absolute_time()
// None worked
let time = AVAudioTime(sampleTime: 0, atRate: offlineRenderer.avAudioNode.inputFormat(forBus: 0).sampleRate)
player.play(at: time)
try! offlineRenderer.renderToURL(url, duration: player.duration)
player.stop()
player.disconnectOutput()
offlineRenderer.internalRenderEnabled = true
try? AudioKit.stop()
}
将演示项目发布到github上,以便其他人可以测试它,怎么样?要让SO社区阅读代码并为您找到答案,需要做很多工作。我已经编辑了这个问题,并在GitHub上添加了一个示例项目。谢谢你的建议@奥雷利乌斯普罗查斯卡酒店