我修改Qt Audio Output example如下:轉換uint8_t *爲char *爲使用的QIODevice
- 我已經從第三方獲得的音頻混音器API。
- 從該混頻器讀取數據的方法是
void AudioMixer::ReadData(uint8_t *stream, uint32_t len);
- 我改變輸出這些數據的例子是
qint64 Generator::readData(char *data, qint64 len)
如果我的理解是正確的,我應該能夠操作功能QIODevice
處於推模式,方法是重寫Generator::readData
方法來調用AudioMixer::ReadData
方法,並將AudioMixer
使用的uint8_t*
轉換爲char*
以與QIODevice
一起使用。
我正確地認爲這是可能的嗎?如果是這樣,有人可以建議如何做演員?如果不是的話,你能提供一個關於如何使用QIODevice
來輸出uint8_t*
的解釋嗎?
爲了完整起見,方法是:
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;
}
uint8_t * a; char * b =(char *)a; – 2012-04-24 13:13:48
真的那麼簡單嗎?是否沒有潛在的問題,因爲'char'本質上是簽名的? – 2012-04-24 13:21:26
簽名(缺少更好的單詞)只應在您要執行移位操作時纔有用。如果向右移動,則無符號變量將始終填充0,帶符號的變量帶有1或0,具體取決於值。 – 2012-04-24 13:25:06