如何在iOS中播放声音?

Leo*_*tik 3 audio objective-c ios ios6

我在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);
}
Run Code Online (Sandbox Code Playgroud)

这个解决方案直接出书.但是当我运行项目时,如果没有产生任何声音.我的文件是test.aif,长度为5秒.

有什么建议为什么它不起作用?如果这不是最好的解决方案,你如何在iOS6上产生声音?

El *_*ato 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 用这种方法不要播放声音.系统声音不符合用户设置的音量.如果您使用系统声音,则用户无法使用音量开关控制音量.请改用`AVAudioPlayer`类. (2认同)