在iOS中绘制录音音频波形图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在iOS中绘制录音音频波形图相关的知识,希望对你有一定的参考价值。

参考技术A

本文 Demo

绘制波形图前首先需要配置好 AVAudiosession ,同时需要建立一个数组去保存音量数据。

在开始录音后,利用我们刚刚配置的定时器不断获取 averagePower ,并保存到数组之中。

现在我们已经获取了我们需要的所有数据,可以开始绘制波形图了。这时候让我们转到 MCVolumeView.swift 文件中,在上一个步骤中,我们发送了一条叫做 updateMeters 的通知,目的就是为了通知 MCVolumeView 进行波形图的更新。

当 setNeedsDisplay 被调用之后,就会调用 drawRect 方法,在这里我们可以进行绘制波形图的操作。

在很多时候,录音不单止是需要显示波形图,还需要我们展示目前录音的时间和进度,所以我们可以在波形图上添加录音的进度条,所以我们转向 MCProgressView.swift 文件进行操作。

以上就是我在绘制录音波形图的一些心得和看法,在demo中我还为录音HUD加入了高斯模糊和阴影,让HUD在展示上更具质感,这些就略过不提了。虽然如此,但是这个录音HUD我觉得还是有一些缺陷的,一来是和VC的耦合比较高,二是绘制线状波形图的效果并不是太理性,希望各位如果有更好的方法可以与我交流。

想了解更多内容可以查看 我的博客

绘制音频波形和频谱图重叠

【中文标题】绘制音频波形和频谱图重叠【英文标题】: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()

【讨论】:

以上是关于在iOS中绘制录音音频波形图的主要内容,如果未能解决你的问题,请参考以下文章

H5录音音频可视化-实时波形频谱绘制频率直方图

绘制音频波形和频谱图重叠

绘制音频的波形图

QT 音频数据采集并绘制波形图

python绘制wav音频文件波形图

vue 绘制波形图 wavesurfer.js (音频/视频) 实用教程