Как установить значение в Objective C для приложения iPhone? - PullRequest
1 голос
/ 30 июля 2009

Я очень новичок в Objective C и занимаюсь разработкой для iPhone, поэтому я прошу прощения, если это простой ответ, я пытался искать в Google за 3 дня и купил iPhone Development for Dummies, и мне не повезло с этим .

По сути, я хотел бы воспроизвести звук при нажатии кнопки, а затем я хотел бы добавить 1 к значению аудиофайла. Так например

//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.
}

У меня есть некоторая история с JavaScript, поэтому этот пример отражает JavaScript больше, чем Objective-C. Приложение похоже на iFart, но прежде чем вы перейдете к моему делу о том, что я не буду делать еще одно пердящее / рычащее приложение, на самом деле это не то, что я делаю, это просто похожая концепция для этой части моего приложения. Поэтому, если бы кто-то мог помочь мне узнать, как перевести это на Objective-C или, может быть, это совершенно другой метод достижения моей цели, я был бы очень признателен.

Спасибо, Джои

Ответы [ 4 ]

1 голос
/ 30 июля 2009
- (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 голосов
/ 31 июля 2009

Хорошо, вот что у меня есть.

- (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];

Однако я все еще не уверен, как добавить свои собственные звуковые файлы. И мне нужно объявить AVAudioPlayer в заголовочном файле? Если так, как бы я поступил об этом?

Снова прошу прощения за то, что усложнил задачу, но я стараюсь и не склонен соглашаться с документацией Apple.

0 голосов
/ 30 июля 2009

Всякий раз, когда вы хотите цикл некоторого целочисленного значения, полезно просто использовать оператор по модулю во время приращения. Общий шаблон

counter = (counter + 1) % maxValue;

Это гарантирует, что счетчик всегда будет между 0 и (maxValue - 1), что идеально для циклического перемещения по массиву с элементами maxValue.

Я также рекомендовал бы быть гибким в отношении фактического количества звуков, которые вы можете воспроизводить, и имен файлов. Таким образом, вы можете просто хранить названия своих звуков в NSAarry.

в вашем классе у вас должно быть два поля. Массив, который содержит названия звуков и целое число, которое содержит номер текущего звука для воспроизведения:

NSUinteger currentSound;
NSMutableArray *soundArray;

Инициализируйте ваш массив. Например, в 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...

... теперь в действии, которое запускается при нажатии кнопки, вы делаете ...

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

Оператор по модулю (%) будет работать таким образом, чтобы, когда currentSound равнялся количеству объектов в массиве, он переворачивал обратно на 0.

0 голосов
/ 30 июля 2009

Вы захотите сделать что-то вроде этого:

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

Есть и другие способы сделать это, но ознакомьтесь с документацией разработчика для метода +stringWithFormat: NSString.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...