【发布时间】:2015-03-01 05:50:30
【问题描述】:
我正在制作一个 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 的实际音量,我只想播放幅度较小的声音。
我怎样才能做到这一点(最好使用我现在使用的音频服务)?
更新
在尝试执行 Louis 的回答后,这段代码没有播放任何音频(即使我的手机没有静音并且我的音量已经调高):
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];
【问题讨论】:
-
hmm... 尝试实现 AVAudioPlayers 委托方法,特别是
audioPlayerDecodeErrorDidOccur:error,看看您在尝试播放时是否遇到错误。 Idk 如果这很重要,但也尝试在[NSOperationQueue mainQueue] addOperationWithBlock{}];中坚持播放电话 -
没关系.. 尝试断点并确保您的 URL 不为零。并检查 BuildPhases 下的项目设置,并确保您的 caf 文件列在 Copy Bundle Resources 下
标签: ios objective-c audio system-sounds