MP3编辑器

疫情,娃居家上网课,英语老师发听力练习册之音频文件一个,含所有听力内容。为方便播放,将此文件,以单元进行切割。由于份数不多,断点以手动识别,方法是将音频数据可视化为曲线,并人工判断,曲线长期在0点即为所寻断点,代码如下。

另,未经授权不得转载,尤其是百度文库,不得厚颜复制,百度不可无耻

import wave
import numpy as np
import matplotlib.pyplot as plt

music = wave.open(r'D:\sanx.wav',mode='rb')
music.getparams() #返回值分别对应 通道数 采样字节长度 采样频率 总帧数(总的采样数)
#_wave_params(nchannels=2, sampwidth=2, framerate=48000, nframes=597007872, comptype='NONE', compname='not compressed')
data=music.readframes(nframes=597007872)
data=np.frombuffer(data, dtype=np.int16)
print(data.shape)

data = data.reshape(597007872,2)    #双声道
#data.shape
left=data[:596976000,0]    #597007872/48000=12437.664, nframes/framerate=time。取整12437*48000=596976000
left=left.reshape(12437,48000)    #只取左声道,便于观察曲线
maxleft=np.max(left,axis=1)    #取最大值即可用来观察起止点
#ampSample=data[100*48000:110*48000,:]    #取前100对数据,用于看放大音量效果
#amp=ampSample*3    #放大2倍
#print(amp.shape)

%matplotlib qt5
#sx_unit1 = data[:650*48000] #first 650seconds,framerate=48000
#ax=plt.plot(maxleft[4175:4770])    #用来看起止点
fig, ax = plt.subplots()
ax.plot(maxleft[4175:4770])
ax.xaxis.set_major_locator(plt.MultipleLocator(15))
plt.show()
#plt.plot(ampSample)
#plt.plot(amp)

sx_unit1 = data[6095*48000:6545*48000]*3 #sx_unit9
fp1 = wave.Wave_write('D:\sx_unit1.wav') #创建空文件sx_unit9.wav
fp1.setframerate(48000) 
fp1.setnframes(542*48000)   #time length
fp1.setnchannels(2)
fp1.setsampwidth(2)
fp1.writeframes(sx_unit9.tobytes()) #s写入数据sx_unit9
fp1.close()

后断单元依此类推。

wav转mp3的方式: ffmpeg -i sx_unit2.wav sx_unit2.mp3

百度不可无耻

posted @ 2022-05-18 14:49  dajunma21  阅读(125)  评论(0编辑  收藏  举报