调用一个随机的声音阵列一次,然后用Button播放

时间:2015-04-17 10:08:08

标签: objective-c xcode6

我想随机化一个Soundfiles数组。

- (void)generateRandomizedSounds {
    int randomSoundNumber = arc4random() % 4; //random number from 0 to 3

    NSLog(@"random sound number = %i", randomSoundNumber);

    NSString *effectTitle;

    switch (randomSoundNumber) {
        case 0:
            effectTitle = @"bell";
            break;
        case 1:
            effectTitle = @"brake";
            break;
        case 2:
            effectTitle = @"dog";
            break;
        case 3:
            effectTitle = @"bird";
            break;

        default:
            break;
    }
    SystemSoundID soundID;

    NSString *soundPath = [[NSBundle mainBundle] pathForResource:effectTitle ofType:@"mp3"];
    NSURL *soundUrl = [NSURL fileURLWithPath:soundPath];

    AudioServicesCreateSystemSoundID ((__bridge CFURLRef)soundUrl,  &soundID);
    AudioServicesPlaySystemSound(soundID);

    return;
}

好的,现在我想用一个按钮播放每个案例。

但我尝试的一切都出错了。

1 个答案:

答案 0 :(得分:0)

AudioServicesPlaySystemSound()功能无法播放任何MP3文件。该功能仅支持.caf.aac.wav这些文件格式,声音必须为30秒或更短。

  

使用此功能播放的声音文件必须是:   持续时间不超过30秒在.caf,.aif或.wav文件中打包的线性PCM或IMA4(IMA / ADPCM)格式

https://developer.apple.com/library/ios/documentation/AudioToolbox/Reference/SystemSoundServicesReference/index.html#//apple_ref/c/func/AudioServicesPlaySystemSound

因此,如果clock.mp3持续时间少于30秒,则可以在转换文件格式时播放声音。

要将mp3转换为caf,例如使用afconvert命令,如下所示:

$ afconvert -f caff -d ima4 bell.mp3 bell.caf

如果不是(声音超过30秒),请改用AVPlayer的{​​{1}}。

AVFoundation.framework