Qtオーディオ出力の例を次のように変更しています。
- サードパーティからオーディオミキサーAPIにアクセスできます。
- このミキサーからデータを読み取る方法は次のとおりです。
void AudioMixer::ReadData(uint8_t *stream, uint32_t len);
- この例でこのデータを出力するために変更している関数は、
qint64 Generator::readData(char *data, qint64 len)
私の理解が正しければ、メソッドをQIODevice
オーバーライドしてGenerator::readData
メソッドを呼び出し、によって使用されるAudioMixer::ReadData
をにキャストして、で使用することにより、プッシュモードで操作できるはずです。uint8_t*
AudioMixer
char*
QIODevice
私はこれがどういうわけか可能であると考えるのは正しいですか?もしそうなら、誰かがキャストを行う方法についてアドバイスできますか?uint8_t*
そうでない場合は、?を使用して出力する方法について説明していただけますQIODevice
か?
完全を期すために、メソッドは次のとおりです。
void AudioMixer::ReadData(uint8_t *stream, uint32_t len)
{
if(buffer.GetMaximumReadSize() < len)
{
memset(stream, 0, len);
}
else
{
buffer.Read(stream, len);
}
}
と
qint64 Generator::readData(char *data, qint64 len)
{
qint64 total = 0;
while (len - total > 0) {
const qint64 chunk = qMin((m_buffer.size() - m_pos), len - total);
memcpy(data + total, m_buffer.constData() + m_pos, chunk);
m_pos = (m_pos + chunk) % m_buffer.size();
total += chunk;
// Need to call AudioMixer::readData in here
}
return total;
}