【機能】
通常、ある歌手のコンサートのフルバージョンなど、議論されている音声を WAV 形式で取得し、音声を分割したい、またはその一部が実際に必要な音声セグメントである場合、このために必要な指定された時間、分、秒に従って傍受できるプログラムを設計します。
実現に必要な機能は次のとおりです:
1. 指定された開始時間と終了時間、分、秒に従って、開始時間と終了時間に対応する WAV オーディオを傍受する;
2. オーディオ名、アルバム名、歌手名、および傍受された各オーディオのその他の情報
3. パラメータ テーブルのバッチ設定で使用可能
[必要なインストール パッケージ/依存関係]
1.WAV
2.pandas
3.sox: インストール場所は、コードで設定された場所と一致する必要があります.この例では、sox.exe を sox_path="D:\sox\sox に配置します。 - 14-4-2\sox.exe"
[フォルダー]
異なるファイルを異なるフォルダーに入れ、それらを区別します
1.f_0='./Original Audio/'
2.f_k='./Intercept Parameters/'
3.f_s='./Run Results/
' ./オーディオバッファ/'
【コンプリートコード】
import wave
import os
import time
import pandas as pd
f_0='./原始音频/' #原始音频存放文件夹
f_p='./音频缓存/' #转化音频存放文件夹
f_k='./截取参数/'
f_s='./运行结果/' #截断音频存放文件夹
sox_path="D:\sox\sox-14-4-2\sox.exe"
abs_path=os.path.dirname(os.path.abspath(__file__))
cmd='cd /d {}{} && for %i in (*.wav) do {} %i -b 16 -e signed-integer {}{}%i'.format(abs_path,f_0.replace('.',''),sox_path,abs_path,f_p.replace('.','')) #shell脚本,解决wave初始非pcm格式问题
os.system(cmd)
t_0=time.time()
x_0=os.listdir(f_0) #获取音频文件名称列表,已含后缀
t_p=[f_p+i for i in x_0] #生成转化音频文件夹内文件的完整路径列表
df=pd.read_excel(f_k+os.listdir(f_k)[0],sheet_name='参数表',header=0,keep_default_na=False)
name_list=[list(df['Music_Name'])[i] +'-'+list(df['Artist'])[i]+'_'+list(df['Album'])[i] for i in range(len(df))]
#转化读取到的时分秒数据
def get_s_time(h,m,s):
s_time=h*3600+m*60+s
return s_time
#主函数
def cut_voice(stream,name,t_begin,t_end):
wf = wave.open(stream, 'rb')
nchannels, sampwidth, framerate, nframes = wf.getparams()[:4]
strData = wf.readframes(nframes) # 读取音频,字符串格式
t_s = nframes / framerate
cut_data = strData[int(t_begin * len(strData)/t_s):int(t_end * len(strData)/t_s)]
wf.close()
outfile = f_s + name+'.wav' # 定义存储路径以及文件名
outwave = wave.open(outfile, 'wb')
comptype = "NONE"
compname = "not compressed"
outwave.setparams((nchannels, sampwidth, framerate, nframes==int(len(cut_data)),comptype, compname))
outwave.writeframes(cut_data)
outwave.close()
if __name__ == '__main__':
for i in range(len(df)):
t_begin=get_s_time(list(df['h_begin'])[i],list(df['m_begin'])[i],list(df['s_begin'])[i])
t_end = get_s_time(list(df['h_end'])[i], list(df['m_end'])[i], list(df['s_end'])[i])
cut_voice(t_p[0],name_list[i],t_begin,t_end)
t_1 = time.time()
print('\n全程耗时:%.2fs' % (t_1 - t_0))
[パラメータテーブルの説明]
h/m/s は時分秒を意味し、各オーディオに対応する開始時分秒を入力するだけで (分割入力)、対応するオーディオクリップを出力できます。
【注意事項】
1. sox.exe のインストール先は、コード中の sox-path と同じでなければならず、必ず sox_path="D:\sox\sox-14-4-2\sox. exe" 2. Intercept
parameters テーブルを設定したら、保存して閉じてください。
3. 対応するフォルダーを事前に作成する必要があります。