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

使用Python的AudioSegment转二进制文本为MP3时遇路径错误,求代码修复

问题修复方案

1. 先解决路径报错的问题

你写的路径里的\t会被Python当成制表符解析,导致系统识别不出正确的文件路径,这就是[Errno 22]的原因。修复路径有三种简单方法:

  • 路径前加r,用原始字符串告诉Python不要转义:r"F:\KULIAH\SEMESTER8\SKRIPSI\MusicLockApp\txt\done.txt"
  • 把所有\换成\\:"F:\\KULIAH\\SEMESTER8\\SKRIPSI\\MusicLockApp\\txt\\done.txt"
  • 直接用正斜杠/代替反斜杠:"F:/KULIAH/SEMESTER8/SKRIPSI/MusicLockApp/txt/done.txt"

2. 纠正pydub的用法(核心问题)

pydub的AudioSegment.from_file()只能读现成的音频文件(比如MP3、WAV),根本不能直接读二进制文本。你得先把文本里的0和1转换成音频信号,再导出成MP3。

具体做法:

  • 先把文本里的二进制内容读出来
  • 给0和1分别对应音频(比如1对应一段蜂鸣声,0对应静音)
  • 把这些小段音频拼起来,最后导出成MP3

完整可运行的代码:

from pydub import AudioSegment
from pydub.generators import Sine

def readbinaryfinal():
    # 修复后的文件路径
    txt_path = r"F:\KULIAH\SEMESTER8\SKRIPSI\MusicLockApp\txt\done.txt"
    
    # 读取文本里的二进制内容,去掉多余的换行和空格
    with open(txt_path, 'r') as f:
        binary_content = f.read().strip().replace('\n', '')
    
    # 音频参数可以自己调整
    sample_rate = 44100  # 标准采样率
    bit_duration = 100    # 每个二进制位持续100毫秒,数字越小速度越快
    
    # 创建空的音频片段用来拼接
    final_audio = AudioSegment.silent(duration=0)
    
    # 逐个处理每个二进制位
    for bit in binary_content:
        if bit == '1':
            # 生成440Hz的正弦波(标准A音)
            sound = Sine(440).to_audio_segment(duration=bit_duration)
        else:
            # 生成静音片段
            sound = AudioSegment.silent(duration=bit_duration)
        final_audio += sound
    
    # 导出MP3,注意要指定文件名,不能只写目录!另外bitrate是128k不是128l
    final_audio.export("media/em/output.mp3", format="mp3", bitrate="128k")

# 调用函数
readbinaryfinal()

额外注意点

  • 要确保media/em/这个文件夹存在,不然导出会失败,怕麻烦的话可以加一行代码自动创建:
    import os
    os.makedirs("media/em/", exist_ok=True)
    
  • 运行前要确保装了ffmpeg,pydub依赖它来处理MP3导出,没装的话得先配置好(比如Windows可以下载ffmpeg并添加到系统环境变量)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:35:40