(本文已经同步到公众号)
讲真,世界上奇葩的事情真多。比如,某天要把100个pcm格式的音频文件合成一个连续的整体。
妈耶,一个一个拖到软件里面操作简直要命。万一下次是一千个、一万个呢?
科技因为懒人才进步,所以,今天用知识来解放双手。
直接上代码了:
# python 音频文件处理
from pydub import AudioSegment
import os
import shutil
import time
#import sort
AudioSegment.converter = "D:\\Program Files (x86)\\ffmpeg-4.1-win64-static\\bin\\ffmpeg.exe"
now_dir = os.getcwd() #当前文件夹
new_dir = now_dir + '\\voicepcm\\' #语音文件所在文件夹
list_voice_dir = os.listdir('./voicepcm')
list_voice_dir.sort(key=lambda x:int(x[:-4])) #倒着数第四位'.'为分界线,按照‘.'左边的数字从小到大
def voice_unit():
n=0
#list_voice_dir_length = len(list_voice_dir)
playlist = AudioSegment.empty()
second_5_silence = AudioSegment.silent(duration=5000) #产生一个持续时间为5s的无声AudioSegment对象
for i in list_voice_dir:
#sound = AudioSegment.from_wav(list_voice_dir[n])
#sound = AudioSegment.from_file(new_dir+list_voice_dir[n],format="wav") # wav
#raw pcm # 2 byte (16 bit) samples 采样sample, channels = 1为单声道,2为立体声
sound = AudioSegment.from_file(new_dir+list_voice_dir[n],sample_width=2,frame_rate=16000,channels=1)
playlist = playlist + sound + second_5_silence
n+=1
#playlist.export(new_dir+'playlist.pcm',format="pcm") #wav
playlist.export(new_dir+'playlist100.pcm')
print("语音合成完成,合成文件放在:",new_dir,"目录下")
def testlist():
n=0
for i in list_voice_dir:
voicename = list_voice_dir[n]
print("对比文件顺序是否改变:",voicename)
n+=1
def main():
try:
os.remove(new_dir+'playlist.pcm')
except:
print("")
testlist()
voice_unit()
if __name__ == "__main__":
main()
将文件夹中 100 个 pcm 格式的语音文件合成一个,同时每个语音文件中有 5 秒的空白间隔。这些参数都是可以调的。
此代码仅仅支持 pcm 音频文件,更多的比如 wav,mp3格式下次继续分享。
代码的注释还是很详细。
白浪介绍:
(1)关于射频、微波、天线、无线通信、智能硬件、软件编程、渗透安全、人工智能、区块链,Java、Android、C/C++、python等综合能力的培养提升。
(2)各种学习资料、学习软件分享。
1. 长按扫码关注公众号(Geekxiaobai)
2. 如在后台发送“Python高级编程”“Python Graphics”或者“2003”,即可免费获得电子书籍。仅供学习之用。
3. 扫码关注后,查看往期内容,会有各种资料惊喜等着你来拿哦!
想要更多相关学习资料,可以在文章后面留言哦,后期将会根据留言需求免费分享学习资料哦。
========******=========******========******=========******==========