Звук не играет - PullRequest
       9

Звук не играет

0 голосов
/ 08 ноября 2011
-(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);
}

Не воспроизводится звуковой файл

1 Ответ

3 голосов
/ 09 ноября 2011

Ваш код не работает, потому что вы распоряжаетесь своими ресурсами до того, как закончите с ними.

AudioServicesDisposeSystemSoundID(soundID);

Не следует вызывать во время воспроизведения звука. Вам нужно реорганизовать свой код.

Вам также следует избегать классов CF, если классы более высокого уровня NS могут выполнять эту работу. И в этом случае они могут. Вот как это сделать:

Код в ответ на комментарий: 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

Даже если вы придерживаетесь классов CF в методе viewDidLoad, вы должны следовать этой общей схеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...