我想熟悉 mac OSX 上的 Objective C/Interface Builder 编程。我通常使用声音,所以我尝试使用 NSSound 类编写一个简单的音频播放器。
我已经设法创建了一个基本应用程序,该应用程序通过单击“Importer”按钮加载声音,然后通过单击“Lire”按钮进行播放。
这是我的问题:我希望在播放声音时显示“Ça joue Simone!...”的窗口中有一个TextField,而当声音播放完毕时什么也没有。
单击“里拉”按钮时,我想要的消息已成功显示,但即使在播放完声音后仍会停留在那里。
这就是为什么我想我对如何使用 didFinishPLaying 委托方法有误解。
有人有提示吗?
//
// ControleurLecteur.h
// LecteurSon
//
#import <Cocoa/Cocoa.h>
@interface ControleurLecteur : NSObject {
NSSound *son ;
IBOutlet NSTextField *infoTextField ;
IBOutlet NSTextField *cheminField ;
IBOutlet NSTextField *durationField ;
}
-(IBAction)lireSon:(id)sender ;
-(IBAction)importerSon:(id)sender ;
-(IBAction)son:(NSSound *)son didFinishPlaying:(BOOL)bienjoue;
@end
//
// ControleurLecteur.m
// LecteurSon
//
#import "ControleurLecteur.h"
@implementation ControleurLecteur
-(IBAction)importerSon:(id)sender {
NSString *Chemin = [[NSString alloc] initWithString:(NSString *)@"epno"] ;
son = [[NSSound soundNamed:Chemin] retain];
// Limiter l'affichage de la durée à 3 chiffres après la virgule
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:3];
[[durationField cell] setFormatter:numberFormatter];
// Remplissage du champ de texte durée
[durationField setFloatValue:[son duration]] ;
}
-(IBAction)lireSon:(id)sender {
BOOL bienjoue;
bienjoue = [son play];
bienjoue = TRUE;
[infoTextField setStringValue:@"Ça joue Simone !..."];
son:didFinishPlaying:bienjoue;
}
-(IBAction)son:(NSSound *)son didFinishPlaying:(BOOL)bienjoue {
[infoTextField setStringValue:@""] ;
}
@end