#音声ファイルの分割
import wave
import struct
from scipy import fromstring,int16
import numpy as np
import os
import math
import speech_recognition as sr
import pandas as pd
一応既に同じ名前のディレクトリがないか確認。
file = os.path.exists("output2")
print(file)
if file == False:
#保存先のディレクトリの作成
os.mkdir("output2")
#filenameに読み込むファイル、timeにカットする間隔
def cut_wav(filename,time):
# timeの単位は[sec]
# ファイルを読み出し wavf = filename + '.wav' wr = wave.open(wavf, 'r') # waveファイルが持つ性質を取得 ch = wr.getnchannels() width = wr.getsampwidth() fr = wr.getframerate() fn = wr.getnframes() total_time = 1.0 * fn / fr integer = math.floor(total_time) # 小数点以下切り捨て t = int(time) # 秒数[sec] frames = int(ch * fr * t) num_cut = int(integer//t) # waveの実データを取得し、数値化 data = wr.readframes(wr.getnframes()) wr.close() X = np.frombuffer(data, dtype=int16) for i in range(num_cut+1): print(i) # 出力データを生成 outf = out_dir +'/' + str(1) + '.wav' start_cut = int(i*frames) end_cut = int(i*frames + frames) print(start_cut) print(end_cut) Y = X[start_cut:end_cut] outd = struct.pack("h" * len(Y), *Y) # 書き出し ww = wave.open(outf, 'w') ww.setnchannels(ch) ww.setsampwidth(width) ww.setframerate(fr) ww.writeframes(outd) ww.close() str_out="" list1=[wavf,"",""] df_x= pd.DataFrame([list1]) df_x.columns=["no","音声ファイル","変換"] for ii in range(num_cut+1): outf=out_dir +"/"+str(ii)+".wav" str_out=wav_to_text(outf) df_x.loc[ii]=[ii,str(ii)+ '.wav',str_out] #分割したファイルを受け取りた(output2というディレクトの.wavのこと)
def wav_to_text(wavfile):
r = sr.Recognizer() with sr.AudioFile('wavfile') as source: audio = r.record(source) text = r.recognize_google(audio, language='ja-JP') print(wav_to_text) return wav_to_text
print("input filename = output")
f_name = "10"
print("cut time = ")
cut_time = input()
cut_wav(f_name,float(cut_time))
以上のような設計をしましたが、name 'out_dir' is not dfinedと出てしまいます。
どこを手直しすればいいのか途方に暮れてしまっています。
ご教授の程よろしくお願いしたします