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。我可以吗?谢谢!

好的,只是不要收到“什么是慢”的评论:首先 - memcpy 比指针分配慢第二 - 是的,我在播放声音时有延迟,我想让程序在每一点都处于最佳状态。

PS我正在尝试这样做,但我没有声音,所以也许答案是否定的。那么为什么?

4

1 回答 1

0

此方法的签名仅允许您通过复制数据来返回数据。分配指针是没有意义的,因为这个参数是作为副本传递的,所以分配的值在你的方法之外是不可见的。

memcpy实时音频输出一点也不慢(除非您在 8 位处理器上执行此操作)。

太慢的音频代码会导致声音出现间隙,但不会导致延迟。延迟是音频缓冲区过大的结果。

于 2015-06-03T09:05:10.953 回答