使用播放声音的相同按钮停止声音

时间:2011-04-23 16:59:23

标签: objective-c cocoa-touch ios

非常简单,我使用一个按钮生成随机数,然后使用开关/案例,它会动画图像并播放声音。我的问题是当你再次按下按钮时,之前播放的声音不会停止,声音会重叠。

以下是代码:

- (IBAction) pushme: (id) sender{
int random = (arc4random()%10);
switch (random) {
    case 0:  {
            [ANIMATION NUMBER 0]

            NSString *path = [NSString stringWithFormat:@"%@%@",[[NSBundle mainBundle] resourcePath],@"/sound0.wav"];
            SystemSoundID soundID;
            NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
            AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
            AudioServicesPlaySystemSound(soundID);
        }
        break;
    case 1:  {
            [ANIMATION NUMBER 1]

            NSString *path = [NSString stringWithFormat:@"%@%@",[[NSBundle mainBundle] resourcePath],@"/sound1.wav"];
            SystemSoundID soundID;
            NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
            AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
            AudioServicesPlaySystemSound(soundID);
    } break; //Lots more cases after this one

我知道这不是最好的方法,一遍又一遍地声明同一个变量。 但有没有办法在播放另一个之前阻止它?

1 个答案:

答案 0 :(得分:8)

我刚刚回答了我自己的问题。

我做的是

  1. 在标头中声明SoundSystemID soundID;
  2. 在生成随机数之前添加此行:AudioServicesDisposeSystemSoundID(soundID);
  3. 请记住,如果您要再次播放声音,则需要在处理完资源后重新加载资源。

    谢谢你们,无论如何。