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

使用Numpy切割音频为5秒片段时列表操作报错求助

音频切割代码的错误修正方案

核心问题分析

  • 索引越界:audios_five初始为空列表,直接调用audios_five[i].append会触发索引不存在的错误,因为列表中还没有对应索引的子元素。
  • 分段数计算逻辑错误:len((audios[i])//int(sr*5))是对音频数组的每个元素做除法运算,得到的仍是同长度数组,取其长度无法得到正确的分段数量。正确方式是用音频总长度除以单段采样数来计算分段数。
  • 多余空片段:原代码的分段数计算会在音频长度刚好是5秒整数倍时,多生成一个空片段。

修正后的代码

# 先定义5秒对应的采样点数
segment_length = int(sr * 5)
audios_five = []

for i in range(len(audios)):
    print(f"audios{i+1}.wav")
    # 初始化当前音频的片段存储列表
    current_audio_segments = []
    total_samples = len(audios[i])
    # 计算实际需要分割的段数:有余数则多一段,无余数则刚好整除
    total_segments = (total_samples // segment_length) + (1 if total_samples % segment_length != 0 else 0)
    
    for j in range(total_segments):
        start_idx = j * segment_length
        end_idx = start_idx + segment_length
        # 提取片段,自动处理最后一段长度不足5秒的情况
        segment = audios[i][start_idx:end_idx].tolist()
        current_audio_segments.append(segment)
        print(f"audios_five{i+1}_{j+1}.wav")
        print(segment)
    # 将当前音频的所有片段加入总列表
    audios_five.append(current_audio_segments)

关键修正说明

  1. 为每个音频单独初始化current_audio_segments子列表,处理完成后再添加到audios_five,彻底避免索引越界问题。
  2. 通过音频总采样数与单段采样数的整除、余数判断,正确计算分段数,不会生成空片段。
  3. 使用f-string简化打印语句,提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:06:19