首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用音频工具箱播放.wav

使用音频工具箱播放.wav
EN

Stack Overflow用户
提问于 2013-01-08 01:39:46
回答 2查看 1.8K关注 0票数 1

我正在尝试使用音频工具箱播放.wav文件。到目前为止,我有这个:但是我的文件不会播放。If条件被正确触发,但是它不能播放。但是,如果文件不在那里,它将打印错误消息。有什么问题的线索吗?

代码语言:javascript
复制
-(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);
    }
    AudioServicesDisposeSystemSoundID(audioEffect);;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-08 08:46:12

您不能在通知播放之后立即处理声音ID,因为这会导致播放停止。这就是为什么你一开始没听到的原因。

相反,您应该在任何负责创建它的对象(例如,视图控制器)的属性中持有对ID的引用。你可以这样在你的接口声明中声明它:

代码语言:javascript
复制
@property(nonatomic, assign) SystemSoundID audioEffect;

...and随后像这样分配给它:

代码语言:javascript
复制
AudioServicesCreateSystemSoundID((__bridge CFURLRef) pathURL, &_audioEffect);

这不仅允许您在以后知道已使用完它时正确地处理它(例如,在viewDidUnload中),而且还将防止您每次想要播放它时都必须从磁盘中读取它,因为每个ID可以播放无限次。

最后一条提示:您可以直接请求包资源的URL,而不是请求一个字符串,然后将其转换为URL。

代码语言:javascript
复制
NSURL *audioURL = [[NSBundle mainBundle] URLForResource:fName withExtension:ext];
if([[NSFileManager defaultManager] fileExistsAtPath:[audioURL path]])
    // ...
票数 1
EN

Stack Overflow用户

发布于 2013-01-08 03:49:52

我从Warrenm的评论中发现了这一点。我不得不删除最后一行,因为它在设置播放后几毫秒就杀死了声音,因此听不到。

代码语言:javascript
复制
-(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);
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14201141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档