Классы, использующие AudioToolBox для воспроизведения звуковых файлов, компилируются, но без звука

У меня есть два класса, в одном из которых я инициализирую SystemSoundID, а затем в методе, который ссылается на фактический звуковой файл. Но когда я вызываю методы в своем MainViewController и воспроизводю их через IBAction, звук не воспроизводится.

Звук.ч:

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

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

    @end

Звук.м:

    #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

Помощь относительно того, что я делаю неправильно, будет высоко оценена! Заранее спасибо!


person gymbry    schedule 06.03.2014    source источник


Ответы (1)


Здесь

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

переменная _yayFileID относится к переменной в вашем MainViewController, которая совершенно не связана с переменной yayFileID в объекте TheSound.

Может быть, если вы попробуете

AudioServicesPlaySystemSound(foo.yayFileID);

Даже если вы это сделаете, я не думаю, что это сработает, потому что, кроме того, ваша переменная foo не инициализирована, поэтому вызов initSound отправляется в ноль. Вы должны сделать что-то вроде этого

foo = [[TheSound alloc] init];
[foo initSound];
person Merlevede    schedule 06.03.2014