如何将音频效果应用于文件并写入文件系统 - iOS [英] How to apply audio effect to a file and write to filesystem - iOS

查看:18
本文介绍了如何将音频效果应用于文件并写入文件系统 - iOS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个应用程序,该应用程序应允许用户将音频过滤器应用于录制的音频,例如混响、增强.

I'm building an app that should allow user to apply audio filters to a recorded audio, such as Reverb, Boost.

我无法找到有关如何将过滤器应用于文件本身的任何可行信息来源,因为稍后需要将处理后的文件上传到服务器.

I was unable to find any viable source of information on how to apply filters to a file itself, because it's needed to upload processed file to server later.

我目前正在使用 AudioKit 进行可视化,并且我知道它能够进行音频处理,但只能用于播放.请提出任何进一步研究的建议.

I'm currently using AudioKit for visualization, and I'm aware that it's capable of doing audio processing, but only for playback. Please give any suggestions for further research.

推荐答案

AudioKit 有一个离线渲染节点,不需要 iOS 11.这里有一个例子, player.schedule(...) 和 player.start(at.) 位是必需的,因为如果您使用 player.play() 启动它,AKAudioPlayer 的底层 AVAudioPlayerNode 将阻塞在等待下一次渲染的调用线程上.

AudioKit has an offline render node that doesn't require iOS 11. Here's an example, the player.schedule(...) and player.start(at.) bits are required as AKAudioPlayer's underlying AVAudioPlayerNode will block on the calling thread waiting for the next render if you start it with player.play().

import UIKit
import AudioKit

class ViewController: UIViewController {

    var player: AKAudioPlayer?
    var reverb = AKReverb()
    var boost = AKBooster()
    var offlineRender = AKOfflineRenderNode()

    override func viewDidLoad() {
        super.viewDidLoad()

        guard let url = Bundle.main.url(forResource: "theFunkiestFunkingFunk", withExtension: "mp3") else {
            return
        }
        var audioFile: AKAudioFile?
        do {
            audioFile = try AKAudioFile.init(forReading: url)
            player = try AKAudioPlayer.init(file: audioFile!)
        } catch {
            print(error)
            return
        }
        guard let player = player else {
            return
        }


        player >>> reverb >>> boost >>> offlineRender

        AudioKit.output = offlineRender
        AudioKit.start()


        let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        let dstURL = docs.appendingPathComponent("rendered.caf")

        offlineRender.internalRenderEnabled = false
        player.schedule(from: 0, to: player.duration, avTime: nil)
        let sampleTimeZero = AVAudioTime(sampleTime: 0, atRate: AudioKit.format.sampleRate)
        player.play(at: sampleTimeZero)
        do {
            try offlineRender.renderToURL(dstURL, seconds: player.duration)
        } catch {
            print(error)
            return
        }
        offlineRender.internalRenderEnabled = true

        print("Done! Rendered to " + dstURL.path)
    }
}

这篇关于如何将音频效果应用于文件并写入文件系统 - iOS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆