You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Librosa中读取指定时间范围的音频数据?

提取音频特定时间区间的RMS数据

当然可以读取音频特定时间区间的数据,针对你的需求,有两种简洁的实现方式:

方法一:先截取目标时间的音频波形,再计算RMS

直接从原始音频波形中切出1.8秒到2.4秒的片段,再对这段片段计算RMS,步骤清晰高效:

  1. 根据采样率sr将目标时间转换为对应的采样点索引
  2. 截取音频波形的对应片段
  3. 对截取后的片段计算RMS并生成匹配的时间轴

修改后的代码示例:

import librosa
import matplotlib.pyplot as plt

# 加载音频
y, sr = librosa.load(librosa.ex('trumpet'))

# 定义目标时间区间
start_time = 1.8
end_time = 2.4

# 转换为采样点索引
start_sample = int(start_time * sr)
end_sample = int(end_time * sr)

# 截取音频片段
y_slice = y[start_sample:end_sample]

# 计算该片段的RMS
rms_slice = librosa.feature.rms(y=y_slice)
times_slice = librosa.times_like(rms_slice, sr=sr)

# 加上起始时间偏移,让时间轴对应原始音频的实际时间
times_slice += start_time

# 绘图展示结果
plt.semilogy(times_slice, rms_slice[0], label='RMS Energy (1.8-2.4s)')
plt.legend()
plt.show()

方法二:从已计算的全局RMS结果中筛选目标区间

如果你已经完成了整个音频的RMS计算,也可以直接通过布尔索引从全局结果中筛选出1.8-2.4秒的数据:

import librosa
import matplotlib.pyplot as plt

# 加载音频并计算全局RMS
y, sr = librosa.load(librosa.ex('trumpet'))
S, phase = librosa.magphase(librosa.stft(y))
rms = librosa.feature.rms(S=S)
times = librosa.times_like(rms)

# 定义目标时间区间并生成筛选掩码
start_time = 1.8
end_time = 2.4
time_mask = (times >= start_time) & (times <= end_time)

# 筛选对应的数据
selected_rms = rms[0][time_mask]
selected_times = times[time_mask]

# 绘图展示结果
plt.semilogy(selected_times, selected_rms, label='RMS Energy (1.8-2.4s)')
plt.legend()
plt.show()

两种方法都能精准获取目标时间区间的RMS数据:方法一更适合只关注局部区间的场景,计算开销更小;方法二则适合需要保留全局计算结果,同时提取局部数据的情况。

内容的提问来源于stack exchange,提问作者Megan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:18:19