1. 基本流程
- 声音的基频(F0,Frenquecy 0),即声音中的主要频率成分。对于人类语音来说,F0通常与说话人的音调或音高有关。
- 基频轮廓(F0 contour)通常指的是F0随时间的变化情况,即基频的起伏和变化。这通常用于语音分析、语音合成或音乐分析中,以了解声音信号中音高或音调的变化规律。
2. Demo
2.1 空白TextGrid的创建和手工标注
- TextGrid文件主要用于存储时间序列数据的分段(segmentation)和层叠注释(tiered annotations)。
- TextGrid允许用户在一个语音文件中创建多个层级(tier),每个层级可以包含不同类型的标注信息。例如,你可以在一个层级中标注音节的边界,在另一个层级中标注音高的变化,还可以创建更多的层级来标注其他语音特性。
- 在批处理过程中,TextGrid可以帮助Praat自动化地提取和处理语音数据。通过编写脚本或利用Praat的自动化功能,你可以对多个语音文件及其对应的TextGrid文件进行批量处理,从而大大提高工作效率。
- 下面代码只是为每个音频文件生成一个空白的TextGrid文件框架,其中的具体分段和注释信息仍然需要个人手动填充。
- 分段的核心问题: (1)如何确定分段的标准? 参考音频相关的硕博论文。 (2)Praat使用什么分段,
#First Setp: 空白TextGrid创建
#代码使用说明:
#此脚本会逐个打开文件夹中的所有.wav文件,并为它们创建TextGrids。
#0. 要使用此脚本,你需要一系列.wav文件。
#1. 使用Praat打开脚本(从文件读取...),并选择脚本或直接将文件拖动到Praat图标上。
#2. 将打开一个表单,你可以在其中:
#输入层级名称
#选择是否从列表中的第一个文件开始工作
#或者,如果你之前已经处理过这些文件,并且知道你停在了哪个文件编号,也可以选择相应的编号。点击OK。
#3. 将打开一个窗口询问你的文件在哪里,选择文件夹并点击"OK"。
#4. 声音和TextGrid将一起打开。修正任何必要的内容,完成后点击"Continue"。
#5. TextGrid将保存在声音所在的同一文件夹中。
#然后,将打开列表中的下一个文件。
#Wendy Elvira-García (2013). 空白TextGrid创建 v.1. [Praat脚本]
#mailto:wendyelviragarcia@gmail.com
#巴塞罗那大学语音学实验室
##################################################################
#文件夹选择器(仅创建一个变量)
#如果你想手动输入路径,而不是使用选择器,请注释掉这行(前面加上#),并取消注释下面的#4行代码。
folder=chooseDirectory ("请选择你想要查看/修改文件的文件夹:") # 注释:输入包含文件的文件夹路径
form Creator
sentence all_tiers transcription BI # 注释:层级的名称
sentence point_tiers BI # 注释:你是否已经开始修正了?
integer nfile 1 # 注释:你想从列表中的哪个文件开始工作?
endform
# 为该文件夹中所有wav文件创建列表
Create Strings as file list... listawav 'folder$'/*.wav
# 选择列表并提取其中文件的数量到一个变量中
select Strings listawav
nstrings = Get number of strings
# 开始循环
for i from nfile to nstrings
select Strings listawav
# 将当前处理的.wav文件添加到对象中
nombresonido=Get string...i
Readfromfile... ′folder'/'nombresonido$'
base$ = nombresonido$ - ".wav" # 为该.wav文件创建TextGrid对象
nombregrid$ = base$ + ".TextGrid"
To TextGrid: all_tiers$, point_tiers$
# 选择声音和查看
select Sound 'base$'
plus TextGrid 'base$'
View & Edit
# 暂停脚本,以便研究者进行交互
pause Please correct the TextGrid for 'base$' (file number 'i' of 'nstrings') and click "Continue" to automatically save the TextGrid.
# Save the TextGrid
select TextGrid 'base$'
Save as text file... 'folder$'/'nombregrid$'
# Clear the list of objects and close the editor window
select all
minus Strings listawav
Remove
endfor
# 结束循环
# Final cleanup of objects
select all
Remove
exit Done!
# 保存TextGrid
select TextGrid 'base$'
Save as text file... 'folder$'/'nombregrid$'
# 清除对象列表,并关闭编辑器窗口
select all
minus Strings listawav
Remove
endfor
#最终清理对象
select all
Remove
exit Done!
为每个音频创建完空白标注文件后,下一步可以使用代码对音频进行切分
##################### FORMULARIO #######################
form Indicator directory
comment: Textgrids所在的目录:
sentence directoriomater /Users/Wen/Desktop/praat
comment: 是否要删除层级?
boolean remove_tier 0
comment: 你想删除哪个层级的编号(层级的位置)?
integer tier_number_to_be_removed 0
comment: 是否要添加点层级?
boolean point_tier 1
word nombre_point_tier_2 BI
word nombre_point_tier_3 Tones
comment: 是否要添加区间层级?
boolean interval_tier 0
word nombre_interval_tier XX
integer posicion_interval_tier 1 (=on top)
comment: 保存修改后的文件列表
boolean guardar_la_lista_de_archivos_modificados 1
endform
##########################################
if windows = 1
barra$ = "\"
else
barra$= "/"
endif
Create Strings as file list... lista 'directoriomater$'/*.TextGrid
if guardar_la_lista_de_archivos_modificados
Save as raw text file... 'directoriomater$'/lista.txt
endif
numberOfFiles = Get number of strings
for ifile to numberOfFiles
select Strings lista
nombreArchivo$ = Get string... ifile
nombreObjeto$ = nombreArchivo$ - ".TextGrid"
do ("Read from file...", "'directoriomater$'/'nombreArchivo$'")
select TextGrid 'nombreObjeto$'
if remove_tier = 1
Remove tier... 'tier_number_to_be_removed'
endif
if point_tier = 1
do ("Insert point tier...", 2, "'nombre_point_tier_2$'")
do ("Insert point tier...", 4, "'nombre_point_tier_3$'")
endif
if interval_tier = 1
do ("Insert interval tier...", posicion_interval_tier, "'nombre_interval_tier$'")
endif
do ("Save as text file...", "'directoriomater$'/'nombreArchivo$'")
endfor
2.2 批处理提取
https://github.com/polvanrijn/praat-scripts https://www.ub.edu/phoneticslaboratory/en/resources.html https://github.com/Syuparn/praat_batch_analysis