【问题标题】:How can I extract the data points (corresponding y value for x values) from a waveplot如何从波形图中提取数据点(x 值对应的 y 值)
【发布时间】:2022-01-16 11:47:35
【问题描述】:

我希望这是一个合适的问题。

我使用 Python Librosa 为声音文件绘制波形。我发现很难提取数据点。例如y 的值是多少,x (Time) = 0.15 在下面的这个输出上。我在 Librosa 的文档中看不到这一点,所以我想知道是否可以这样做。

这是我目前基于 Librosa 文档的代码:

import librosa
import librosa.display
import matplotlib.pyplot as plt
y, sr = librosa.load('audio.wav')
bpm, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
plt.figure()
librosa.display.waveplot(y, sr=sr)
plt.show()
print (f'bpm: {bpm:.2f} beats per minute')

output

例如,是否可以将 x 和 y 轴放入一个数组中,或者至少打印一个数据点?

谢谢

【问题讨论】:

标签: python arrays audio librosa


【解决方案1】:

librosa.display.waveplot 计算并绘制音频信号的幅度包络。 您可以通过查看source code of the function(可通过函数文档页面上的“查看源代码”访问)了解这是如何完成的。

这是计算信封的代码的相关部分。

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).
    """
    import numpy as np

    x_frame = np.abs(librosa.util.frame(x, frame_length=hop, hop_length=hop))
    return x_frame.max(axis=1)

# Reduce by envelope calculation
env = __envelope(y, hop_length)

其中hop_length 是每个包络点的音频样本数。

【讨论】:

    【解决方案2】:

    我想知道How to edit raw PCM audio data without an audio library? 帖子中列出的任何工具是否有助于获取您正在寻找的原始 PCM。理想情况下,librosa 库本身应该允许挂钩来查看 PCM 数据数组本身,但我发现音频工具有时实际上不允许这样做(例如 Java 中的Clip)。如果您找不到 librosa 挂钩,那么在将数据发送到 librosa 之前或同时从这些工具之一获取 PCM 数组可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 2021-11-22
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      相关资源
      最近更新 更多