2016-04-14 18 views
3

Ich habe ein Problem mit der Lautstärke in meiner iOS App. Wenn ich setupMic() rufe, wird der Lautstärkepegel der gesamten App deutlich gesenkt.
Hier ist der Code ich verwende:Lautstärke der gesamten App wird nach Zugriff auf Mikrofon leiser

func setupMic() { 
    //make an AudioSession, set it to PlayAndRecord and make it active 
    let audioSession: AVAudioSession = AVAudioSession.sharedInstance() 
    do { 
     try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord) 
    } catch { 
     print("There was an error setting the category") 
    } 
    do { 
     try audioSession.setActive(true) 
    } catch { 
     print("There was an error setting the audio session to active") 
    } 


    //set up the URL for the audio file 
    let documents: AnyObject = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] 
    let str = documents.stringByAppendingPathComponent("recordTest.caf") 
    let url = NSURL.fileURLWithPath(str as String) 

    //make a dictionary to hold the recording setting so we can instantiate our AVAudioRecorder 
    let number = NSNumber(unsignedInt: kAudioFormatAppleIMA4) 
    let recordSettings: [String: AnyObject] = [AVFormatIDKey: number, 
               AVSampleRateKey: 44100.0, 
               AVNumberOfChannelsKey: 2, 
               AVEncoderBitRateKey: 12800, 
               AVLinearPCMBitDepthKey: 16, 
               AVEncoderAudioQualityKey: AVAudioQuality.Min.rawValue] 

    //Instantiate an AVAudioRecorder 
    do { 
     recorder = try AVAudioRecorder(URL: url, settings: recordSettings) 
    } catch { 
     print("There was an error") 
    } 
} 

//This function is called everytime our timer levelTimer fires 
func levelTimerCallback() { 
    recorder.updateMeters() 
    let averagePower = self.recorder.peakPowerForChannel(0) 
    if averagePower > -7 { 
     stopMonitoring() 

     print(recorder.peakPowerForChannel(0)) 
     didCompleteChallenge(true) 
    } 
} 

func startMonitoring() { 
    if self.recorder != nil { 
     recorder.prepareToRecord() 
     recorder.meteringEnabled = true 
     //start recording 
     recorder.record() 
     //instantiate a timer to be called with whatever frequency we want to grab metering values 
     self.levelTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(levelTimerCallback), userInfo: nil, repeats: true) 
    } 
} 

func stopMonitoring() { 
    self.recorder.stop() 
    self.recorder.deleteRecording() 
    self.levelTimer.invalidate() 
} 

I setupMic() und startMonitoring() in einem updateWith() Methode aufrufen. Ich rufe auch stopMonitoring(), wenn die Ansicht wieder mit dem updateWith() aktualisiert wird Sobald das Mikrofon zugegriffen wird, verringert sich die Lautstärke. Irgendwelche Vorschläge? Irgendwelche Korrekturen?

Antwort

3

Das Problem wurde behoben. Die Lautstärke wurde nicht wirklich leiser, das Audio wurde tatsächlich zum Hörer geleitet. Ich musste nur die Optionen der Audio-Session-Kategorie auf .DefaultToSpeaker einstellen. AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: [.DefaultToSpeaker]). Danke trotzdem Internet.

+0

Ich stelle diese Kategorie ein, aber als ich meine Kopfhörer anschließe, habe ich erfahren, dass nur eine Seite Sound hat, andere Seite funktioniert nicht, irgendeine Ahnung? –

+0

Dank @Cameron, up vote, es hat für mich funktioniert –