加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Swift使用AVAudioEngine进行实时转换

发布时间:2020-12-14 05:30:41 所属栏目:百科 来源:网络整理
导读:我正在使用 Swift在OSX上开发音频效果应用程序,我对集成音高效果感兴趣. 我希望能够实时地将音调调高或调高八度.目前我只收到一个干燥的信号. 我不确定这是否可行,并且想知道这是否可行,或者任何人可能有任何帮助或建议. 与该问题相关的当前代码如下: impor
我正在使用 Swift在OSX上开发音频效果应用程序,我对集成音高效果感兴趣.

我希望能够实时地将音调调高或调高八度.目前我只收到一个干燥的信号.

我不确定这是否可行,并且想知道这是否可行,或者任何人可能有任何帮助或建议.

与该问题相关的当前代码如下:

import Cocoa
import AVFoundation


class ViewController: NSViewController {
       var engine = AVAudioEngine()
       var timePitch = AVAudioUnitTimePitch()


    override func viewDidLoad() {
         timePitch.pitch = 1200

        // Setup engine and node instances
        var mixer = engine.mainMixerNode
        var input = engine.inputNode
        var output = engine.outputNode
        var format = input.inputFormatForBus(0)
        var error:NSError?

       engine.attachNode(timePitch)

       engine.connect(input,to: timePitch,format: format)
       engine.connect(timePitch,to: output,format: format)

      engine.startAndReturnError(&error)

        super.viewDidLoad()
    }

   override var representedObject: AnyObject? {
        didSet {
        // Update the view,if already loaded.
        }
    }


}
timePitch.pitch = -500 //Rude man voice
timePitch.rate = 1.5 //In 1.5 times faster

检查this tutorial.和direct link以示教程中的示例获取更多信息.

Swift 2.0的示例:

import UIKit
import AVFoundation

class ViewController: UIViewController {

    var engine: AVAudioEngine!
    var player: AVAudioPlayerNode!

    var file = AVAudioFile()

    override func viewDidLoad() {
        super.viewDidLoad()

        engine = AVAudioEngine()
        player = AVAudioPlayerNode()
        player.volume = 1.0

        let path = NSBundle.mainBundle().pathForResource("in",ofType: "caf")!
        let url = NSURL.fileURLWithPath(path)

        let file = try? AVAudioFile(forReading: url)
        let buffer = AVAudioPCMBuffer(PCMFormat: file!.processingFormat,frameCapacity: AVAudioFrameCount(file!.length))
        do {
            try file!.readIntoBuffer(buffer)
        } catch _ {
        }

        let pitch = AVAudioUnitTimePitch()

        //
        pitch.pitch = -500 //Distortion
        pitch.rate = 1.5 //Voice speed
        //

        engine.attachNode(player)

        engine.attachNode(pitch)

        engine.connect(player,to: pitch,format: buffer.format)

        engine.connect(pitch,to: engine.mainMixerNode,format: buffer.format)
        player.scheduleBuffer(buffer,atTime: nil,options: AVAudioPlayerNodeBufferOptions.Loops,completionHandler: nil)

        engine.prepare()
        do {
            try engine.start()
        } catch _ {
        }

        player.play()

    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读