我使用Qt制作一些音频输出。有一个示例audioouput,其中纯虚函数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.我可以吗?谢谢!
好的,只是不接收评论"什么是慢": 首先 - memcpy慢于指针赋值 第二 - 是的,我在声音播放方面有延迟,我希望在每一点都能使程序达到最佳状态。
P.S。我试图这样做,而且我没有声音,所以也许答案是否定的。那为什么?
答案 0 :(得分:0)
此方法的签名仅允许您通过复制数据来返回数据。 分配指针是没有意义的,因为此参数作为副本传递,因此指定的值不会在方法外显示。
memcpy
对于实时音频输出来说并不慢(除非你是在8位处理器上进行的)。
音频代码太慢会导致声音出现间隙,但不会导致延迟。延迟是音频缓冲区过大的结果。