如何在Objective C中为iPhone应用设置一个值?

时间:2009-07-30 03:49:46

标签: iphone objective-c audio

我是Objective C的新手,并为iPhone开发,所以我很抱歉,如果这是一个简单的答案,我已经尝试搜索谷歌3天了,并购买iPhone开发傻瓜,没有运气这样的事情

基本上我想要做的是按下按钮时播放声音,然后我想在音频文件的值中加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历史,所以这个例子比Objective-C更能反映JavaScript。该应用程序类似于iFart,但在你开始我的案例之前没有制作另一个放屁/打嗝的应用程序,这实际上并不是我正在制作的应用程序,这只是我应用程序的这一部分的类似概念。因此,如果有人可以帮助我学习如何将其转化为Objective-C,或者可能是一种完全不同的方法来实现我的目标,我将非常感激。

谢谢,乔伊

4 个答案:

答案 0 :(得分: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;

}

答案 1 :(得分:0)

你会想做这样的事情:

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

还有其他方法可以执行此操作,但请查看NSString的+stringWithFormat:方法的开发人员文档。

答案 2 :(得分:0)

每当你想循环一些整数值时,在增量期间使用 modulo 运算符是很好的做法。一般模式是

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。

答案 3 :(得分:0)

好的,这就是我所拥有的。

- (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文档相处。