WAV 形式のオーディオ キャプチャ

【機能】
通常、ある歌手のコンサートのフルバージョンなど、議論されている音声を 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. 対応するフォルダーを事前に作成する必要があります。
フォルダ名

おすすめ

転載: blog.csdn.net/Apollo_Guang/article/details/127728689
おすすめ