Come registrare e riprodurre suoni nell’app per iPhone?

Ho provato ad utilizzare AVAudioSession e AVAudioPlayer per registrare e riprodurre suoni, ma il volume del suono è molto basso.

Ho provato a mettere il valore del volume di AVAudioPlayer a 1.0 e più, ma non ha aiutato molto.

Quali potrebbero essere le mie altre opzioni per registrare un suono che può essere abbastanza forte da riprodurre?

Questo codice dovrebbe essere utile per te:

 #import  UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof (audioRouteOverride),&audioRouteOverride); 

Aumenterà il volume. La funzionalità del codice è quella di convertire il suono normale in suono degli altoparlanti sul tuo iPhone. Ecco perché viene utilizzato kAudioSessionOverrideAudioRoute_Speaker.

Da iOS7 puoi risolvere questo problema direttamente con AVAudioSession

Il metodo overrideOutputAudioPort fa lo stesso di AudioSessionSetProperty

 NSError *setOverrideError; NSError *setCategoryError; AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&setCategoryError]; if(setCategoryError){ NSLog(@"%@", [setCategoryError description]); } [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&setOverrideError]; if(setOverrideError){ NSLog(@"%@", [setOverrideError description]); } 

Versione rapida:

  import AVFoundation var overrideError : NSError? if AVAudioSession.sharedInstance().overrideOutputAudioPort(.Speaker, error: &error){ }else{ print("error in overrideOutputAudioPort " + overrideError!.localizedDescription) } 

Swift 2:

  do { try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker) } catch { } 

Il seguente codice ha risolto questo problema per me:

 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error: nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; UInt32 doChangeDefault = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefault), &doChangeDefault); 

UOMO, prova questo.

 AVAudioSession *session = [AVAudioSession sharedInstance]; NSError *setCategoryError = nil; if (![session setCategory:AVAudioSessionCategoryPlayback withOptions:kAudioSessionOverrideAudioRoute_Speaker error:&setCategoryError]) { // handle error } NSError *error; NSData * data = [NSData dataWithContentsOfURL:self.playlet.urlSound]; self.audioPlayer = [[AVAudioPlayer alloc] initWithData:data fileTypeHint:@"aac" error:&error]; self.audioPlayer.delegate = self; if (error) NSLog(@"Error: %@", [error localizedDescription]); else [_audioPlayer play]; 

imposta questo [session overrideOutputAudioPort: AVAudioSessionPortOverrideSpeaker error: & setOverrideError]; Per me funziona.