使用 AudioToolBox 播放声音文件的类编译但没有声音

Posted

技术标签:

【中文标题】使用 AudioToolBox 播放声音文件的类编译但没有声音【英文标题】:Classes using AudioToolBox to play sound file compiles but no sound 【发布时间】:2014-03-06 04:21:09 【问题描述】:

我有两个类,其中一个我正在初始化 SystemSoundID,然后在一个链接到实际声音文件的方法中。 但是当我调用 MainViewController 中的方法并通过 IBAction 播放时,没有声音播放。

声音.h:

    #import <Foundation/Foundation.h>
    #import <AudioToolbox/Audioservices.h>

    @interface TheSound : NSObject 
        SystemSoundID yayFileID;
    
    @property(nonatomic) SystemSoundID yayFileID;
    - (void) initSound;

    @end

声音.m:

    #import "TheSound.h"
    #import <AudioToolbox/AudioServices.h>

    @implementation TheSound
    @synthesize yayFileID;

    - (void) initSound 
        NSString *yayPath = [[NSBundle mainBundle] pathForResource: @"yay" ofType: @"wav"];
        CFURLRef yayURL = (__bridge CFURLRef) [NSURL fileURLWithPath:yayPath];
        AudioServicesCreateSystemSoundID(yayURL, &yayFileID);
    

    @end

MainViewController.h:

    #import <UIKit/UIKit.h>
    #import "TheSound.h"

    @interface MainViewController : UIViewController

    - (IBAction) playSound: (id) sender;

    @end

MainViewController.m:

    #import "MainViewController.h"
    #import <AudioToolbox/AudioServices.h>
    #import "TheSound.h"

    @interface MainViewController ()
    @property SystemSoundID yayFileID;
    @property (nonatomic) TheSound *foo;
    @end

    @implementation MainViewController
    @synthesize foo;

    - (void)viewDidLoad 
        [foo initSound];
        [super viewDidLoad];
    


    - (IBAction)playSound:(id)sender 
        AudioServicesPlaySystemSound(_yayFileID);
    

    @end

对于我做错的事情的帮助将不胜感激!提前致谢!

【问题讨论】:

【参考方案1】:

这里

- (IBAction)playSound:(id)sender 
    AudioServicesPlaySystemSound(_yayFileID);

变量_yayFileID 引用了MainViewController 中的一个变量,它与TheSound 对象中的yayFileID 变量完全无关。

也许你试试

AudioServicesPlaySystemSound(foo.yayFileID);

即使你这样做,我也不认为它会起作用,因为另外,你的 foo 变量没有初始化,所以调用 initSound 被发送到 null。你应该这样做

foo = [[TheSound alloc] init];
[foo initSound];

【讨论】:

以上是关于使用 AudioToolBox 播放声音文件的类编译但没有声音的主要内容,如果未能解决你的问题,请参考以下文章

降低 AudioToolbox 播放的音量

如何停止 AudioToolbox 声音?

MonoTouch:播放声音

Audio Toolbox 声音变化问题

IOS音频1:之采用四种方式播放音频文件AudioToolbox AVFoundation OpenAL AUDIO QUEUE

iOS 中无法播放声音 - 不是源代码问题