web-dev-qa-db-fra.com

Jouez du son sur iPhone même en mode silencieux

Je souhaite créer une application qui crée du son, de la musique ou du son système lorsqu'un iPhone est en mode silencieux. Est-il possible de jouer n'importe quel type de son, qu'il s'agisse de musique ou de tonalités système, en mode silencieux?

53
Pankaj Kainthla

Ce n'est pas conseillé, mais qui suis-je pour dire que vous ne pouvez pas le faire. Vous avez peut-être une bonne raison de jouer du son.

Si vous utilisez des sessions audio, incluez <AVFoundation/AVFoundation.h> au début de votre dossier et

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

devrait faire l'affaire. Notez que si vous écoutez de la musique ou des sons, la lecture de l'iPod sera interrompue.

Une fois cela fait, probablement quelque part dans l'initialisation de l'une de vos classes qui joue les sons, vous pouvez instancier des sons comme ceci:

// probably an instance variable: AVAudioPlayer *player;
NSString *path = [[NSBundle mainBundle] pathForResource...];
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url];

Une fois cela fait, vous pouvez jouer avec lui à tout moment avec:

[player play]; // Play the sound
[player pause]; // Pause the sound halfway through playing
player.currentTime += 10 // skip forward 10 seconds
player.duration // Get the duration

Et d'autres trucs sympas. Recherchez la référence de classe AVAudioPlayer .

119
Stone Mason

Et pour Swift 2, 3, 4.2

    do {
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
      try AVAudioSession.sharedInstance().setActive(true)
    } catch {
      print(error)
    }
14
Tom

Oui, vous pouvez jouer du son lorsque le téléphone est réglé pour vibrer. Utilisez simplement la classe AVAudioPlayer.

Par défaut, la lecture d'un son de session audio ne ~ respectera pas ~ le réglage du commutateur de sourdine sur l'iPhone. En d'autres termes, si vous passez un appel pour écouter un son et que le commutateur silencieux (matériel) de l'iPhone est réglé sur silencieux, vous entendrez toujours le son.

Voici ce que tu veux. Alors maintenant, vous savez que la lecture d'une session audio lorsque votre téléphone est en mode silencieux jouera toujours le son dont vous avez juste besoin de savoir comment créer une session audio pour lire le son, comme ceci: tiré de ce site Web: http : //iosdevelopertips.com/audio/playing-short-sounds-audio-session-services.html

SystemSoundID soundID;
NSString *path = [[NSBundle mainBundle]
   pathForResource:@"RapidFire" ofType:@"wav"];    

AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
AudioServicesPlaySystemSound (soundID);

Pour que cela fonctionne, vous devrez importer le fichier d'en-tête et également ajouter le AudioToolbox.framework à votre projet.

Et c'est tout.

Donc, à partir de cette réponse, vous savez maintenant que vous pouvez jouer du son pendant que le téléphone est en vibration. Vous n'avez pas besoin de code supplémentaire ou spécial pour vous permettre de faire cette fonctionnalité car il le fait déjà par défaut.

Pk

12
Pavan

Fonctionne sur iOS 6 et supérieur

NSError *setCategoryErr = nil;
NSError *activationErr  = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
9
hfossli

Mettez simplement ceci dans votre viewDidLoad:

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
                         sizeof(sessionCategory), &sessionCategory);
2
Dex

Swift - Appelez cette fonction avant de lire votre audio/vidéo pour forcer la lecture lorsque le téléphone est en mode silencieux. Cela réduit également au silence les autres fichiers audio en cours de lecture.

Vous pouvez changer .duckOthers à .mixWithOthers si vous ne voulez pas couper le son d'un autre son.

func setupAudio() {
  let audioSession = AVAudioSession.sharedInstance()
  _ = try? audioSession.setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)
  _ = try? audioSession.setActive(true)
}
1
budidino

pour Objective C, vous pouvez jouer le son du système avec le code suivant:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
*The system path could be modified.*
NSString *path = @"/System/Library/Audio/UISounds/begin_record.caf";
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[player play];
1
Dennis Lan

Pour lire un son en mode silencieux et même lorsqu'il passe en arrière-plan, essayez ceci:

Mettez ce code dans l'application: didFinishLaunchingWithOpitons:

[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

et ce code dans applicationDidEnterBackground:

[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

Configurez également un mode d'arrière-plan de lecture audio/lecture aérienne et incluez l'en-tête AVFoundation.

1
Jeet