【问题标题】:No Sound is playing没有声音正在播放
【发布时间】:2011-12-24 18:27:42
【问题描述】:
-(IBAction)test1
{
    CFBundleRef mainBundle = CFBundleGetMainBundle();

    CFURLRef soundFileURLRef;
    soundFileURLRef =CFBundleCopyResourceURL(mainBundle, 
                                             (CFStringRef) @"Bear3", CFSTR ("wav"), NULL);

    UInt32 soundID;
    AudioServicesCreateSystemSoundID(soundFileURLRef , &soundID);
    AudioServicesPlaySystemSound(soundID);
    AudioServicesDisposeSystemSoundID(soundID);
    CFRelease(soundFileURLRef);
}

它没有播放声音文件

【问题讨论】:

  • 您遇到错误了吗? 正在发生什么

标签: iphone ios4 memory audio


【解决方案1】:

您的代码无法正常工作,因为您在使用完资源之前就将其处理掉了。

AudioServicesDisposeSystemSoundID(soundID);

不应在播放声音时调用。你需要重新组织你的代码。

如果更高级别的NS 类可以完成这项工作,您还应该避免使用CF 类。在这种情况下,他们可以。方法如下:

回复评论的代码: SoundExampleViewController.h:

#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
@interface SoundExampleViewController : UIViewController{
    SystemSoundID bear3SoundID;
}
-(IBAction)playSoundButtonPushed:(id)sender;
@end

SoundExampleViewController.m:

#import "SoundExampleViewController.h"
@implementation SoundExampleViewController
-(IBAction)playSoundButtonPushed:(id)sender{
    AudioServicesPlaySystemSound(bear3SoundID);
}
- (void)viewDidLoad{
    [super viewDidLoad];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Bear3" ofType:@"wav"]; 
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path],&bear3SoundID);
}
- (void)viewDidUnload{
    [super viewDidUnload];
    AudioServicesDisposeSystemSoundID(bear3SoundID);
}
@end

即使您坚持使用viewDidLoad 方法中的CF 类,您也应该遵循这个总体布局。

【讨论】:

  • 是我必须添加的新代码。我刚开始编程,所以我不太了解
  • 该代码能否用于制作音板应用程序,我是否只需为每个声音复制该代码
  • 是的,此代码适用于音板应用程序。对于多个声音,只需以相同的方式创建更多 soundID。当然,每种声音都可能有自己的 IBAction 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
相关资源
最近更新 更多