QT 音频数据采集并绘制波形图
Posted 小米的修行之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT 音频数据采集并绘制波形图相关的知识,希望对你有一定的参考价值。
1、界面:
2、使用到的QT相关类介绍:
(1)、QAudioRecorder:音频录制类 ,其父类为:QMediaRecorder。录制的音频数据可以直接写入到文件中,不需要操作QIODevice进行设备的读写。录制的音频数据除包含原始数据,还包含了数据头信息,这样录制的文件可以直接使用播放器进行播放。
(2)QAudioEncoderSettings:音频编码格式设置类,主要用于在录制之前设置音频的:采样率、编码格式、比特率、通道数、品质等等。
(3)QAudioBuffer:具有特定格式和采用率的音频样本集合,包含了音频的原始数据和缓冲区的信息,其中缓冲区信息:缓冲区字节数、缓冲区时长、缓冲区帧数、缓冲区采样数、音频格式(QAudioFormat)等。
(4)QAudioFormat:音频格式类:通道数、采样大小、采样率、每帧字节数、字节序、编码格式、采样点类型等等。
(5)QAudioProbe:监视正在播放和录制的视频类。
3、波形图绘制具体步骤:
(1)、通过QAudioBuffer获取音频的原始数据;
(2)、对原始数据进行归一化处理;
(3)绘制c
绘制音频波形和频谱图重叠
【中文标题】绘制音频波形和频谱图重叠【英文标题】:Plot audio waveform and spectrogram overlap 【发布时间】:2019-12-11 21:59:44 【问题描述】:我正在使用 librosa 处理音频,我需要在同一个显示器中绘制频谱图和波形。
我的代码:
plt.figure(figsize=(14, 9))
plt.figure(1)
plt.subplot(211)
plt.title('Spectrogram')
librosa.display.specshow(stft_db, x_axis='time', y_axis='log')
plt.subplot(212)
plt.title('Audioform')
librosa.display.waveplot(y, sr=sr)
使用这段代码我得到了这个情节
但我需要这样的东西
【问题讨论】:
【参考方案1】:根据 librosa,您可以为显示方法提供一个轴来绘制项目,specshow、waveplot。我建议直接定义你的 matplotlib 图形和子图,然后给 librosa 绘制它们的坐标轴。
fig = plt.figure(figsize=(14, 9)) #This setups the figure
ax1 = fig.subplots() #Creates the Axes object to display one of the plots
ax2 = ax1.twinx() #Creates a second Axes object that shares the x-axis
librosa.display.specshow(stft_db, x_axis='time', y_axis='log', ax=ax1)
librosa.display.waveplot(y, sr=sr, ax=ax2)
plt.show()
可能需要进行更多格式化以获得所需的外观,我建议查看 matplotlib 中的this example,以获得类似的共享轴图。
【讨论】:
感谢乔的快速回复!效果很好!【参考方案2】:不使用子图,而是使用单个图的相同轴来显示两个图。
fig = plt.figure(figsize=(14, 9))
ax = librosa.display.specshow(stft_db, x_axis='time', y_axis='log')
librosa.display.waveplot(y, sr=sr, ax=ax)
plt.show()
【讨论】:
以上是关于QT 音频数据采集并绘制波形图的主要内容,如果未能解决你的问题,请参考以下文章
Labview波形图 怎么做到不把绘制出来的图像删除 直接在上面绘制新的图形