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?
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? –
Dank @Cameron, up vote, es hat für mich funktioniert –