尝试纠正此错误:IndexError:索引0超出了大小为0的轴0的范围

时间:2019-05-02 14:32:25

标签: python praat

该代码旨在从PRAAT中提取数据,从而应提取在wav文件和textgrid中找到的用于在PRAAT中进行注释的数据。然后,代码应输出提取到csv文件中的信息。

它返回了以下错误,但是,在调试问题后,似乎提取器未提取任何功能,因此数组为空。

            from praatio import tgio
            from praatio import tgio
            from os.path import join
            from scipy.io import wavfile
            import subprocess
            import os
            import numpy as np
            import csv


            def extract_features(wavfile):
                """
                Extract features for an audio file.
                :param wavfile: Absolute path to a WAV file.
                :return: Praat emotion features
                """
                features_script_path = join(os.getcwd(),'features.praat')

                result = subprocess.check_output(['C:\Intel\Praat.exe',
                                                  '--run',
                                                  features_script_path, wavfile])
                result = result.decode("utf-8")
                result = result.split()
                features = np.asarray([float(val) for val in result])
                return features


            def get_snippet_features(wav_file_path, start_time, end_time):
                fs, data = wavfile.read(wav_file_path)
                start_time_sample = int(start_time*fs)
                end_time_sample = int(end_time*fs)

                temp_file_path = join(os.getcwd(), 'data', 'temp', 'temp.wav')
                wavfile.write(temp_file_path,rate=fs,data=data[start_time_sample:end_time_sample])

                features = extract_features(wavfile=temp_file_path)
                os.remove(temp_file_path)
                return features


            def get_textgrid_features(filename,normalize=True):
                file_path = join(os.getcwd(), 'data', filename)
                tg = tgio.openTextgrid(fnFullPath=file_path)

                wav_file_path = file_path.replace('.TextGrid','.wav')

                print(tg.tierNameList)

                code_switch_tier = tg.tierDict['Orthographic']
                print(code_switch_tier.entryList)

                orthographic_tier = tg.tierDict['CodeSwitch']
                print(orthographic_tier.entryList)

                por_tier = tg.tierDict['PointOfReference']
                print(por_tier.entryList)

                features = []
                labels = []
                for item in por_tier.entryList:
                    file_features = get_snippet_features(wav_file_path=wav_file_path,start_time=item.start,end_time=item.end)
                    labels.append(item.label)
                    features.append(file_features)

                # normalization
                if normalize:
                    mean = np.mean(features,axis=0)
                    std = np.std(features,axis=0)
                    features = (features-mean)/std

                return labels, features


            def generate_csv(labels,features,output_path):
                if os.path.isfile(output_path):
                    os.remove(output_path)

                with open(output_path,'w') as csvfile:
                    filewriter = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
                    filewriter.writerow(['CS_TYPE','PITCH_AVG','PITCH_DIR','PITCH_DYN','PITCH_JIT','INT_AVG','INT_DYN','INT_JIT','SPC_SLO','SPC_JIT'])
                    for index, label in enumerate(labels):
                        filewriter.writerow([label,
                                             features[index][0],
                                             features[index][1],
                                             features[index][2],
                                             features[index][3],
                                             features[index][4],
                                             features[index][5],
                                             features[index][6],
                                             features[index][7],
                                             features[index][8]])
                csvfile.close()


            labels, features = get_textgrid_features(filename='Ian.TextGrid',normalize=False)
            print(labels, features)
            generate_csv(labels=labels,features=features,output_path=join(os.getcwd(),'data','csv','ian.csv'))

1 个答案:

答案 0 :(得分:0)

有类似的问题,我只是在这里寻求答案。