2016-04-22 8 views
3

私はAVAudioEngineを使ってユーザーの声を捉え、いくつかのエフェクトを適用しています。しかし、内蔵のマイクで録音し、ヘッドホンで再生すると、左側のイヤフォンだけで音が出ます。内蔵のマイクは1つのチャンネル入力しか持たないようです。どうすればこの問題を解決できますか?ここに私のコードの一部です:内蔵マイク内蔵のios録音には、1つのチャンネルサウンドしかありません。

func connectNode(){ 
    engine.connect(engine.inputNode!, to: reverbNode, format:reverbNode.outputFormatForBus(0)) 
    engine.connect(reverbNode, to: delayNode, format: delayNode.outputFormatForBus(0)) 
    engine.connect(delayNode, to: distortion, format: distortion.outputFormatForBus(0)) 
    engine.connect(distortion, to: engine.mainMixerNode, format: engine.mainMixerNode.outputFormatForBus(0)) 
    engine.connect(player, to: engine.mainMixerNode, format: engine.mainMixerNode.outputFormatForBus(0)) 
} 

func recordToFile(){ 
    setSessionRecord() 
    recordSetting[AVFormatIDKey] = NSNumber(unsignedInt: UInt32(kAudioFormatMPEG4AAC)) 
    recordSetting[AVNumberOfChannelsKey] = NSNumber(int: 2) 
    var file: AVAudioFile! 
    do{ 
    try file = AVAudioFile(forWriting: URLFor(fileName)!, settings: recordSetting) 
    }catch let error as NSError{ 
    print("error:\(error)") 
    } 
    engine.mainMixerNode.installTapOnBus(0, bufferSize: 1024, format: file.processingFormat) { (buffer, time) -> Void in 
    try! file.writeFromBuffer(buffer) 
    } 
} 

func playbackRecord(){ 
    setSessionPlayback() 
    var file:AVAudioFile! 
    file = try! AVAudioFile(forReading:URLFor(fileName)!) 
    let audioFormat = file.processingFormat 
    let audioFrameCount = UInt32(file.length) 
    let audioFileBuffer = AVAudioPCMBuffer(PCMFormat: audioFormat, frameCapacity: audioFrameCount) 
    try! file.readIntoBuffer(audioFileBuffer, frameCount: audioFrameCount) 
    player.scheduleBuffer(audioFileBuffer, atTime: nil, options: .Interrupts, completionHandler: {print(self.player.stop())}) 
    if(!player.playing){ 
    player.play() 
    }else{ 
    print("stop") 
    player.stop() 
    } 
} 

答えて

1

私はエンジンに単一チャンネルフォーマットを与えることをして、すべてがうまくなり、この方法を変更し、このissue.Justを修正する方法を発見しました。

func connectNode(){ 
    let format = AVAudioFormat(commonFormat: AVAudioCommonFormat.PCMFormatFloat32, sampleRate: 44100.0, channels:AVAudioChannelCount(1), interleaved: false) 
    engine.connect(engine.inputNode!, to: reverbNode, format:format) 
    engine.connect(reverbNode, to: delayNode, format: format) 
    engine.connect(delayNode, to: distortion, format: format) 
    engine.connect(distortion, to: engine.mainMixerNode, format: format) 
    engine.connect(player, to: engine.mainMixerNode, format: engine.mainMixerNode.outputFormatForBus(0)) 
} 
関連する問題