0

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" 内で、コードが正しく動作しません。出力が得られません。どうしてこうなったのですか?

4

1 に答える 1

0

wetDryMix の値を大きく設定すると、この問題を解決できるようです。

audioReverb.wetDryMix = 80
于 2015-07-23T04:51:37.437 に答える