

PythonでJupiterLabを使いました。初心者です。

音声ファイルを選択し、そのファイルを１分毎分割して、文字起こしをし、そのデータをExcelに書き出すというプログラムを作成しました。

結果、音声ファイルの最初の１０秒程度を数回、文字起こしして、Excelに書き出さないです。

どのように改善したらいいでしょうか、アドバイスお願いします

コード

[code]

    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
    import tkinter.filedialog
    
    def cut_wav(filename,time):  
    
        wavf = filename
        wr = wave.open(wavf, 'r')
    
        ch = wr.getnchannels()
        width = wr.getsampwidth()
        fr = wr.getframerate()
        fn = wr.getnframes()
        total_time = 1.0 * fn / fr 
        integer = math.floor(total_time*100) # 小数点以下切り捨て
        t = int(time*100)  # 秒数[sec]
        frames = int(ch * fr * t /100)
        num_cut = int(integer//t)
        data = wr.readframes(wr.getnframes())
        wr.close()
        X = np.frombuffer(data, dtype=int16)
    
        for i in range(num_cut + 1):
            
            outf = out_dir + '/' + str(i) + '.wav' 
            
            
            if i > 0:
                start_cut = int(i*frames) - int(100000)
            else:
                start_cut = int(i*frames)
                
                
            end_cut = int(i*frames + frames)
            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_cut = ""
        list1 = [wavf,"",""]
        df_x = pd.DataFrame([list1])
        df_x.columns = ['NO','音声ファイル','変換結果']
        
        for ii in range(num_cut + 1):
            cutf = out_dir + '/' + str(ii) + '.wav'
            str_out = wav_to_text(outf)
            df_x.loc[ii] = [ii,str(ii) + '.wav',str_out]
            
        with pd.ExcelWriter(out_file) as writer:
            df_x.to_excel(writer,sheet_name='結果',index=False)
            
    def wav_to_text(wavfile):
        r = sr.Recognizer()
        
        with sr.AudioFile(wavfile) as source:
            audio = r.record(source)
            
        wav_to_text = r.recognize_google(audio,language='ja-JP')
            
        print(wav_to_text)
        
        return wav_to_text
    
    out_dir= "output"
    file = os.path.exists(out_dir)
    
    if file == False:
        os.mkdir(out_dir)
        
    fTyp = [("", ".wav")]
    iDir = os.path.abspath(os.path.dirname(_))
    f_name = tkinter.filedialog.askopenfilename(filetypes=fTyp, initialdir=iDir)
    
    cut_time = 60
    out_file = "output/out.xlsx"
    cut_wav(f_name,float(cut_time))
    
[/code]


CC BY-SA 4.0
2021-07-26T10:16:47.503
78416
2021-07-26T10:57:40.610
2021-07-26T10:57:40.610
3060
47441
question
python
Python 文字起こしプログラムがうまく起動しない