60 votes

Jouer un bruit court dans iOS

Je suppose que je pourrais utiliser AVAudioPlayer pour jouer un son, cependant, ce dont j'ai besoin est juste jouer un bruit court et je n'ai pas besoin de boucles ou d'un contrôle précis sur le volume etc.

Est-il un moyen facile de faire cela? Merci pour votre aide.

88voto

bbum Points 124887

Tous les autres réponses des fuites de mémoire (sauf à l'ARC est activé pour l'une des réponses)... curieusement, la réponse initialement marqué comme correcte a un appel à l' retainCount sans raison apparente.

Si vous alloc/init quelque chose, il doit être libéré (sauf si vous utilisez un ARC).

Si vous appelez AudioServicesCreateSystemSoundID() vous devez disposer du son qui en résulte.

Voir l' Audio de l'INTERFACE utilisateur Sons exemple.

En gros:

@interface MyClass:UI*ViewController // fixed
{
     SystemSoundID mySound;
}
@implementation MyClass
- (void) viewDidLoad {
    [super viewDidLoad];
    AudioServicesCreateSystemSoundID(.... URL ...., &mySound);
}

- (void) playMySoundLikeRightNowReally {
    AudioServicesPlaySystemSound(mySound);
}

- (void) dealloc {
   AudioServicesDisposeSystemSoundID(mySound);
   [super dealloc]; // only in manual retain/release, delete for ARC
}
@end

Pour être complet:
ajouter AudioToolbox.cadre
#import <AudioToolbox/AudioToolbox.h>

43voto

Anshu Points 931

Pour les courts extraits sonores (moins de 30 secondes), il y a un SystemSounds de la bibliothèque qui est vraiment agréable.

Pour: Vous n'avez pas besoin de gérer les paramètres de volume séparément. Le son est joué dans un thread séparé et chargement et de la lecture du clip audio est v rapide. En bref, vous le traitez de ce clip comme un autre système de son.

Inconvénients: Vous ne pouvez pas fournir une audio distinct paramètre de contrôle. Il est lié aux paramètres du système de sons. Vous ne pouvez pas jouer plus de 30 secondes. Probablement, vous ne pouvez pas appliquer des filtres de bruit pour améliorer l'effet audio.

Il y a certainement plus d'avantages et d'inconvénients, mais ce sont certains, je pense, du haut de ma tête.

utilisez cette importation: <AudioToolbox/AudioToolbox.h> Ajouter le AudioToolbox Cadre puis d'appeler la méthode ci-dessous comme [auto playSound], partout où vous voulez lire le clip.

-(void) playSound {
    NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"changeTrack" ofType:@"aif"];
    SystemSoundID soundID;
    AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
    AudioServicesPlaySystemSound (soundID);
    [soundPath release];
}

17voto

Arshad Parwez Points 834

Récemment, j'ai utilisé ce code pour jouer courte mp3 audio qui a bien fonctionné:-

déclarer en-dessous de la @mise en œuvre

NSString *path;

NSURL *url;

//where you are about to add sound 

path =[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"quotes_%d",soundTags] ofType:@"mp3"];

    url = [NSURL fileURLWithPath:path];
    player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL];
    [player setVolume:1.0];
    [player play];

//just add AVFoundation framework

9voto

Schulze Thomas Points 199

J'ai utilisé ce code pour lire un court-aiff-son sur iOS

#import <AudioToolbox/AudioServices.h> 

SystemSoundID completeSound;
NSURL *audioPath = [[NSBundle mainBundle] URLForResource:@"downloadCompleted" withExtension:@"aiff"];
AudioServicesCreateSystemSoundID((CFURLRef)audioPath, &completeSound);
AudioServicesPlaySystemSound (completeSound);

Espérons que cette aide.

4voto

Conor Points 403

Ma réponse est le projet de Loi de réponse, mais je l'utilise sans init ou dealloc et relâchez le son après il est joué:

- (void)playSound:(NSURL *)url
    SystemSoundID ssID = 0;
    AudioServicesCreateSystemSoundID((CFURLRef)url, &ssID);
    AudioServicesAddSystemSoundCompletion(ssID, NULL, NULL, (AudioServicesSystemSoundCompletionProc)MyAudioServicesSystemSoundCompletionProc, NULL);
    AudioServicesPlaySystemSound(ssID);
    //AudioServicesDisposeSystemSoundID(ssID);
}

void MyAudioServicesSystemSoundCompletionProc (SystemSoundID  ssID, void *clientData) {
    AudioServicesDisposeSystemSoundID(ssID);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X