AVAudioEngine を使用してユーザーの声をキャプチャしながら、リアルタイムのエフェクト (リバーブや sth など) を音声に適用しています。コードは次のとおりです。
import UIKit
import AVFoundation
class ViewController: UIViewController{
var audioEngine:AVAudioEngine!
var audioReverb:AVAudioUnitReverb!
var audioInputNode:AVAudioInputNode!
override func viewDidLoad() {
super.viewDidLoad()
let session = AVAudioSession.sharedInstance()
session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: nil)
session.setActive(true, error: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func recordWithReverb(sender: AnyObject) {
audioEngine = AVAudioEngine()
audioEngine.stop()
audioEngine.reset()
audioInputNode = audioEngine.inputNode
audioReverb = AVAudioUnitReverb()
audioReverb.loadFactoryPreset(.LargeRoom)
audioReverb.wetDryMix = 50
audioEngine.attachNode(audioReverb)
let inputFormat = audioReverb.inputFormatForBus(0)
audioEngine.connect(audioInputNode, to: audioReverb, format: inputFormat)
audioEngine.connect(audioReverb, to: audioEngine.outputNode, format: inputFormat)
audioEngine.startAndReturnError(nil)
}
}
マイク付きのヘッドフォン(イヤーポッドなど)でテストすると、すべてうまく機能しますが、マイクのない他のヘッドフォンを使用すると(iPhoneのマイクしか入力ソースとして使用できませんでした)、ヘッドフォンの右側のスピーカーは常にヘッドフォンの左側のスピーカーよりも小さく聞こえます。どうすれば修正できますか?
そして、コードを書くときに聞きたい別の質問があります
var audioEngine:AVAudioEngine!
var audioReverb:AVAudioUnitReverb!
var audioInputNode:AVAudioInputNode!
関数 "recordWithReverb" 内で、コードが正しく動作しません。出力が得られません。どうしてこうなったのですか?