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

Mac下Python生成指定频率WAV文件无音频输出问题求助

问题:生成的WAV文件无音频波形,程序无报错

在Mac终端运行Python程序读取桌面CSV中的频率值,生成每个时长0.3秒的连续音频并导出为WAV,但输出文件无音频,Audacity查看无波形(已排除播放设备问题),程序执行无报错信息。

设备环境

  • 机器:MacBook Pro(Apple M2 Pro)
  • 系统:macOS Ventura 13.5.2
  • Python版本:3.10.4

问题排查与修复点

  1. 语法错误:原代码存在两处多余句号,会导致程序无法正常执行(若用户实际运行时无报错,大概率是粘贴失误):
    • values = data['column name'].values. 需删除末尾句号
    • for value in values:. 需删除循环行末尾句号
  2. 波形振幅不足:np.sin生成的波形值范围为[-1, 1],直接转为int16会被截断为0(int16有效范围是[-32768, 32767]),这是音频无波形的核心原因,需将波形放大到有效振幅区间。

修正后的完整代码

import numpy as np
import pandas as pd
from pydub import AudioSegment

# CSV文件路径
csv_path = '/Users/username/Desktop/filename.csv'

# 读取CSV数据
data = pd.read_csv(csv_path)

# 提取频率列(替换为你实际的列名)
values = data['column name'].values

# 设置音频参数
sample_rate = 44100  # 采样率(Hz)
duration = 0.3       # 单段音频长度(秒)
amplitude = 32767    # int16格式的最大振幅值

# 初始化空音频段
audio = AudioSegment.empty()

for value in values:
    frequency = float(value)
    # 生成时间轴
    t = np.linspace(0, duration, int(duration * sample_rate), endpoint=False)
    # 生成正弦波形并放大至有效振幅
    waveform = np.sin(2 * np.pi * frequency * t) * amplitude
    # 将波形转为AudioSegment并拼接
    audio += AudioSegment(
        waveform.astype(np.int16).tobytes(),
        sample_width=2,
        channels=1,
        frame_rate=sample_rate
    )

# 输出文件路径
output_path = '/Users/username/Desktop/output.wav'

# 导出WAV文件
audio.export(output_path, format='wav')

验证步骤

  1. 确认CSV文件中的column name为实际存在的列名,且列内是20-20000Hz范围内的有效数字频率值
  2. 安装依赖(若未安装):
    pip install numpy scipy pydub pandas
    
  3. 运行脚本:
    python /Users/username/Desktop/filename.py
    
  4. 用Audacity打开生成的output.wav,即可看到正常的正弦波形

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:06:28