2011-11-08 270 views
-1
-(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); 
} 

它不播放聲音文件沒有播放聲音時

+0

您是否收到錯誤?發生什麼事? – Amy

回答

3

您的代碼不工作,因爲你處置你的資源,你與他們之前完成。

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 

即使你堅持使用CF類的viewDidLoad方法,你應該遵循這個總體佈局。

+0

是我必須添加的新代碼。我剛開始編程,所以我不知道太多 – alfred

+0

@alfred;我用一些示例代碼編輯了答案。 – NJones

+0

將代碼工作,使一個音板應用程序,我只是複製該代碼爲每個聲音 – alfred