Praat 将连续录制的声音文件切成小单位文件

      在语音研究过程中,整理语料,录音,再进行标注,是一个非常重要并且普遍的步骤。如果录音语料规模在上百句,或者上千句,这样的工作如果全部手工,将是非常庞大的。在这里推荐一种使用脚本把长的声音切成小文件的方法,将会节省很多工作。所谓的长的声音是指,比如有这样的语料:

关心
刚刚
单一
糟糕
新鲜
餐厅
西瓜
车厢
...

      在录音时比较省时间的作法应该是让发音人一次性把所有语料全部录制完成,而不是录一句保存一个文件。这样录出来的一个很长的声音,在标注时,如果不切分成小的文件,这样就会很难处理,也不好检索。所以比如录制了这样的声音之后,通过在Praat里标注出来句子序号:

Praat 将连续录制的声音文件切成小单位文件_第1张图片

       这里标的数字也可以使用统一的符号,比如S,那么下面脚本里的mark_string参数就要填写 S  效果和上面的数字是一样的。

      该脚本可以同时执行一个目录里很多的长文件,比如是几个录音人同样的录音文本,这样产生出来的小文件是以录音人加序号的形式。

      标注好之后,执行下面的脚本,就可以把这个目录里的所有长文件切分出来。


# Praat script:  LongWAVFilesSplitToSmallOnes.praat

# Author: Pengfei Shao <[email protected]>
# Company: 
# Version:  2014/5/28  14:16:00 
# Praat Version >=5.2.10

# Purpose:  根据第一层的标注将长的篇章段分成小片段,只有声音
#		
# Requires: 长的声音文件和标注好句子(词)序号的TextGrid文件,需要切出来的声音段与录音文本对应
#		 标1,2,3....
#           脚本产生一个新的文件名组成的列表文件
##################################################
form dialogue
	comment 请输入源声音文件所在目录:
	text openpath E:\
	comment 请输入切分后声音保存目录:
	text savepath E:\new
	comment 运行结束后产生一个文件名列表
	text saveTxtPath E:\new\fileList.txt
	comment 请输入标记所在层级及标记内容:
	positive tier_number 1
	sentence mark_string 
	optionmenu file_mark: 2
		option 原文件名+标注内容+序号
		option 原文件名+序号
endform


if right$(openpath$,1)<>"\"
	openpath$=openpath$+"\"
endif
if right$(savepath$,1)<>"\"
	savepath$=savepath$+"\"
endif
createDirectory(savepath$)
tierNum=tier_number

saveTXTpath$=saveTxtPath$
filedelete 'saveTXTpath$'
fileappend 'saveTXTpath$' order'tab$'filename'tab$'sentence'newline$'


Create Strings as file list... fileList 'openpath$'*.wav
numofFiles=Get number of strings

#大序号
order=1
for i from 1 to numofFiles
	select Strings fileList
	fileName$=Get string... 'i'

	Read from file... 'openpath$''fileName$'
	nameOfFile$=fileName$-".wav"-".WAV"
	textgridNameOfFile$=nameOfFile$+".TextGrid"
	Read from file... 'openpath$''textgridNameOfFile$'
	select TextGrid 'nameOfFile$'

	numOfIntervals=Get number of intervals... 'tierNum'

	for j from 1 to numOfIntervals
		select TextGrid 'nameOfFile$'
		startTime=Get start point... 'tierNum' 'j'
		endTime=Get end point... 'tierNum' 'j'
		labelOfInterval$=Get label of interval... 'tierNum' 'j'
		#####
		if (labelOfInterval$=mark_string$ and mark_string$<>"") or (labelOfInterval$<>"" and mark_string$="" and labelOfInterval$<>"sil")

			#####将范围根据标的情况前后分别扩大0.2秒
			startTime1=startTime-0.2
			endTime1=endTime+0.2
			Extract part... 'startTime1' 'endTime1' no
			select Sound 'nameOfFile$'
			Extract part... 'startTime1' 'endTime1' rectangular 1 no
			select TextGrid 'nameOfFile$'_part
			
			if file_mark=1
				select Sound 'nameOfFile$'_part
				Write to WAV file... 'savepath$''nameOfFile$'_'labelOfInterval$'_'order'.wav
				fileappend 'saveTXTpath$' 'order''tab$''nameOfFile$'_'labelOfInterval$'_'order'.wav'newline$'
			endif
			if file_mark=2
				select Sound 'nameOfFile$'_part
				Write to WAV file... 'savepath$''nameOfFile$'_'order'.wav
				fileappend 'saveTXTpath$' 'order''tab$''nameOfFile$'_'order'.wav'newline$'
			endif
			
			############################扩展文件名用法####################################################
			#if file_mark=8
			#	select TextGrid 'nameOfFile$'_part
			#	Write to text file... 'savepath$''####null'.TextGrid
			#	select Sound 'nameOfFile$'_part
			#	Write to WAV file... 'savepath$''####null'.wav
			#	fileappend 'saveTXTpath$' 'xj''tab$''xj2''tab$''####null'.TextGrid'tab$''temptempName$''newline$'
			#	fileappend 'saveTXTpath$' 'xj''tab$''xj2''tab$''####null'.wav'tab$''temptempName$''newline$'
			#endif
			############################扩展文件名用法-End#################################################
			select TextGrid 'nameOfFile$'_part
			plus Sound 'nameOfFile$'_part
			Remove
			order=order+1			
		endif
	endfor
	select TextGrid 'nameOfFile$'
	plus Sound 'nameOfFile$'
	Remove
endfor
select Strings fileList
Remove
exit Over!


运行时:

Praat 将连续录制的声音文件切成小单位文件_第2张图片

注意这里会同时产生一个文件名列表,在fileList.txt

如果上面标注的不是序号,而是统一的符号,mark_string里填这个统一的符号。

最后产生出来的声音文件在new目录里,而且是原来的文件名_序号.wav.

Praat 将连续录制的声音文件切成小单位文件_第3张图片

 




 


你可能感兴趣的:(脚本,label,标注,Praat)