2010-06-23 11 views
8

ho un problema con AVAudioRecorder e AVAudioPlayer.AVAudioRecorder e AVAudioPlayer - Uscita audio sull'altoparlante interno, come cambiare?

quando uso il lettore e la registrazione contemporaneamente (ad esempio per riprodurre il suono durante la registrazione) l'audio è nel silenzioso altoparlante interno. ho cercato StackOverflow e tutto ho trovato è stato questo codice:

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

Ma questo non mi aiuta :( Quando ho CopyPaste esso, ho ottenuto gli errori Che cosa posso fare per registrare e riprodurre l'altoparlante a. il fondo?

non faccio uso di qualcosa di simile SCLister oder qualcosa ...

Grazie in anticipo

Max

risposta

1

L'unica cosa che ho trovato su questo argomento è questo:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

che deve essere impostata quando si registra l'audio, se si desidera riprodurre allo stesso tempo. Fai una prova e fammi sapere.

P.S. Assicurati di aggiungere i framework AudioToolbox e AVFoundation al tuo progetto e includerli nei tuoi file .m.

+1

Sì, questo è necessario, ma ho capito. Nessuna modifica :( La funzione stessa è ok, puoi soffiare il microfono e ascoltare il suono, ma solo con l'altoparlante interno. –

16

Questo è un po 'vecchio, ma questo post mi ha aiutato e volevo aggiornarlo per chiunque altro possa averne bisogno in futuro. Il codice pubblicato nella parte superiore è corretto: prenderà l'audio silenzioso riprodotto dall'altoparlante del telefono e lo indirizzerà all'altoparlante in basso. C'è un errore di battitura nel codice, motivo per cui sta dando errori. Ecco il frammento di codice corretto che risolverà questo problema:

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

Assicurati di attivare anche la sessione audio di destra dopo aver impostato questo, prima di creare il vostro lettore audio/registratore:

[[AVAudioSession sharedInstance] setActive:YES error:nil]; 

scorso, se si Mentre suonerai e registrerai allo stesso tempo probabilmente avrai bisogno di impostare anche la categoria e le funzioni di mixaggio. Ecco l'intero snippet che imposta la categoria, attiva il missaggio, indirizza l'audio all'altoparlante principale e attiva la sessione. Avrai intenzione di farlo solo una volta dopo l'avvio dell'app.

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

OSStatus propertySetError = 0; 
UInt32 allowMixing = true; 
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing); 

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

NSLog(@"Mixing: %x", propertySetError); // This should be 0 or there was an issue somewhere 

[[AVAudioSession sharedInstance] setActive:YES error:nil]; 

La speranza che aiuta qualcuno!

+0

a proposito, dovrebbe essere 'error: NULL' not' error: nil' – user102008

+2

C'è un bel po 'di codice di esempio di Apple che mostra l'errore: nil così come l'errore: NULL quindi sembra essere accettabile per l'uso di entrambi.Comunque non causerà alcun problema –

+0

grazie amico Mi ha aiutato molto ...! – Warewolf

0

Se si sta attualmente giocando attraverso gli altoparlanti silenziosi, e vogliono giocare attraverso l'altoparlante nella parte inferiore di iPhone, di questo codice:

UInt32 doChangeDefaultRoute = 1; 

AudioSessionSetProperty (
         kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, 
         sizeof (doChangeDefaultRoute), 
         &doChangeDefaultRoute 
         ); 
0

Questa è vecchia questione, ma nessuno dei altre risposte mi hanno aiutato ... Tuttavia, ho trovato una soluzione che sto postando per riferimenti futuri nel caso qualcuno ne avesse bisogno.

La soluzione è descritta nel seguente post del blog: iOS: Force audio output to speakers while headphones are plugged in.

È necessario creare un nuovo AudioRouter di classe Objective-C nel progetto. Quindi importare AudioRouter.h nel file di intestazione della classe in cui si avvia la funzionalità audio.Ora nel file corrseponding .m aggiungere le seguenti righe all'interno viewDidLoad metodo:

AudioRouter *foobar = [[AudioRouter alloc] init]; 
[foobar initAudioSessionRouting]; 
[foobar forceOutputToBuiltInSpeakers]; 

Ora avete l'audio (per esempio AVAudioPlayer) Uscita forzata all'altoparlante!

0

AudioSessionSetProperty è obsoleto da iOS7 ma il seguente ha funzionato per me.

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]; 
2

ho risposto qui già: How to get AVAudioPlayer output to the speaker

In breve, utilizzare questo prima della registrazione:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:nil]; 

... e utilizzare questo prima della riproduzione (su altoparlanti o cuffie se sono collegato)

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; 
+0

Tu sei l'uomo! – CSawy

Problemi correlati