我修改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