Qt QAudioBuffer在不同的计算机上提供同一首歌的不同数据
我正在为PC创建一个音乐播放器。我想将歌曲的FFT可视化。我已经创建了一个完整的类来缓冲1024个数据点,并进行FFT和显示(这是由另一个类处理的)。我的程序是在使用Debian测试x64的笔记本电脑上开发的。我的工作电脑使用Centos 7 x64。当我在我的工作PC上编译我的程序(都使用Qt5.7.0)时,FFT可视化是垃圾。窥探我的代码,我发现QAudioBuffer从QAudioProbe提供的示例类型在我的笔记本电脑中浮动时被签名(在我的工作PC中)。以下是每当QAudioProbe发出数据已缓冲时调用的代码:Qt QAudioBuffer在不同的计算机上提供同一首歌的不同数据,qt,Qt,我正在为PC创建一个音乐播放器。我想将歌曲的FFT可视化。我已经创建了一个完整的类来缓冲1024个数据点,并进行FFT和显示(这是由另一个类处理的)。我的程序是在使用Debian测试x64的笔记本电脑上开发的。我的工作电脑使用Centos 7 x64。当我在我的工作PC上编译我的程序(都使用Qt5.7.0)时,FFT可视化是垃圾。窥探我的代码,我发现QAudioBuffer从QAudioProbe提供的示例类型在我的笔记本电脑中浮动时被签名(在我的工作PC中)。以下是每当QAudioProbe发
void SpectrumController::setAudioBuffer(QAudioBuffer buffer){
// Used to momentarily stop the process.
if (!enableBuffering) return;
// Only process stereo frames
if (buffer.format().channelCount() != 2) return;
if (buffer.format().sampleType() == QAudioFormat::SignedInt){
//qWarning() << "Signed";
QAudioBuffer::S16S *data = buffer.data<QAudioBuffer::S16S>();
bufferData(data,buffer.frameCount());
}
else if (buffer.format().sampleType() == QAudioFormat::UnSignedInt){
//qWarning() << "Unsigned";
QAudioBuffer::S16U *data = buffer.data<QAudioBuffer::S16U>();
bufferData(data,buffer.frameCount());
}
else if(buffer.format().sampleType() == QAudioFormat::Float){
//qWarning() << "Float";
QAudioBuffer::S32F *data = buffer.data<QAudioBuffer::S32F>();
bufferData(data,buffer.frameCount());
}
}
template<typename T>
void SpectrumController::bufferData(T *data, qint32 N){
for (qint32 i = 0; i < N; i++){
//if (qAbs(data[i].left) > largest){largest = qAbs(data[i].left); qDebug() << "Largest" << largest;}
//currentBuffer << ((qreal)data[i].left/(largest));
//qWarning() << "Added data" << currentBuffer.last();
currentBuffer << data[i].left;
if (datcounter < 100000){
*writer << data[i].left;
*writer << "\n";
datcounter++;
}
else if (writeFile->isOpen()){
qWarning() << "Closed file";
writeFile->close();
}
if (currentBuffer.size() == FFT_SIZE){
dataBuffer << currentBuffer;
currentBuffer.clear();
if (!isRunning) run();
}
void SpectrumController::setAudioBuffer(QAudioBuffer缓冲区){
//用于暂时停止该过程。
如果(!enableBuffering)返回;
//仅处理立体声帧
如果(buffer.format().channelCount()!=2)返回;
if(buffer.format().sampleType()==QAudioFormat::SignedInt){
//qWarning()