1

voici mon problème:Conflit entre AVAudioRecorder et AVAudioPlayer

Le code (FooController):

NSString *path = [[NSBundle mainBundle] pathForResource:@"mySound" ofType:@"m4v"]; 
    soundEffect = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 
[soundEffect play]; 
    // MicBlow 
    micBlow = [[MicBlowController alloc]init]; 

Et MicBlowController contient:

 NSURL *url = [NSURL fileURLWithPath:@"/dev/null"]; 
    NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys: 
           [NSNumber numberWithFloat: 44100.0],     AVSampleRateKey, 
           [NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey, 
           [NSNumber numberWithInt: 1],       AVNumberOfChannelsKey, 
           [NSNumber numberWithInt: AVAudioQualityMax],   AVEncoderAudioQualityKey, 
           nil]; 

et

[recorder updateMeters]; 
const double ALPHA = 0.05; 
double peakPowerForChannel = pow(10,(0.05*[recorder peakPowerForChannel:0])); 
lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults; 

NSLog(@"Average input: %f Peak input %f Low pass results: %f",[recorder averagePowerForChannel:0],[recorder peakPowerForChannel:0],lowPassResults); 

Si Je joue au bac kground son et essayer d'obtenir le pic du micro Je reçois ce journal: Moyenne d'entrée: 0.000000 Pic d'entrée -120.000000 Résultats passe-bas: 0.000001

Mais si je commente toutes les pièces sur AVAudioPlayer cela fonctionne. Je pense qu'il y a un problème de canal.

Merci

Répondre

6

Eh bien, j'ai trouvé la solution et il est AVAudioSession! En utilisant la méthode setCategory (avec AVAudioSessionCategoryPlayAndRecord comme argument), je peux jouer des sons et enregistrer des sons à partir du micro.

audioSession = [[AVAudioSession sharedInstance] retain]; 
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: nil]; 
[audioSession setActive:YES error: nil]; 
+0

Ne pas supprimer les retours d'erreur. Toute méthode qui en a peut échouer d'une manière ou d'une autre; Quand cela arrive, vous voudrez savoir comment il a échoué, de sorte que vous pouvez l'empêcher d'échouer ou récupérer de l'échec gracieusement. –

+0

Excellent travail! Cette solution a fonctionné pour moi aussi. Mais comme Peter l'a dit, si vous rencontrez des problèmes, ne supprimez pas les erreurs. – evilgoldfish

+1

Pourquoi gardez-vous un singleton? – Tudorizer

Questions connexes