如何在 iOS 中播放声音?

Posted

技术标签:

【中文标题】如何在 iOS 中播放声音?【英文标题】:How to play sound in iOS? 【发布时间】:2013-05-08 21:11:42 【问题描述】:

我在 *** 上找到了很多解决方案,但由于某种原因,它们都未能产生任何声音。

这是我当前的代码:

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】:

根据this topic等人的说法,播放音频片段可以这么简单,我使用一个方法(函数)。我自己之前做过。

- (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)”。我不知道为什么。 将您的音频文件拖放到项目侧边栏中。 谢谢!我发现添加文件时未选中“添加到目标”复选框。它应该被选中。 不使用此方法播放声音。系统声音不服从用户设置的音量。如果您使用系统声音,则用户无法使用音量开关控制音量。请改用AVAudioPlayer 类。【参考方案2】:

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

【讨论】:

以上是关于如何在 iOS 中播放声音?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 应用程序中连续循环播放声音文件?

如何在 iOS 上使用 AVAudioPlayer 播放指定持续时间的声音?

如何在不更改声音指示器的情况下在 iOS 中以最大音量播放声音文件

在 iOS 中播放系统声音

如何使用 FCM 在 ios 推送通知中播放自定义通知声音

IOS如何在后台播放音乐声音并暂停当前播放的音乐应用程序