OpenSL ES は、特に便利なオーディオ API になるように設計されています。高度なオーディオ ワークステーション アプリ、シンセサイザー アプリなどは、プログラマーによって多くのエフェクトと内部ミキシングが行われる可能性があります。特に設計とコードの移植性のために必要なのは、出力をどこかに置くことだけです。
OpenSL では、サウンドを同時に再生したい場合は、それらを自分でミックスし、ミックスされたサウンドでバッファーをロードする必要があります。これを行う最も簡単な方法は、サンプルごとに加算することです。各サウンドが最大のヘッドルームを達成できると仮定して、入力サウンドの数で割ります。(この分割により音量が少し低くなる可能性がありますが、クリッピングが許容されないと仮定すると、それを回避するには多少の努力が必要です。)
2 つのサウンドをミックスするには、出力のサンプル (つまり、エンキューされるデータ) を作成するときに、次のようにします。
out[i] = (snd1[i] + snd2[i])/2;
(計算を最適化し、データ型に注意し、別のインデックスを使用することもできます。)
一般に:
out[i] = (snd1[i] + ... + sndN[i])/N;