从数组播放Wav文件

时间:2014-02-12 23:08:03

标签: ios objective-c arrays

我正在构建一个应用程序,教孩子们如何用拼图形式拼写字母表中的字母组成由图像组成的字母。每次点击一个到位它就会产生咔哒声,当它们完成时,它会播放一个完美的声音,接着是字母的声音,当它们点击字母时它也会播放字母的声音。理论上很简单,但像我这样的新手很复杂

我说有40种声音我想加载到一个数组中,然后当用户点击一个字母或对象时,可以在任何给定的时间分别调用每个声音。

我已成功设法使用我在网上找到的一个基本示例加载单个声音,但是我的需求比单个声音大很多我觉得数组更适合除非你能以更好的方式提供建议吗?

下面的代码检测用户是否已将拼图放在正确的位置,然后播放声音以显示其位置。我告诉你这个只是解释我到目前为止所做的事情,我知道这需要重新安装数组。

任何人都可以告诉我如何创建一个声音阵列,然后选择某个声音在给定点播放。

非常感谢

{
UITouch *touch = [[event allTouches]anyObject];
CGPoint touchLocation = [touch
                         locationInView:self.view];

if ([touch view] == image1)
{

    CGRect rect1= CGRectMake(562, 260, 103, 302);
    if(CGRectContainsPoint(rect1,touchLocation))
    {
        CGRect myFrame = image1.frame;
        myFrame.origin.x = 562;
        myFrame.origin.y = 260;
        image1.frame = myFrame;
        imagea =true;
        [image1 setUserInteractionEnabled:NO];


        NSURL* audioFileURL1 = [[NSBundle mainBundle] URLForResource:@"mouse1" withExtension:@"wav"];
        sound1 = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL1 error:nil];
        [sound1 play];



        if(imagea && imageb && imagec) {



            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"WELL DONE!!"
                                                            message:@"You have learnt the letter A"
                                                           delegate:nil
                                                  cancelButtonTitle:@"Continue"
                                                  otherButtonTitles: nil];
            [alert show];



            NSLog(@"All images set and locked in place");}


       }
    }

2 个答案:

答案 0 :(得分:0)

你最好不要考虑面向对象。听起来你想要一个包含图像的类,以及触摸图像时播放的声音。您可以为此子类化UIImageView,添加UITapGestureRecognizer,并在检测到点击时播放声音。如果您有40个图像和40个相应的声音,您可以在plist中定义它们(作为字典数组)。加载plist,迭代数组,并使用它来设置子类的图像和声音。

答案 1 :(得分:0)

请勿提前加载声音。创建声音文件名的NSArray并将其填入视图控制器的viewDidLoad方法中:

- (void) viewDidLoad
{
   soundNames = @[@"sound1", @"sound2", @"sound3", @"sound4", @"sound5"];
}

然后创建一个方法playSoundAtIndex:它接受一个数字索引,用它来加载声音,并播放它:

- (void) playSoundAtIndex: (NSUInteger) index;
{
  if (index> soundNames.count-1)
    return;
  NSURL* audioFileURL = [[NSBundle mainBundle] URLForResource: soundNames[index]
    withExtension:@"wav"];
  AVAudioPlayer *soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: audioFileURL
    error:nil];
  [soundPlayer play];
}

就是这样。

如果您发现需要在多个视图控制器中播放这些声音,则可能需要创建一个声音管理器单例,您可以从应用中的任何位置调用它。在目标C中对单例设计模式进行Google搜索。这里有一些例子,甚至是。