これを行うQt固有のメソッド/クラスがあるかどうかはわかりません。ただし、自分で行うのは非常に簡単です。
最も基本的な方法 (PCM を使用していると仮定) は、2 つのストリーム/バッファーを単語ごとに追加するだけです (覚えていれば、それらは 16 ビットの PCM 単語でした)。
したがって、2 つの入力バッファーがある場合は、次のようになります。
int16 buff1[10];
int16 buff2[10];
int16 mixBuff[10];
// Fill them...
//... code goes here to read from the buffers ....
// Add them (effectively mix them)
for (int i = 0; i < 10; i++)
{
mixBuff[i] = buff1[i] + buff2[i];
}
さて、これは非常に大雑把で、スケーリングは考慮されていません。したがって、buff1 と buff2 の両方がダイナミック レンジの 80% を使用することを想像してください (これをフル ボリュームと呼び、それを超えると歪みが発生します)、それらを一緒に追加すると、数値オーバーランが発生します (つまり、16 ビットの最大値は 65535 であるため、50000 + 50000 はオーバーランになる)。
混合するたびに、実質的に 2 つの入力の半分が必要になります (つまり、65535 / 2 + 65535 / 2 = 65535 ... つまり、それらを合計するとオーバーランできなくなります)。したがって、ミックスコードは次のようになります。
for (int i = 0; i < 10; i++)
{
mixBuff[i] = (buff1[i] >> 1) + (buff2[i] >> 1);
}
できることは他にもたくさんありますが (ノイズの除去など...)、計算がややこしくなり始めます。これは非常に簡単です。後でシフトを使用して、必要に応じて単純な音量コントロールとして音量を増減できます。
編集
注意すべきことの1つ... readline() を使用しています(ドキュメントでは、データをASCIIとして読み取ると書かれています)。私は常に read() を使用しますが、読み出される「フォーマット」は明記されていませんが、バイナリを想定しています。したがって、このコードは readline() を使用すると機能しない可能性がありますが、試したことはありません。read() ではうまく機能します。データを操作したい場合は、ASCII で作業する必要はありません。