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

请求修复二进制转WAV转换代码(指定频率与100波特率)

修复二进制转WAV音频工具(符合1635Hz/1785Hz、100波特率需求)

原代码的核心问题在于没有生成正确频率的正弦波,也未处理100波特率的要求,以下是修复后的完整代码,同时解决了多次转换样本叠加、样本数不匹配等问题:

import tkinter as tk
import wave
import struct
import math

# 音频基础参数
num_channels = 1  # 单声道
sample_width = 2  # 16位采样
sample_rate = 44100
baud_rate = 100  # 每秒100个比特
bit_duration_samples = int(sample_rate / baud_rate)  # 每个比特对应的样本数:44100/100=441
max_amplitude = 32767  # 16位音频最大幅值

def convert_to_sound():
    # 清空之前的样本数据,避免多次转换叠加
    samples = []
    # 获取输入的二进制字符串,过滤非0/1字符
    binary_code = ''.join([c for c in binary_entry.get() if c in '01'])
    if not binary_code:
        tk.Label(root, text='请输入有效的二进制代码(仅0和1)').pack()
        return

    # 遍历每个二进制位,生成对应频率的音频样本
    for bit in binary_code:
        # 确定当前比特对应的频率
        freq = 1785 if bit == '1' else 1635
        # 生成当前比特持续时间内的所有样本
        for i in range(bit_duration_samples):
            # 计算当前样本的时间点
            t = i / sample_rate
            # 生成正弦波样本值
            sample_value = int(max_amplitude * math.sin(2 * math.pi * freq * t))
            samples.append(sample_value)

    # 将样本打包为二进制数据
    sample_bytes = struct.pack('h' * len(samples), *samples)

    # 写入WAV文件
    with wave.open('binary_code.wav', 'wb') as file:
        # 设置参数,总样本数用实际生成的数量
        file.setparams((num_channels, sample_width, sample_rate, len(samples), 'NONE', 'not compressed'))
        file.writeframes(sample_bytes)
    
    # 显示成功提示
    tk.Label(root, text='WAV文件已成功生成!').pack()

# 创建GUI界面
root = tk.Tk()
root.title('二进制转音频转换器')

tk.Label(root, text='输入二进制代码:').pack()
binary_entry = tk.Entry(root, width=50)
binary_entry.pack()

convert_button = tk.Button(root, text='转换为WAV', command=convert_to_sound)
convert_button.pack()

root.mainloop()

关键修复点说明:

  • 正确生成指定频率的正弦波:使用数学公式生成符合1635Hz(对应0)和1785Hz(对应1)的正弦音频信号,这是原代码最核心的缺失部分
  • 处理100波特率:计算每个比特对应的样本数(441个),确保每秒恰好输出100个二进制位的音频
  • 避免样本叠加:每次转换前重新初始化samples列表,解决多次点击按钮导致音频叠加的问题
  • 动态样本数:写入WAV文件时使用实际生成的样本总数,替代原代码固定的44100,避免音频长度错误
  • 输入校验:过滤输入中的非0/1字符,避免无效输入导致错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:57:36