如何立即在Qt中绘制音频的整个波形?

问题描述 投票:1回答:1

我正在尝试从音频绘制波形。到目前为止,我已经成功使用以下代码绘制了它:

probe = new QAudioProbe;
probe->setSource(mediaPlayer);

connect(probe, SIGNAL(audioBufferProbed(QAudioBuffer)), this, SLOT(onAudioBufferProbed(QAudioBuffer)));

在我的onAudioBufferProbed(QAudioBuffer)位置:

...
const qint16 *data = audioBuffer.constData<qint16>();
int cnt = audioBuffer.sampleCount()/2;
qreal peak = GetPeakValue(audioBuffer.format());

for (int i = 0; i<cnt; i++)
    {
        double val = data[i]/peak;
        samples.append(val);
    }

QVector<double> x(samples.size());

    for (int i = 0; i<x.size(); i++)
        x[i] = i;

DrawWaveform(x, samples);

[当我按下播放按钮时,它会随着音频的播放而随着时间的流逝不断地绘制时间,但是如何立即绘制它(以便在播放音频之前查看波形?)>

我正在尝试从音频绘制波形。到目前为止,我已经设法使用以下代码进行绘制:probe = new QAudioProbe; probe-> setSource(mediaPlayer); connect(probe,SIGNAL(audioBufferProbed(...

c++ qt audio waveform
1个回答
0
投票

您可以使用QAudioDecoder。您应该创建解码器并调用setSourceFileName。然后呼叫start。将bufferReady()连接到您的插槽,然后将read()连接到缓冲区,直到结束为止。您还可以将接收到的块聚合到QByteArray中,并为整个音频重新创建一个QAudioBuffer。然后,您可以对缓冲区进行切片,并根据计算出的每秒字节数获取所需持续时间的选择值。

© www.soinside.com 2019 - 2024. All rights reserved.