我正在制作iOS 8 Objective-C应用程序(部署在我的iPhone 5上),我正在使用此代码通过手机从应用程序播放声音:
@property (assign) SystemSoundID scanSoundID;
...
- (void)someFunction {
...
//Play beep sound.
NSString *scanSoundPath = [[NSBundle mainBundle]
pathForResource:@"beep" ofType:@"caf"];
NSURL *scanSoundURL = [NSURL fileURLWithPath:scanSoundPath];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)scanSoundURL, &_scanSoundID);
AudioServicesPlaySystemSound(self.scanSoundID);
...
}
此代码工作正常,但beep.caf声音非常响亮。我希望以50%的音量播放哔声(不改变iPhone的音量)。换句话说,我不想触摸iPhone的实际音量,我只想播放幅度较小的声音。
如何实现这一目标(最好使用我现在正在使用的音频服务)?
更新
在尝试实现路易斯的答案之后,这段代码没有播放任何音频(即使我的手机不在静音中并且我的音量已经打开):
NSString *scanSoundPath = [[NSBundle mainBundle] pathForResource:@"beep"
ofType:@"caf"];
NSURL *scanSoundURL = [NSURL fileURLWithPath:scanSoundPath];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:scanSoundURL
error:nil];
player.volume = 0.5;
[player play];
答案 0 :(得分:3)
您的UPDATE代码创建player
作为局部变量,当方法(您调用此代码)返回时,该变量将超出范围。
一旦player
超出范围,它就会被释放,音频甚至没有机会开始播放。
你需要retain
某个地方的玩家:
@property AVAudioPlayer* player;
...
- (void)initializePlayer
{
NSString *scanSoundPath = [[NSBundle mainBundle] pathForResource:@"beep"
ofType:@"caf"];
NSURL *scanSoundURL = [NSURL fileURLWithPath:scanSoundPath];
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:scanSoundURL
error:nil];
self.player.volume = 0.5;
}
然后在你打电话的其他地方:
[self.player play];
答案 1 :(得分:2)
来自Multimedia Programming Guide"播放UI音效或使用系统声音服务调用振动":
此外,当您使用AudioServicesPlaySystemSound函数时:
- 在当前系统音量下播放声音,没有可用的编程音量控制
因此,根据Apple Docs,它似乎不可能。但AVAudioPlayer
类允许您通过其volume
属性执行此操作。
在您当前的代码中,您只需添加
即可AVAudioPlayer *newPlayer =
[[AVAudioPlayer alloc] initWithContentsOfURL: scanSoundURL
error: nil];
[newPlayer play];
答案 2 :(得分:0)
使用系统音量播放声音
@interface UIViewController () {
AVAudioPlayer *audioPlayer;
}
-(void) PlayCoinSound {
//#import <AVFoundation/AVFoundation.h>
NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"CoinSound" ofType:@"mp3"];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:soundPath] error: nil];
audioPlayer.volume = 1.0;
[audioPlayer prepareToPlay];
[audioPlayer play];
}
以完整声音播放
- (void)PlayWithFullVolume {
//#import <AudioToolbox/AudioToolbox.h>
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
AudioServicesPlaySystemSound (soundID);
}