2009-06-21 15 views

Répondre

18

De http://www.iphonedevsdk.com/forum/iphone-sdk-development-advanced-discussion/12890-audiosessionsetproperty-problem-playing-sound-listening-mic.html -

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);  
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 
+1

Est-ce que ce travail avec AVAudioPlayer ou seulement AudioServices? –

+5

Une note pour les autres personnes qui rencontrent cette réponse: les deux premières lignes de l'exemple de code ne sont pas pertinentes - et si vous êtes comme l'OP (qui enregistre aussi l'audio), ces lignes empêcheront l'enregistrement de fonctionner correctement. – Steve

+1

Cela a fonctionné pour moi avec un ajustement: j'ai changé sessionCategory pour être kAudioSessionCategory_PlayAndRecord. – Jacob

6

Ceci est une question ancienne, mais l'autre réponse ne m'a pas aidé ... Cependant, j'ai trouvé une solution que je posterai pour référence ultérieure au cas où quelqu'un (ou moi du futur!) en a besoin.

La solution est décrite dans le billet de blog suivant: iOS: Force audio output to speakers while headphones are plugged in.

Vous devez créer une nouvelle classe Objective-C AudioRouter dans votre projet. Importez ensuite AudioRouter.h dans votre fichier d'en-tête de la classe dans laquelle vous lancez la fonctionnalité audio. Ensuite, dans le fichier correspondant .m ajouter les lignes suivantes au sein de la méthode viewDidLoad: sortie

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

Maintenant, vous avez audio (par exemple AVAudioPlayer) forcé de haut-parleur! Notez que si vous branchez des écouteurs alors que l'application est en cours d'exécution, alors toute la sortie audio est dirigée vers les écouteurs.

14

Swift 3

Avant d'enregistrer le son que je mis:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord) 

et avant la lecture, je mis:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient) 

Objectif C

b enregistrement vant:

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

avant la lecture:

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

Ceci est très facile et utile! Merci mec! – CSawy

+0

Ne modifiez la catégorie que si elle correspond à votre cas d'utilisation. Pour 'AVAudioSessionCategoryAmbient', Apple indique" La catégorie pour une application dans laquelle la lecture du son n'est pas primordiale, c'est-à-dire que votre application peut être utilisée avec le son désactivé. Cette catégorie convient également aux applications de style "play along", telles que un piano virtuel joué par un utilisateur pendant la lecture de l'application Music Lorsque vous utilisez cette catégorie, l'audio d'autres applications se mélange à votre audio.L'audio est désactivé par le verrouillage de l'écran et par le commutateur silencieux ". – KudoCC

26

Je me rends compte de cette question est assez vieux, mais quand je luttais avec le même problème que je trouve une solution simple qui nous l'espérons aider tous ceux qui cherchent d'autre à utiliser les haut-parleurs plus forts que les haut-parleurs du récepteur.La méthode j'installait la session audio avec l'option DefaultToSpeaker dans AVAudioSessionCategoryOptions:

Dans Swift (en supposant que votre session audio est nommé session) -

session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions:AVAudioSessionCategoryOptions.DefaultToSpeaker, error: nil) 

Dans Obj-C -

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error: nil]; 
+0

A travaillé pour moi. Merci. –

+0

belles œuvres comme un charme! – coolcool1994

6

Swift2:

try session.setCategory(AVAudioSessionCategoryPlayAndRecord, 
    withOptions:AVAudioSessionCategoryOptions.DefaultToSpeaker) 
11

Cela fonctionne très bien pour moi dans Swift2

let session = AVAudioSession.sharedInstance() 
try! session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker) 
1

Swift 3

let audioSession = AVAudioSession.sharedInstance() 

    do { 
     try audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker) 
    } catch let error as NSError { 
     print("Audio Session error: \(error.localizedDescription)") 
    } 
0
Answer For Swift 4.0 
func SetSessionPlayerOn() 
{ 
    do { 
     try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord) 
    } catch _ { 
    } 
    do { 
     try AVAudioSession.sharedInstance().setActive(true) 
    } catch _ { 
    } 
    do { 
     try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker) 
    } catch _ { 
    } 
} 
func SetSessionPlayerOff() 
{ 
    do { 
     try AVAudioSession.sharedInstance().setActive(false) 
    } catch _ { 
    } 
}