【发布时间】:2019-08-10 06:34:40
【问题描述】:
我是 C++ 和 QT 的新手,实际上我正在编写一个声音信号发生器的项目。但我的问题是,
我正在创建要在 qbytearray 中实现的浮点数,我将使用它来填充 qbuffer。但是我不能浮动到 qbytearray 中,它会发出警告说“失去精度”。 qbytearray 仅包含从 -100 到 100 的整数值。我需要具有所需精度的浮点数。
你能帮帮我吗?
void MainWindow::toneGenerate(){
int len= m_seconds*SAMPLE_RATE;
sinbuf.resize(len);
for(int i=0;i<len;i++){
qreal t = m_freq*i;
t *= FREQ_CONST;
t = t+ m_ph;
t = qSin(t);
t*= m_amp;
sinbuf[i] = t;
}
sininput.setBuffer(&sinbuf);
sininput.open(QIODevice::ReadWrite);
}
【问题讨论】:
-
如果
sinbuf是QByteArray对象(如果没有minimal reproducible example 很难分辨),那么&sinbuf是指向QByteArray对象的指针,而不是指向它包含的数据的指针。 -
operator[]forQByteArray返回char&,因此您仅将来自qreal的一个字节存储在sinbuf[i] = t中(如果 qreal 为 double,则不会存储来自 double 的 7 个字节)。您需要将 qreal 中的所有字节添加到 QByteArray - 读取 this topic。将 qreal 存储在 QVector 中,然后将其转换为 QByteArray。 -
谢谢。将尝试制作一个 qvector 并将其转换为 qbytearray
-
试过了。 qvector 已被真正填充。但是当我尝试将它写入 qbytearray 时,它只是随机放置浮点数。尝试了@rafix07 提供的帖子中的所有方法。
标签: c++ qt qbytearray qbuffer