2016-04-22 151 views
3

我使用AVAudioEngine来捕捉用户的声音并对其应用一些效果。使用耳机麦克风录制时,一切都会顺利进行。但是当使用手机的内置麦克风进行录音,并通过耳机播放声音时,只有左侧耳塞才能听到声音,似乎内置麦克风只有单声道输入。那么我该如何解决这个问题?下面是我的一些代码:使用内置麦克风录制的ios只有一个声道的声音

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)) 
} 
相关问题