我在笔尖(xib)中有一个UIButton,它喜欢在触摸时播放声音,需要遵循什么协议来实现这一点?
**彻底改变了问题**在Stack Overflow的整个过程中,我学到了很多东西,而不仅仅是我通常需要帮助的东西(Objective-C,xCode),还有Stack Overflow的工作原理。我发现它是一个丰富的信息和支持,我已经看过我之前是如何提出这个问题的,它完全没有任何意义。为了帮助未来的用户,我编辑了我最初要求的内容,其他人可以理解,就像Naveen在下面所做的那样。道歉
答案 0 :(得分:3)
添加此框架
AudioToolBox framework
包含此头文件.h文件
#include <AudioToolbox/AudioToolbox.h>
CFURLRef soundFileURLRef;
SystemSoundID soundFileObject;
在viewdidLoad中添加此代码
NSURL *tapSound = [[NSBundle mainBundle] URLForResource: @"Voice035"
withExtension: @"amr"];
// Store the URL as a CFURLRef instance
self.soundFileURLRef = (CFURLRef) [tapSound retain];
// Create a system sound object representing the sound file.
AudioServicesCreateSystemSoundID (
soundFileURLRef,
&soundFileObject
);
按钮点按,调用此方法
AudioServicesPlayAlertSound (soundFileObject);
以dealloc发布
AudioServicesDisposeSystemSoundID (soundFileObject);
CFRelease (soundFileURLRef);
答案 1 :(得分:2)
我想说,创建一个'Observer'类,播放所有按钮连接的声音。我将在下面给出一个例子,它是一个单例类。它是随心所欲地编写的,没有经过测试,但会给你一个想法。
// SoundObserver.h
#include <AVFoundation/AVFoundation.h>
@interface SoundObserver {
AVAudioPlayer *audioPlayer;
}
-(void)playSound;
+(SoundObserver*)sharedInstance;
@property (nonatomic, retain) AVAudioPlayer *audioPlayer;
@end
//SoundObserver.m
static SoundObserver *instance = nil;
@implementation SoundObserver
-(id)init {
self = [super init];
if(self) {
//Get path to file.
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"sound"
ofType:@"wav"];
// filePath to URL
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath];
//Initialize the AVAudioPlayer.
self.audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:fileURL error:nil];
// Preloads buffer and prepare for use.
[self.audioPlayer prepareToPlay];
[filePath release];
[fileURL release];
}
}
+(SoundObserver*)sharedInstance {
@synchronized(self) {
if (instance == nil)
instance = [[self alloc] init];
}
return instance;
}
-(void)playSound {
//make sure the audio resets to beginning each activation.
[self.audioPlayer play];
}
-(void)dealloc {
//Clean up
[self.audioPlayer release];
self.audioPlayer = nil;
[super dealloc];
}
// User example.
In applicationDidFinishLaunching:
[SoundObserver sharedInstance];
From here you can connect all buttons to the same function, or call it from anywhere in the App that #import's SoundObserver.h
-(IBOutlet)buttonClick:(id)sender {
[[SoundObserver sharedInstance] playSound];
}