我在使用Sprite Kit时遇到问题,当我想在用户交互后播放声音时.
用户正在使用应用程序(例如Spotify)收听音乐.
用户想要在他的歌曲中播放我的游戏,目前当使用启动我的应用程序时,他的歌曲就会停止.
我想防止这种行为,事实上:如果其他应用程序正在使用"声音",或者如何播放我的声音并保持用户的音乐播放,我该怎么办才能播放声音.
目前这是我的代码:
@property (strong, nonatomic) SKAction *hitSound;
Run Code Online (Sandbox Code Playgroud)
在init方法中:
_hitSound = [SKAction playSoundFileNamed:@"laugh.caf" waitForCompletion:NO];
Run Code Online (Sandbox Code Playgroud)
用户按下屏幕后:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
SKAction *sequence = [SKAction sequence:@[_hitSound]];
[node runAction:sequence completion:^{
//Stuff
}];
Run Code Online (Sandbox Code Playgroud)
}
您的应用程序需要管理允许后台音频继续播放的AVAudioSession.这将允许后台音频应用程序继续播放,您的应用程序声音将与它混合.
该AVAudioSession类是一个单例类,并且是基于部分AVFoundation框架.务必将AVFoundation链接到目标.在需要它的类中导入框架.
#import <AVFoundation/AVFoundation.h>
Run Code Online (Sandbox Code Playgroud)
声明应用程序音频会话的好地方在应用程序委托中,因此可以在应用程序中放置以下代码:didFinishLaunchingWithOptions: method.
// activate a mixable session
// set audio session category AVAudioSessionCategoryPlayback
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeDefault error:nil];
[[AVAudioSession sharedInstance] setActive:YES error: nil];
Run Code Online (Sandbox Code Playgroud)
就你自己的应用程序听起来或不播放而言,一种可能性是将BOOL类型的属性命名为'mute'并检查是否需要SKAction来播放音频.您可以检查是否正在播放背景音频并相应地设置"静音"属性.您还可以决定为设置此属性的用户提供界面.可能性很多.
您可以检查背景音频是否像这样播放 -
BOOL isPlayingAudio = [[AVAudioSession sharedInstance] otherAudioPlaying];
Run Code Online (Sandbox Code Playgroud)
从这里开始,您的代码可以决定将self.mute设置为什么.
AVAudioSession类参考这里找到- AVAudioSession类参考
| 归档时间: |
|
| 查看次数: |
1148 次 |
| 最近记录: |