AudioServicesで音制御できない

2012/05/30
AudioServicesCreateSystemSoundID を利用して短い音を再生するのは良いのですが、

ネットワーク通信するとボリュームボタンで制御できない

事が判明 たちの悪い事に、adMobを利用するだけでダメです。 と言う事で、短い音を再生するには OpenALが一番手っ取り早いかと。 AVAudioPlayerはBGM鳴らすのはいいのですが、効果音のように連続で音をならすようなモノはちょっと不向きです。 --2012/06/08追記 OpenALは、AdMobとかで処理が割り込まれた場合、オーディオが止まることがあります。 以下の対処でいいらしい。 restarting openAL after application interruption on the iPhone AudioSessionInitialize で interruptionListener を設定し、割り込みがあった時に OpenAL を Suspendしてやる感じだそうです。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self loadALC];

    OSStatus result = AudioSessionInitialize(NULL, NULL, interruptionListener, (__bridge void*) self);
    NSLog(@"result %@", result);

    return YES;
}

- (void)loadALC {
    UInt32 category = kAudioSessionCategory_AmbientSound;
    AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (category), &category);
    AudioSessionSetActive(YES);
    
    ALCdevice*  device;
    ALCcontext* alContext = alcGetCurrentContext();
    if (alContext == nil) {
        device = alcOpenDevice(NULL);
        alContext = alcCreateContext(device, NULL);
        alcMakeContextCurrent(alContext);
    }
}

void interruptionListener(void *inUserData, UInt32 inInterruption) {
    if (inInterruption == kAudioSessionBeginInterruption) {
        printf("BeginInterruption\n");
        ALCcontext* alContext = alcGetCurrentContext();
        alcMakeContextCurrent(NULL);
        alcSuspendContext(alContext); 
    }
    if (inInterruption == kAudioSessionEndInterruption) {
        printf("EndInterruption\n");
        UInt32 category = kAudioSessionCategory_AmbientSound;
        AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
        ALCcontext* alContext = alcGetCurrentContext();
        alcMakeContextCurrent(alContext);
        alcProcessContext(alContext);
    }
}
AWS CLI と jq でインスタンス一覧を整形して表示
React と Laravel7 のプロジェクトを作成する
Homebrewインストール-2020年版
3直線で囲まれた範囲塗りつぶし
PuLP で線形最適化問題を解く
カスタムのペジネーションを作る
node-sass を使って sass をコンパイルする
Log ファサードでSQLログを分離して書き出す
いちから始める Docker - 複数のコンテナを使う - (2020年)
いちから始める Docker - docker-compose を使う - (2020年)
AWS ECR を使ってみる
Laravel7 でマルチ認証
Mac に AWS Client を設定する
Laravel 7 リリース
v-html でHTML表示する
Laravel で Vue コンポーネントを使う
Laravel で Nuxt.js を使ってみる(Docker環境)
いちから始める Docker -コンテナをビルド- (2020年)
いちから始める Docker -起動してみる- (2020年)
Mac で MySQL(8系)
composer で vendor がインストールできない
Eloquent の日付を Carbon で扱う
webpack 4 入門(npm編)
[Mac]容量を減らす
DIコンテナはじめ
freee SDKを Laravel で使ってみる
freee API を使ってみる
Segueを利用しない画面遷移
Xcode11.3 で XVim2 を利用する
Codable で JSONを読み込み
Webpack入門(yarn編)
MacからLaradock PostgreSQLで接続エラー
Dockerで不要なコンテナ・イメージを削除
Mac で Laradock の構築
yarn インストール&プロジェクト作成
Laravel 6.x 構築(Homestead編)
Composer インストール
nvm インストール
npm install が Mac でエラー
HTMLタグでカーソルが同時処理(ミラーリング)されてしまう
DI(依存性注入)
[Ubuntu]Let's Encryptで無料の証明書を利用する
[Apache]Apache2.4のアクセス制限が変更
[Ubuntu]rootのログインとsudo権限追加
タミヤ マイコンロボット工作セットをMacに接続してみた
pgAdimn4 でブラウザで開けなくなる
Java8 を HomebrewとjEnvで構築
Android Studio環境構築 2019
ロケールの再構築
vagrant グループに Apacheを追加