iTunes音楽再生時のBGM制御 cocos2d-x 3.x - Qiita
http://qiita.com/noir/items/83e8ad09cebb57a32224
***以下の内容はQiitaに再アップしたので上記URLを御覧ください(見やすいです)
Audio Session プログラミングガイド
https://developer.apple.com/jp/documentation/AudioSessionProgrammingGuide.pdf
AVAudioSession
https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/index.html
やりたいこと
やるべきこと
3番に関しては、iTunes音楽など他のサウンドが止まった後にゲームBGMを再生する際、リジュームして再生したかったのでそのようにしました。stop, play でも適宜実装すれば良いと思います。
ポイント
AppController.mmで実装してしまうと、アプリ起動時に他で曲が再生されていない場合Ambientにカテゴリ設定してもSoloAmbientになってしまうようでした。
曲が再生中にアプリを起動した場合にはAmbientに設定されるのですが、、、。
設定する場所が適切では無いんでしょうね(didFinishLaunchingWithOptionsで設定します的なことは書かれてないから)。このところよくわかってません。
実装概要
GameUtil.h
class GameUtil
{
public:
static bool setCategoryAmbient();
static bool isOtherAudioPlaying();
};
GameUtil.mm
bool GameUtil::setCategoryAmbient()
{
NSError* error = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&error];
if (error) {
return false;
} else {
return true;
}
}
bool GameUtil::isOtherAudioPlaying()
{
return [[AVAudioSession sharedInstance] isOtherAudioPlaying];
}
http://qiita.com/noir/items/83e8ad09cebb57a32224
***以下の内容はQiitaに再アップしたので上記URLを御覧ください(見やすいです)
Audio Session プログラミングガイド
https://developer.apple.com/jp/documentation/AudioSessionProgrammingGuide.pdf
AVAudioSession
https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/index.html
やりたいこと
- アプリ起動時にiTunesで音楽再生状態であれば音楽を優先して再生し続ける
- アプリ起動時には音楽再生をしていないが、タスク切り替えで音楽再生後にアプリアクティブになったときも音楽を優先して再生し続ける
やるべきこと
- オーディオセッションのカテゴリを「AVAudioSessionCategoryAmbient」にする
- otherAuidoPlayingプロパティで判別する
- ボリュームを0にする
3番に関しては、iTunes音楽など他のサウンドが止まった後にゲームBGMを再生する際、リジュームして再生したかったのでそのようにしました。stop, play でも適宜実装すれば良いと思います。
ポイント
- AppController.mmのdidFinishLaunchingWithOptionsで設定せず、AppDelegate.cppのdidFinishLaunchingWithOptionsで設定する
AppController.mmで実装してしまうと、アプリ起動時に他で曲が再生されていない場合Ambientにカテゴリ設定してもSoloAmbientになってしまうようでした。
曲が再生中にアプリを起動した場合にはAmbientに設定されるのですが、、、。
設定する場所が適切では無いんでしょうね(didFinishLaunchingWithOptionsで設定します的なことは書かれてないから)。このところよくわかってません。
実装概要
- Objective-CとC++のブリッジとなる例)GameUtil.h, GameUtil.mm(Objective-C++)を追加してAppDelegate.cppでインクルード
- GameUtilには以下の例)メソッドを作る
- Ambientカテゴリを設定するsetCategoryAmbientメソッド
- otherAuidoPlayingプロパティのブーリアンを返すisOtherAudioPlayingメソッド
GameUtil.h
class GameUtil
{
public:
static bool setCategoryAmbient();
static bool isOtherAudioPlaying();
};
GameUtil.mm
#import <AVFoundation/AVFoundation.h>
bool GameUtil::setCategoryAmbient()
{
NSError* error = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&error];
if (error) {
return false;
} else {
return true;
}
}
bool GameUtil::isOtherAudioPlaying()
{
return [[AVAudioSession sharedInstance] isOtherAudioPlaying];
}