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

如何将MP3/WAV音频文件转为随时间变化的频率与音量数组?

用Audacity(MacOS)提取音频采样数组适配RP2040 PWM蜂鸣器

1. 预处理音频文件

  • 把目标MP3/WAV导入Audacity,用裁剪工具截取需要的短音效片段(比如“叮”声)。
  • 转成单声道:顶部菜单点Tracks > Mix > Mix Stereo Down to Mono,蜂鸣器不需要立体声数据。

2. 提取频率采样

  • 选中整个音频轨道,点Analyze > Plot Spectrum打开频谱窗口。
  • 调整参数:
    • 把FFTSize设为1024(时间精度优先,适合短音效);
    • 取消勾选Log Frequency,用线性频率显示;
    • 点击Export导出CSV,文件里每行对应一个时间点的频率峰值,这就是我们要的频率数组原始数据。

3. 提取音量(振幅)采样

  • 回到主轨道,选中音频,点Analyze > Sample Data Export。
  • 导出设置:
    • 格式选CSV;
    • 通道选1(单声道);
    • 设置Interval为固定采样间隔(比如10ms,对应100Hz采样率,根据RP2040性能调整,别太密集);
    • 导出的CSV里的振幅值,后续归一化到0-65535范围(直接把振幅值除以最大振幅再乘65535)。

4. 整理成数组格式

  • 用Mac自带的Numbers打开两个CSV,对齐时间点,确保每个采样的频率和音量一一对应。
  • 把频率值转成整数(RP2040的freq()只认整数),音量值转成0-65535的整数,整理成代码里能用的数组:
    # 示例:10ms间隔的3个采样点
    freq_samples = [440, 523, 659]
    duty_samples = [32768, 40000, 20000]
    

5. RP2040播放代码示例

  • 用循环按采样间隔依次设置PWM参数:
    import machine
    import utime
    
    # 初始化蜂鸣器PWM引脚(示例用Pin15)
    buzzer = machine.PWM(machine.Pin(15))
    # 替换成你整理好的数组
    freq_samples = [440, 523, 659, ...]
    duty_samples = [32768, 40000, 20000, ...]
    sample_interval = 0.01  # 对应采样间隔10ms
    
    for f, d in zip(freq_samples, duty_samples):
        buzzer.freq(f)
        buzzer.duty_u16(d)
        utime.sleep(sample_interval)
    buzzer.duty_u16(0)  # 播放完关闭蜂鸣器
    

实用优化提示

  • 频谱导出的频率如果有多个峰值,取每个时间点的最高峰值即可——蜂鸣器只能输出单频率;
  • 采样间隔建议10-50ms,太密集会导致RP2040处理不过来,出现卡顿;
  • 可以给音量数据做平滑处理,比如相邻采样取平均值,避免突然的音量跳变产生杂音。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 06:34:50