7

リリース間近のゲームがありますが、非常に厄介な問題が1つあります。私たちのベータテスター電話の1つで、彼はゲーム内の効果音を聞くことができません。しかし、彼はバックグラウンドミュージックとタイトルスクリーンミュージックをうまく聞くことができます。

背景とタイトルの音楽は両方ともAVAudioPlayerを介して再生されています(これらはより長く、ループや音量調節などが必要です)。効果音は単にAudioServicesPlaySystemSoundで再生されます(非常に短いので、正確な制御や終了時期を知る必要はありません)。これはほとんどのiPhoneで機能しますが、これでは機能しません。これらはすべて、AVAudioSessionCategorySoloAmbientのオーディオセッションで再生されています。

だから私は2つの質問があります:-最初に、これは許容できる実装ですか?つまり、これら2つのフレームワークを混在させることができないという私が見逃したこと、またはそれらを混在させることが悪い考えである理由はありますか?-第二に、誰かが以前にこのようなものを見たことがありますか?もしそうなら、あなたはそれを回避する方法を見つけましたか?

追加の背景メモ:彼の電話では、2つのフレームワークが混在しているとかなり結論的に言えます。タイトル画面の音楽を追加したのとほぼ同じビルドになるまで、彼は音を聞くことができました。また、AVAudioPlayerを介して機能するようにサウンドの1つを変更すると、彼はそれを聞くことができます。残念ながら、サウンドをAVAudioPlayersに移動することはできません。これは、パフォーマンスがまったく良くないためです。また、より適切な同期が必要です。

4

2 に答える 2

9

編集2
エラーの原因を特定しました。2つの異なるオーディオフレームワークは、2つの異なる音量設定で再生されます。メインボリューム(アプリを起動すると表示され、タイトルは表示されません)と呼び出し音ボリューム(アプリをロードせずにホーム画面を表示しているときに表示されます)があります。AVAudioPlayerの呼び出しは、メインの音量設定で再生されます。カテゴリをAVAudioSessionCategorySoloAmbientに設定したので(以下のコードを参照)、これはアプリ内でボリュームロッカーを使用する場合に調整されるボリュームコントロールです。ただし、SystemSoundsはリンガーボリュームで再生されます。これはアプリ内では表示されないため、ユーザーはゲーム中に設定を調整できません。

ユーザーが混乱する可能性があることは簡単にわかります。たとえば、呼び出し音を低く設定したり、オフに設定したりしているとします。彼らはゲームを始めます。タイトル画面の音楽(AVAudioPlayer)が聞こえ、音量を上げたり下げたりすることができ、正常に応答します。次に、ゲームを開始して効果音を再生します(SystemSounds)。呼び出し音の音量が小さい/オフであるため、何も聞こえません。効果音を聞くために、それらは音量を上げ、背景音楽はそれに応じて反応します。したがって、この観点からは、効果音が再生されていないように見えます。

このような状況が発生した場合は、ゲームをプレイする前に呼び出し音の音量が上がっていて、ミュートスイッチがオンになっている(つまり、ミュートされていない)ことをユーザーに確認してもらいます。自分でテストを行うことで、これらすべてを確認することもできます。呼び出し音の音量を下げ、アプリ内の音量を上げます。SystemSoundsはミックスから外れるはずです。

元の答え:すべてのドキュメントを再検討したところ、答えが見つかりました。オーディオセッションを適切にアクティブ化していませんでした。以前は、カテゴリを設定するために次のコードしかありませんでした。

NSError *setCategoryError = nil; 
BOOL    categoryWasSet    = [[AVAudioSession sharedInstance] 
                              setCategory: AVAudioSessionCategorySoloAmbient 
                              error: &setCategoryError]; 

ただし、オーディオセッションを明示的にアクティブ化するには、次のコードも追加する必要がありました。

NSError *activationError  = nil;
BOOL    activationSuccess = [[AVAudioSession sharedInstance]
                              setActive: YES 
                              error: &activationError];

このユーザーで再テストしたところ、問題は完全に修正されました。同様の問題を抱えている可能性のある人に役立つことを願っています。

編集:これは結局のところ問題を解決していないようです。テスターから誤検知がありましたが、詳しく調べてみると、SystemSoundで生成された音が実際に聞こえなかったようです。

于 2009-11-02T17:21:05.627 に答える
8

アプリストアには、これら2つのフレームワークを組み合わせた2つのアプリがあります。開始と停止、音量調節が必要なサウンド用のAVAudioPlayerと、短いビープ音とクリック音用のAudioServicesツールボックス。私が考えることができる唯一の考えは、AVAudioPlayerの音量がAudioServicesサウンドとは別に制御されているように見えるということです。そのため、テスターのサウンドがオフになっていないこと(バイブレーションモードスイッチを使用)、または音量が大幅に低下していないことを確認してください。

これで問題が解決しない場合は、サウンド/コードについて詳しく教えてください。アプリにコードを追加して、同じ動作が得られるかどうかを確認できます。もちろん、ほとんどのテスターに​​はこの問題がないように思えますが、おそらく私もそうは思いません。

于 2009-11-02T04:14:37.573 に答える