python-3.x - 有没有办法使用 librosa 的波形图来存储图形的坐标而不是显示波形图的图像?
问题描述
我正在开发一个使用 Librosa 的音频项目,并从在线示例中获取以下代码。我希望能够将构成图形的坐标存储在数组中,而不是打开具有幅度与时间关系图的图像。我已经尝试了很多在 stackoverflow 以及其他网站上发现的不同示例,但都没有运气。我对python比较陌生,这是我关于stackoverflow的第一个问题,所以请善待。
import librosa.display
import matplotlib.pyplot as plt
from IPython.display import display, Audio
filename = 'queen2.mp3'
samples, sampleRate = librosa.load(filename)
display(Audio(filename))
plt.figure(figsize=(12, 4))
librosa.display.waveplot(y, sr=None, max_points=200)
plt.show()
解决方案
librosa 是开源的(在ISC 许可下),因此您可以查看代码以了解它是如何做到的。函数的文档有一个方便的[source]
链接,可以让你编写代码。对于librosa.display.waveplot,您会看到它调用了一个函数__envelope()
来计算包络。大概是您所追求的这些坐标。
hop_length = 1
y = __envelope(y, hop_length)
y_top = y[0]
y_bottom = -y[-1]
import numpy as np
def __envelope(x, hop):
'''Compute the max-envelope of non-overlapping frames of x at length hop
x is assumed to be multi-channel, of shape (n_channels, n_samples).
'''
x_frame = np.abs(util.frame(x, frame_length=hop, hop_length=hop))
return x_frame.max(axis=1)
推荐阅读
- java - 为什么从后台删除应用程序后前台服务不起作用?
- flutter - 使用状态小部件访问状态类的方法?
- java - 如何在 Firebase 中获取孩子的数据
- c# - _AppDomainPtr Load_3 方法示例?
- voip - Freeswitch 1.8 和tone_stream 的播放
- python - 如何计算 DecisionTreeClassifier 的 0-1 确定性分数?
- javascript - 如何防止javascript array.push中的重复项
- java - JsonSerialize / JsonDeserialize 在 Apache Tomcat (TomEE) 中不起作用
- java - Android中图像缩放动画后如何保持质量?
- c# - 如何自动为生成的实体添加数据注释?