如何在iOS中播放声音?

3

我在stackoverflow上找到了很多解决方案,但不知何故所有的解决方案都无法产生任何声音。

这是我目前的代码:

PRE: I've added AudioToolbox.framework and imported <AVFoundation/AVFoundation.h> in my .m file


- (void)viewDidLoad
{
    [super viewDidLoad];
    NSURL* sndurl = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"aif"];
    SystemSoundID snd;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)sndurl, &snd);
    AudioServicesAddSystemSoundCompletion(snd, nil, nil, SoundFinished, nil);
    AudioServicesPlaySystemSound(snd);
}

void SoundFinished (SystemSoundID snd, void* context) {
        AudioServicesRemoveSystemSoundCompletion(snd);
        AudioServicesDisposeSystemSoundID(snd);
}

这个解决方案是从书中得来的。但是当我运行项目时,它没有产生任何声音。我的文件名为test.aif,长度为5秒。

有什么建议可以解决问题吗?如果这不是最好的解决方案,如何在iOS6上产生声音?


1
确保硬件静音开关处于关闭状态。在静音模式下,系统声音已关闭。 - user529758
2个回答

6

根据这个主题和其他主题,播放音频剪辑可以像以下这样简单,使用一个方法(函数)。我之前也做过。

- (void)playAudio {
    [self playSound:@"pageflip1" :@"wav"];
}

- (void)playSound :(NSString *)fName :(NSString *) ext{
    SystemSoundID audioEffect;
    NSString *path = [[NSBundle mainBundle] pathForResource : fName ofType :ext];
    if ([[NSFileManager defaultManager] fileExistsAtPath : path]) {
        NSURL *pathURL = [NSURL fileURLWithPath: path];
        AudioServicesCreateSystemSoundID((__bridge CFURLRef) pathURL, &audioEffect);
        AudioServicesPlaySystemSound(audioEffect);
    }
    else {
        NSLog(@"error, file not found: %@", path);
    }
}

你的代码对于路径变量返回“(null)”。我无法弄清楚原因。 - Leonardo DaVintik
将您的音频文件拖放到项目侧栏中。 - El Tomato
谢谢!我发现当我添加文件时,“添加到目标”复选框没有被选中。它应该被选中。 - Leonardo DaVintik
2
不要使用此方法播放声音。系统声音不遵循用户设置的音量。如果使用系统声音,则用户无法使用音量开关控制音量。请改用AVAudioPlayer类。 - Marcus Adams

0

请务必在实际设备上进行测试,因为使用AVFoundation时模拟器可能会出现问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接