我正在尝试从音频绘制波形。到目前为止,我已经成功使用以下代码绘制了它:
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(...
您可以使用QAudioDecoder。您应该创建解码器并调用setSourceFileName。然后呼叫start。将bufferReady()连接到您的插槽,然后将read()连接到缓冲区,直到结束为止。您还可以将接收到的块聚合到QByteArray中,并为整个音频重新创建一个QAudioBuffer。然后,您可以对缓冲区进行切片,并根据计算出的每秒字节数获取所需持续时间的选择值。