Question

Existe-t-il un moyen d’invoquer par programme le clavier "click" " du son? Mon application a un clavier personnalisé (construit à partir de touches UIB) et je souhaite fournir quelques commentaires audio lorsque l'utilisateur appuie sur les touches. J'ai essayé de créer mes propres sons dans Garageband, mais je n'étais satisfait d'aucune de mes créations. S'il n'existe pas de méthode standard pour invoquer le clic de touche, quelqu'un peut-il m'indiquer une bibliothèque de sons pouvant contenir un tel joyau?

Était-ce utile?

La solution

La méthode la plus simple que j'ai trouvée consiste à extraire Tock.aiff (le son du clavier) du simulateur iPhone et à le packager avec votre application, puis à le lire à l'aide de AudioServicesPlaySystemSound () au moment opportun . Sur ma machine, il suffit de taper Tock.aiff dans Spotlight pour afficher le fichier, mais si vous devez le rechercher, il se trouve dans la version de simulateur de UIKit.framework.

Autres conseils

Il existe une solution très rapide pour jouer le son de clavier par défaut:

  1. Ajouter AudioToolbox.framework
  2. Ajoutez la ligne suivante à l'endroit où vous souhaitez lire le son:

    AudioServicesPlaySystemSound (0x450);

À partir de iOS 4.2, adoptez le protocole UIInputViewAudioFeedback sur une sous-classe personnalisée de UIView. Faites de cette vue votre " inputView " puis appelez " playInputClick " au moment opportun.

http://developer.apple.com/library/ ios / # documentation / uikit / reference / UIInputViewAudioFeedback_ProtocolReference / Reference / Reference.html

Juste pour sauver du temps à certaines personnes. Mettez ceci dans votre vue personnalisée:

- (BOOL) enableInputClicksWhenVisible {
    return YES;
}

Pour que le clic se fasse, procédez comme suit:

[[UIDevice currentDevice] playInputClick];

Inutile de copier le fichier dans votre propre application. Vous devriez pouvoir l'obtenir directement à partir du framework UIKit:

CFURLRef soundFileURLRef = CFBundleCopyResourceURL(
    CFBundleGetBundleWithIdentifier(CFSTR("com.apple.UIKit")),
    CFSTR ("Tock"),CFSTR ("aiff"),NULL);

C’est ce que j’ai tiré du commentaire de aSquared:

NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:@"Tock" ofType:@"aiff"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &soundID);
AudioServicesPlaySystemSound(soundID);
AudioServicesDisposeSystemSoundID(soundID);

L’utilisation de 0x450 en tant que SystemSoundID fonctionne pour moi (et au volume correct - la lecture du Tock.aiff intégré était trop forte). Aucune idée de la portabilité de ce dernier - cela se trouve sur un iPod Touch de troisième génération.

Ne respecte toujours pas la préférence de cocher pour activer / désactiver.

Voici ce que j'ai fait:

Recherchez "Tock.aiff" dans: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/Frameworks/UIKit.framework

Faites-le glisser dans votre dossier Ressources dans xCode, en cochant la case "Copier les éléments dans le dossier du groupe de destination"

Importez AVFoundation.framework dans le dossier Frameworks au format xCode

Importez AVFoundation en haut de votre classe:

#import <AVFoundation/AVAudioPlayer.h>

Utilisez la fonction suivante:

- (void)PlayClick {
    NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] 
                                               pathForResource:@"Tock"
                                               ofType:@"aiff"]];
    AVAudioPlayer *click = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
    [click setVolume:0.15f];
    [click play];
}

C'est tout!

D'après ce que je peux dire, le son des clics n'est pas disponible pour les applications. Je n'ai rien vu de pertinent dans les services de session audio. AudioServicesPlaySystemSound () semble prometteur, mais il ne semble pas exister d'identifiant de son système pour le son de clic (un examen plus approfondi des en-têtes peut révéler quelque chose). Vous pouvez toujours passer en boucle sur un appel de AudioServicesPlaySystemSound (i) et voir si quelque chose est lu. Les images de restauration du logiciel iPhone ont probablement le son, mais ce n’est probablement pas sous licence pour une utilisation générale. Jailbreaker un iPhone pour obtenir le son de clic savoureux n'a pas besoin d'être mentionné.

Pour les sons (Creative Commons), consultez le projet Freesound .

Pour l'avenir, demandez peut-être à Apple d'exposer les sons du système autres que le son d'alerte à utiliser avec AudioServicesPlaySystemSound () .

Peut-être un peu en retard ... Mais dans le dernier message de MrMage, si vous faites AudioServicesDisposeSystemSoundID (soundID); juste après AudioServicesPlaySystemSound (soundID); vous n'entendrez plus rien car vous supprimez le son du système juste après l'avoir créé.

Vous devez le laisser finir avant de commencer à jouer. Appelez seulement AudioServicesDisposeSystemSoundID pour annuler le son avant la fin

Vous n'êtes pas obligé de vous débarrasser immédiatement de l'objet son. Conservez un pointeur sur cet objet son dans une propriété et ne le supprimez que lorsque vous êtes sur le point de jouer un autre son avant de le recréer.

Et bien sûr, supprimez enfin l'objet SystemSoundID dans dealloc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top