2009-07-30 6 views
1

Je suis très nouveau sur Objective C et je développe pour l'iPhone, je m'excuse si c'est une réponse facile. J'ai essayé de chercher Google depuis 3 jours et j'ai acheté iPhone Development for Dummies et pas de chance. Essentiellement ce que je voudrais faire est de jouer un son quand un bouton est pressé et puis je voudrais ajouter 1 à la valeur du fichier audio. Donc par exempleComment définir une valeur dans Objective C pour une application iPhone?

//Play audio file (y.wav) ---y being the variable I would like to set. 
if (y > 13) {    ---there are a total of 14 sounds starting with file 0.wav going to 13.wav. 
    y = 0;     ---so if the value is greater than 13 I want to start the cycle over with y equaling 0. 
} else { 
    y++;      ---if y is not greater than 13 I want to add one to it so it plays the next sound file next time. 
} 

J'ai un peu d'historique avec JavaScript donc cet exemple reflète JavaScript plus que Objective-C. L'application est similaire à iFart, mais avant de vous lancer dans mon cas de ne pas faire une autre application de péter/rôtir qui n'est pas vraiment ce que je fais c'est juste un concept similaire pour cette partie de mon application. Donc, si quelqu'un pouvait m'aider à apprendre comment traduire cela en Objective-C ou peut-être une méthode entièrement différente d'atteindre mon objectif, je l'apprécierais grandement.

Merci, Joey

Répondre

0

Vous aurez envie de faire quelque chose comme ceci:

for (NSUInteger i = 0; i < 14; i++) { 
    NSString *filename = [ NSString stringWithFormat:@"%d.wav", i ]; 
    // Code to play the sound 
} 

Il existe d'autres façons de faire, mais faire vérifier la documentation développeur pour la méthode +stringWithFormat: de NSString.

1
- (void) playMySound 
{ 
    static int soundIndex = 0; 
    const int soundCount = 14; 

    // create sound name from base string and wound index, as Jeff shows above 

    // play the sound 

    if (++soundIndex >= soundCount) 
    { 
     soundIndex = 0; 
    } 

    // or just do it in one line, viz 
    //soundIndex = (soundIndex + 1) % soundCount; 

} 
0

Chaque fois que vous voulez faire défiler une valeur entière, il est bon pratice juste utiliser l'opérateur modulo pendant l'incrément. Le schéma général est

counter = (counter + 1) % maxValue; 

Cela garantira compteur est toujours comprise entre 0 et (maxValue - 1), ce qui est idéal pour le vélo à travers un réseau avec des éléments maxValue.

Je vous recommande également d'être flexible sur le nombre réel de sons que vous pouvez jouer et les noms de fichiers. Ainsi, vous pouvez simplement stocker les noms de vos sons dans un NSAarry.

Dans votre classe, vous devriez avoir deux champs. Le tableau qui contient les noms des sons et un entier qui détient le nombre du son actuel à jouer:

NSUinteger currentSound; 
NSMutableArray *soundArray; 

votre tableau Initialiser. Par exemple, dans viewDidLoad ...

currentSound = 0; 
// get the base URL of the app bundle 
NSURL *baseURL =[NSURL fileURLWithPath: [[NSBundle mainBundle] bundlePath]]; 
NSMutableArray *sounds = [[NSMutableArray alloc] init]; 
// remember to release the array and the player objects on dealloc. 
// add sounds... 
NSError *p_error = nil; 
[sounds addObject: [[AVAudioPlayer alloc] initWithContentsOfURL: 
    [NSURL URLWithString: @"1.wav" relativeToURL: baseURL] error: &p_error]]; 
// check error an initialize other sounds... 

... maintenant dans l'action qui est déclenchée lorsque le bouton est pressé que vous faites ...

AVAudioPlayer *player = [soundArray objectAtIndex: currentSound]; 
currentSound = (currentSound + 1) % [soundArray count]; 
[player play]; 

L'opérateur modulo (%) travailleront donc qu'une fois que currentSound est égal au nombre d'objets dans le tableau, il va retourner revenir à 0.

0

Ok, donc c'est ce que j'ai.

- (void)viewDidLoad { 
     currentSound = 0; 
     CFBundleRef mainBundle; 
     mainBundle = CFBundleGetMainBundle(); 
     NSURL *baseURL =[NSURL fileURLWithPath: [[NSBundle mainBundle] bundlePath]]; 
     NSMutableArray *sounds = [[NSMutableArray alloc] init]; 
     NSError *p_error = nil; 
     [sounds addObject: [[AVAudioPlayer alloc] initWithContentsOfURL: 
     [NSURL URLWithString: @"0.wav" relativeToURL: baseURL] error: &p_error]]; 


     soundArray = sounds; 
     [super viewDidLoad]; 
    } 

    - (IBAction)playFailSound { 
     AVAudioPlayer *player = [soundArray objectAtIndex: currentSound]; 
     currentSound = (currentSound + 1) % [soundArray count]; 
     [player play]; 

Cependant, je ne sais toujours pas comment ajouter mes propres fichiers audio. Et dois-je déclarer AVAudioPlayer dans le fichier d'en-tête? Si oui, comment pourrais-je m'y prendre?

Encore une fois je m'excuse de rendre les choses trop compliquées mais j'essaie et n'ai pas tendance à m'entendre avec les documentations Apple.

Questions connexes