使用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() } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ajax url 路径
- wpf – TaskFactory新UI创建
- xml – RSS源中的链接,guid和origLink
- dojox.charting和dojox.timing构造Dojo动态图表
- c# – .net XmlSerializer和多维数组
- oracle – 我似乎无法在pl / sql函数中声明变量?
- CCNA实验复习四,链路聚合
- c# – SqlParameter DbType.Date – > SqlDbType.DateTime转
- actionscript-3 – Flash / AS3:未找到类型或不是编译时常
- Flex 4.1 + BlazeDS框架 + Cairngorm框架(Demo实例)