我可以离线渲染具有动态速度的音频文件吗?

Posted

技术标签:

【中文标题】我可以离线渲染具有动态速度的音频文件吗?【英文标题】:Can I offline render an audio file with dynamic tempo? 【发布时间】:2018-09-07 00:02:54 【问题描述】:

我正在开发一个卡拉 OK 应用程序。 我尝试提供一个有趣的功能。 我可以使用AudioKit 离线渲染具有基于时间的动态速度值的音频文件吗? 点击下图,很快就能搞定。

image example


我在这里发布了一些代码。

// I want to change the tempo for bgm audio file dynamically
self.timePitch = AKTimePitch(self.bgmPlayer)
// here I set the initialized rate value to time Pitch
self.timePitch.rate = 1.0
// support ios10+
self.out = AKOfflineRenderNode()
self.timePitch.connect(to: self.out)
// make the renderer as AudioKit.out
AudioKit.output = self.out
do 
    try AudioKit.start()
 catch 
    debugPrint(error.localizedDescription)

let url = URL(fileURLWithPath: NSTemporaryDirectory() + "output.caf")
// get total duration
let duration = self.duration()
DispatchQueue.global(qos: .background).async 
    do 
        let avAudioTime = AVAudioTime(sampleTime: 0, atRate:self.out.avAudioNode.inputFormat(forBus: 0).sampleRate)
        // start play BGM
        self.bgmPlayer.play(at: avAudioTime)
        // and render it to an offline file
        try self.out?.renderToURL(url, duration: duration)
        // **********
        // Question:
        // Can I change the tempo value when rendering?
        // **********

        // stop when finished
        self.bgmPlayer.stop()
     catch 
        debugPrint(error)
    

【问题讨论】:

【参考方案1】:

这实际上取决于如何实现动态节奏 - 您可以通过时间/音高转换发送音频并渲染结果。

【讨论】:

非常感谢。当我准备好管道并开始离线渲染时,我可以改变帧位置的速度吗? 对,我看到了困境。对速度/音高修改时间的精确修改进行采样。当您在渲染中运行示例时,您必须将激活时间转换为采样时间并适当更改参数。

以上是关于我可以离线渲染具有动态速度的音频文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVAudioEngine 离线渲染音频文件

AVAudioEngine 离线渲染:仅在连接耳机时静音输出

使用 Web Audio API 进行离线/非实时渲染

移动网络应用程序和离线访问音频文件

c#的音频库[关闭]

在离线数据库中存储图像、文本注释和音频文件的方式。安卓、Java