Ich benutze AVAudioEngine, um die Stimme des Benutzers zu erfassen und einige Effekte darauf anzuwenden.Wenn mit dem Mikrofon des Kopfhörers aufgenommen wird, geht alles gut. Aber wenn es darum geht, mit dem eingebauten Mikrofon des Telefons aufzunehmen und den Ton über den Kopfhörer abzuspielen, hat nur der Ohrhörer auf der linken Seite den Ton. Es scheint, dass das eingebaute Mikrofon nur über einen einzelnen Kanal verfügt. Wie kann ich dieses Problem beheben? Hier einige meines Code:IOS-Aufnahme mit eingebautem Mikrofon haben nur einen Kanal-Sound
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()
}
}