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

为什么Pysound添加波形选择逻辑后输出空WAV文件?

问题原因与修复方案

核心错误点

  • StringVar未调用get()方法取值
    你代码中直接对selectedWave1、selectedWave2这两个Tkinter StringVar对象做字符串比较,没有调用.get()方法获取它们存储的实际值,导致所有波形判断分支永远不会触发,data和data2始终是初始赋值的空字符串,写入文件后自然就是0秒的空音频。
  • 变量名引用错误
    voice1部分你定义的包络变量是env1,但所有振荡器调用时传的amplitude参数是env,这个变量不存在,就算if分支能触发也会直接抛出NameError。
  • 可选优化点:attack_decay包络你仅传了attack参数,没有传decay参数,后续要做完整AD包络记得补全参数即可。

修复后的save函数代码

def save():
    data = ""
    data2 = ""
    #create buffers
    params = buffer.BufferParams()
    buffer.create_buffer(params, value=0.0)

    #voice 1
    env1=envelopes.attack_decay(params, attack=params.t2s(int(A1.get())/10))
    # 调用get()获取StringVar存储的实际波形值
    selected_wave1 = selectedWave1.get()
    if selected_wave1=="Sine":
        # 传入正确的包络变量名env1
        data = oscillators.sine_wave(params,frequency=400,amplitude=env1)
    elif selected_wave1=="Saw":
        data = oscillators.saw_wave(params,frequency=400,amplitude=env1)
    elif selected_wave1=="Square":
        data = oscillators.square_wave(params,frequency=400,amplitude=env1)
    elif selected_wave1=="Noise":
        data = oscillators.noise(params,frequency=400,amplitude=env1)

    #voice 2
    env2=envelopes.attack_decay(params, attack=params.t2s(int(A2.get())/10))
    selected_wave2 = selectedWave2.get()
    if selected_wave2=="Sine":
        data2=oscillators.sine_wave(params,frequency=400,amplitude=env2)
    elif selected_wave2=="Saw":
        data2=oscillators.saw_wave(params,frequency=400,amplitude=env2)
    elif selected_wave2=="Square":
        data2=oscillators.square_wave(params,frequency=400,amplitude=env2)
    elif selected_wave2=="Noise":
        data2=oscillators.noise(params,frequency=400,amplitude=env2)
    
    #save files
    soundfile.save(params, 'voice2.wav', data)
    soundfile.save(params,'voice1.wav',data2)

你看到的tostring()弃用警告不影响功能,是pysound库内部实现使用了过时方法,和本次空文件问题无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:36:05