a.
NSBundle a une méthode URLForResource:extension: qui vous évite de devoir appeler fileURLWithPath:
b.
si vous voulez jouez des sons courts - genre clic lorsque l'utilisateur touche un objet de l'UI - utilisez :
AudioServicesCreateSystemSoundID, AudioServicesPlaySystemSound, AudioServicesDisposeSystemSoundID
(attention ce sont pas tous les mêmes formats qui sont compatibles : utilisez afconvert pour mettre le son dans un format compatible si nécessaire)
c.
pour jouez des sons longs :
charger le son avec AVAudioPlayer comme vous le faites, appelez prepareToPlay et faites jouez le son dans un NSThread
avec
selector:@selector(startAudioThread:)
et
1 2 3 4 5 6 7 8 9 10 11 12
|
- (void)startAudioThread:(id)theAudio
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[NSThread setThreadPriority:1.0];
while (self.isPlaying) {
[(AVAudioPlayer *) theAudio play] ;
[NSThread sleepForTimeInterval:0.01];
}
[pool drain] ;
} |
self.isPlaying étant mis à YES lors de la création du NSThread,
et à NO dans la méthode audioPlayerDidFinishPlaying:successfully: du delegate, le même "self" que celui passé à initWithTarget:selector:object: de NSThread.
(voir exemples sur le site d'Apple, notamment le Metronome … en principe aussi sur votre disque :
file:///Developer/Platforms/iPhoneOS.platform/Developer/Documentation/DocSets/com.apple.adc.documentation.AppleiOS4_3.iOSLibrary.docset/Contents/Resources/Documents/index.html#samplecode/Metronome/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007434
)
Partager