我是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,或者可能是一种完全不同的方法来实现我的目标,我将非常感激。
谢谢,乔伊
答案 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文档相处。