使用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
相关产品推荐
相关产品推荐

