Qt QAudioBuffer在不同的计算机上提供同一首歌的不同数据

Qt QAudioBuffer在不同的计算机上提供同一首歌的不同数据,qt,Qt,我正在为PC创建一个音乐播放器。我想将歌曲的FFT可视化。我已经创建了一个完整的类来缓冲1024个数据点,并进行FFT和显示(这是由另一个类处理的)。我的程序是在使用Debian测试x64的笔记本电脑上开发的。我的工作电脑使用Centos 7 x64。当我在我的工作PC上编译我的程序(都使用Qt5.7.0)时,FFT可视化是垃圾。窥探我的代码,我发现QAudioBuffer从QAudioProbe提供的示例类型在我的笔记本电脑中浮动时被签名(在我的工作PC中)。以下是每当QAudioProbe发

我正在为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()