import os import sys import tempfile import configparser import subprocess import pandas as pd ## ======================= user define ======================= repo_dir = 'C:\\Users\\Aki\\source\\repos\\acoustic_model' curr_dir = repo_dir + '\\acoustic_model' config_ini = curr_dir + '\\config.ini' output_dir = 'd:\\OneDrive\\Research\\rug\\experiments\\friesian\\acoustic_model' forced_alignment_module = 'C:\\Users\\Aki\\source\\repos\\forced-alignment' sys.path.append(os.path.join(os.path.dirname(sys.path[0]), curr_dir)) sys.path.append(forced_alignment_module) from forced_alignment import convert_phone_set import acoustic_model_functions as am_func ## ======================= load variables ======================= config = configparser.ConfigParser() config.sections() config.read(config_ini) config_hcopy = config['Settings']['config_hcopy'] config_train = config['Settings']['config_train'] FAME_dir = config['Settings']['FAME_dir'] lexicon_file = FAME_dir + '\\lexicon\\lex.asr' dataset_list = ['devel', 'test', 'train'] ## ======================= extract features ======================= ##dataset = dataset_list[0] #for dataset in dataset_list: # print(dataset) ## make a script file for HCopy #hcopy_scp = tempfile.NamedTemporaryFile(mode='w', delete=False) #hcopy_scp.close() ## using the filelist in FAME! corpus #feature_dir = output_dir + '\\mfc\\' + dataset #am_func.make_hcopy_scp_from_filelist_in_fame(FAME_dir, dataset, feature_dir, hcopy_scp.name) ## extract features #subprocessStr = 'HCopy -C ' + config_hcopy + ' -S ' + hcopy_scp.name #subprocess.call(subprocessStr, shell=True) #os.remove(hcopy_scp.name) ## ======================= make a list of features ======================= ##dataset = dataset_list[2] #for dataset in dataset_list: # print(dataset) # feature_dir = output_dir + '\\mfc\\' + dataset # hcompv_scp = output_dir + '\\scp\\' + dataset + '.scp' # am_func.make_filelist(feature_dir, hcompv_scp) ## ======================= check the phonemes used in the lexicon ======================= phonelist = am_func.get_phonelist(lexicon_file) # 49 phonelist_list = list(phonelist) #lines_g1 = am_func.find_phone(lexicon_file, 'g') #lines_g2 = am_func.find_phone(lexicon_file, 'ɡ') ## ======================= make label file ======================= dataset = 'train' hcompv_scp = output_dir + '\\scp\\' + dataset + '.scp' script_list = FAME_dir + '\\data\\' + dataset + '\\text' lexicon = pd.read_table(lexicon_file, names=['word', 'pronunciation']) with open(hcompv_scp) as fin: features = fin.read() features = features.split('\n') with open(script_list, "rt", encoding="utf-8") as fin: scripts = fin.read() scripts = pd.Series(scripts.split('\n')) feature = features[0] file_basename = os.path.basename(feature).replace('.mfc', '') # get words from scripts. script = scripts[scripts.str.contains(file_basename)] script_id = script.index[0] script_txt = script.get(script_id) script_words = script_txt.split(' ') del script_words[0] # make the label file. SCRIPT_WORDS = [] script_prons = [] all_prons_found = 1 for word in script_words: SCRIPT_WORDS.append(word.upper()) extracted = lexicon[lexicon['word']==word] script_prons.append(extracted) all_prons_found *= len(extracted) # make the dict file. convert_phone_set.ipa2fame(phonelist_list) phonelist_list