1

Qtを使用してオーディオ出力を作成しています。オーディオ出力の例があり、純粋な仮想関数 qint64 QIODevice::readData ( char * data, qint64 maxSize ) がこのように再実装されています (これは例の実際のコードではありません)。

qint64 Generator::readData(char *data, qint64 len)
{
    memcpy(data, m_buffer.data(), len);
    return len;
}

したがって、データへのポインターを取得し、バッファーからこのデータにメモリをコピーします。次のように、ポインターデータを新しい場所に割り当てることができるかどうか疑問に思っています。

qint64 Generator::readData(char *data, qint64 len)
{
    data = m_buffer.data();
    return len;
}

なぜなら、memcpy は遅く、C です。ありがとうございました!

OK、「何が遅いのか」というコメントを受け取らないでください: 1 つ目 - memcpy はポインター割り当てよりも遅い 2 つ目 - はい、サウンドの再生にレイテンシーがあります。プログラムをあらゆる点で最適化したいと考えています。

PS私はそれをやろうとしていますが、音が出ないので、答えはノーかもしれません. それでなんで?

4

1 に答える 1

0

このメソッドの署名では、データをコピーすることによってのみデータを返すことができます。このパラメーターはコピーとして渡されるため、ポインターの割り当ては無意味です。そのため、割り当てられた値はメソッドの外では見えません。

memcpyリアルタイムのオーディオ出力はまったく遅くありません (8 ビット プロセッサで実行している場合を除く)。

オーディオ コードが遅すぎると、サウンドにギャップが発生する可能性がありますが、レイテンシは発生しません。遅延は、オーディオ バッファが大きすぎることが原因です。

于 2015-06-03T09:05:10.953 に答える