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

Quartus项目求助:如何将WAV文件转换为数据数组并导入?

将WAV文件转换为FPGA可用数据数组的实用步骤

1. 先确认WAV文件核心参数

WAV文件头部包含决定后续处理方式的关键信息,你需要先提取这些参数:

  • 声道数:优先选单声道,立体声可提取其中一个声道(新手建议先处理单声道)
  • 采样位宽:推荐用16位,适配多数FPGA音频逻辑设计
  • 采样率:需和你FPGA项目里的音频时钟/IP参数匹配

2. 用工具提取PCM数据并生成数组

方法一:Python脚本(灵活可控)

写个简单脚本直接生成Verilog/VHDL兼容的数组文件,无需复杂操作:

import wave
import numpy as np

# 替换成你的WAV文件名
with wave.open("target_audio.wav", "rb") as wav_f:
    sample_width = wav_f.getsampwidth()
    num_channels = wav_f.getnchannels()
    num_frames = wav_f.getnframes()
    
    # 读取原始PCM数据并转成数组
    pcm_bytes = wav_f.readframes(num_frames)
    if sample_width == 2:
        pcm_array = np.frombuffer(pcm_bytes, dtype=np.int16)
    elif sample_width == 1:
        pcm_array = np.frombuffer(pcm_bytes, dtype=np.uint8)
    
    # 立体声转单声道
    if num_channels == 2:
        pcm_array = pcm_array[::2]
    
    # 生成Verilog格式数组
    with open("audio_data.v", "w") as out_f:
        out_f.write(f"// 参数:{wav_f.getframerate()}Hz, {sample_width*8}bit, 单声道\n")
        out_f.write(f"reg [15:0] audio_data [0:{len(pcm_array)-1}];\n")
        out_f.write("initial begin\n")
        for idx, sample in enumerate(pcm_array):
            out_f.write(f"    audio_data[{idx}] = 16'h{sample:04X};\n")
        out_f.write("end\n")

运行后得到的audio_data.v可直接在Quartus项目中引用。

方法二:Audacity可视化工具(新手友好)

  • 用Audacity打开WAV文件,转单声道:Tracks > Mix > Mix Stereo to Mono
  • 导出无头部RAW文件:File > Export > Export Audio,选择Other uncompressed files,设置Header为RAW (header-less),Encoding选Signed 16-bit PCM
  • 在Verilog中用$readmemh读取该RAW文件:
    // 采样点数 = RAW文件大小 / 2(16位每个采样占2字节)
    reg [15:0] audio_data [0:16000]; 
    initial begin
        $readmemh("audio_raw.raw", audio_data);
    end
    
    注意把RAW文件放到Quartus项目工作目录中。

3. Quartus项目中的注意事项

  • 大体积音频不要直接把数组写进代码,用$readmemh/$readmemb读取外部文件,避免编译卡顿
  • 确保数组位宽和FPGA音频处理逻辑的位宽完全匹配
  • 先做小测试:用1秒以内的短音频生成数组,搭配简单DAC播放逻辑验证正确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:52:19