Montreal Forced Aligner(MFA)[1]是一个用于将音频和文本进行对齐的工具。它可以用于语音识别、语音合成和发音研究等领域。MFA支持多种语言和语音,用户可以根据需要自定义训练模型。
本博客介绍如何使用MFA对音频和文本进行对齐,其中使用的是MFA的最新版本(版本v2.2.12)。
目录
MFA的安装
安装方法一:
安装方法二:
生成词典文件
对齐
PS
MFA 支持 Windows、macOS 和 Linux 操作系统。
本博客是基于 Linux 操作系统(Ubuntu20.04)其他可参考MFA安装。
conda create -n aligner -c conda-forge montreal-forced-aligner
conda activate aligner
conda update --all
conda install -c conda-forge montreal-forced-aligner
pip install g2pk
git clone https://github.com/pyrasis/MFARunner
conda create -n mfa -c conda-forge montreal-forced-aligner
source activate
conda activate mfa
conda install montreal-forced-aligner==2.0.6
cd MFARunner
pip install -r requirements.txt
sudo apt-get install g++ openjdk-8-jdk python3-dev python3-pip curl
pip install konlpy==0.6.0 ffmpeg==1.4
bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)
修改config.py中的数据集路径地址
*这里需要注意的是,语音数据和txt文件不能放在同一个文件夹内。
然后运行main.py生成字典。
python main.py
1.下载预训练模型
包含:字典,G2P()模型,声学模型,
下载g2p模型
#英文
mfa model download g2p english_uk_mfa
#中文
mfa model download g2p mandarin_pinyin_g2p
# 也可到官网上直接下载
#韩文
mfa model download g2p korean_jamo_mfa
2.1.示例数据集中文
mfa g2p mandarin_pinyin_g2p 数据集路径/dataset 保存路径/mandarin_dict.txt
.wav文件为数据集中的语音文件,.lab文件为语音文件对应的文本,其中文本的语言应与你使用的声学模型所能识别的文本以及词典文件中的语言相一致。如:声学模型所识别的文本为汉字,而你的语言文件说的内容为“我爱你”,则你的.lab文件中应存储着“我爱你”的文本,若是声学模型识别的文本为拼音,则.lab文件中应为“wo3 ai4 ni3“,同时词典文件中也应有着汉字-音素或者拼音-音素的对应信息。
2.2.示例韩文数据集Korean Single Speaker Speech Dataset | Kaggle
新建kss-align.py,生成.lab文件
import os, tqdm, re
from tqdm import tqdm
from jamo import h2j
from glob import glob
text = '/workspace/dataset/kss/transcript.v.1.4.txt'
base_dir = '/workspace/dataset/kss'
filters = '([.,!?])'
with open(text, 'r', encoding='utf-8') as f:
for line in f.readlines():
temp = line.split('|')
file_dir, script = temp[0], temp[3]
script = re.sub(re.compile(filters), '', script)
file_dir = file_dir.split('/')
fn = file_dir[0] + '/' + file_dir[1][:-3] + 'lab'
file_dir = os.path.join(base_dir, fn)
with open(file_dir, 'w', encoding='utf-8') as f:
f.write(script)
file_list = sorted(glob(os.path.join(base_dir, '**/*.lab')))
jamo_dict = {}
for file_name in tqdm(file_list):
sentence = open(file_name, 'r', encoding='utf-8').readline()
jamo = h2j(sentence).split(' ')
for i, s in enumerate(jamo):
if s not in jamo_dict:
jamo_dict[s] = ' '.join(jamo[i])
dict_name = 'korean_dict.txt'
with open(dict_name, 'w', encoding='utf-8') as f:
for key in jamo_dict.keys():
content = '{}\t{}\n'.format(key, jamo_dict[key])
f.write(content)
#pip install jamo
#生成.lab文件
python kss-align.py
lexicon 文件生成
mfa train_g2p korean_dict.txt korean.zip
mfa g2p korean.zip kss korean.txt
mfa train kss korean.txt out
命令解释
输入到每个指令的参数可以根据用户进行更改。
全部运行后,TextGrid文件将被保存到out文件夹中
mfa align /path:/dataset path:/dictionary path:/acoustic_modle path:/output
执行mfa后,可能会出现名为unaligned.txt的文件。
[PS1]the global mfa database server does not exist, initializing it first .
全局mfa数据库服务器不存在,请先对其进行初始化。
montreal_forced_aligner.exceptions.DatabaseError: DatabaseError:
There was an error encountered starting the global MFA database server, please see /root/Documents/MFA/pg_init_log_global.txt for more details and/or look at the logged errors above.
参考网址【未解决】
mfa configure --enable_auto_server
mfa server init
[PS2]yaml.constructor.ConstructorError: could not determine a constructor for the tag 'tag:yaml.org,2002:python/object:argparse.Namespace'
尝试
pip install pyyaml==4.2b2
重装yaml版本依旧出现错误
修改文件
vim /opt/conda/envs/mfa/lib/python3.8/site-packages/montreal_forced_aligner/config.py
将
config = yaml.safe_load(file_data)
改为
config = yaml.unsafe_load(file_data)
之后正常运行。
1.在MFA命令中,mfa train和mfa train_g2p的区别?
mfa train:训练一个新的声学模型
mfa train_g2p :训练一个汉字变音素模型
【1】PYRASIS.COM: 내 목소리를 TTS로 만들기(FastSpeech2)
【2】Installation — Montreal Forced Aligner 2.0.0 documentation