Praat提取音素时长及基频信息代码

############################################################
### By Shaopf 2013年1月15日 feipengshao@163.com
############################################################

form 提取时长基频
    comment 输入文件所在的目录(包括声音文件和标注文件):
    text read_path E:\L2-ARCTIC corpus (v3.0)\data
    comment 输入音段层:
    positive phon_tier 2
    comment 输入单词层:
    positive word_tier 1
    comment 输入保存结果的路径
    text save_path E:\L2-ARCTIC corpus (v3.0)\data\result.txt
endform

if right$(read_path$, 1) = "\"
    read_path$ = read_path$ - "\"
endif

deleteFile: save_path$
appendFileLine: save_path$, "文件名称" + tab$ + "音素" +tab$ + "时长" + tab$ + "所在词" + tab$ + "所在词时长" + tab$ + "基频点1" + tab$ + "基频点2" + tab$ + "基频点3" + tab$ + "基频点4" + tab$ + "基频点5" + tab$ + "基频点6" + tab$ + "基频点7" + tab$ + "基频点8" + tab$ + "基频点9" + tab$ + "基频点10"

Create Strings as file list: "fileList", read_path$ + "\*.TextGrid"
numberOfFiles = Get number of strings

for iFile from 1 to numberOfFiles
    selectObject: "Strings fileList"
    fileName$ = Get string: iFile
    simpleName$ = fileName$ - ".TextGrid"

    textGridFileName$ = read_path$ + "\" + simpleName$ + ".TextGrid"
    wavFileName$ = read_path$ + "\" + simpleName$ + ".wav"
    pitchFileName$ = read_path$ + "\" + simpleName$ + ".Pitch"
    pitchtierFileName$ = read_path$ + "\" + simpleName$ + ".PitchTier"

    Read from file: textGridFileName$
    Read from file: wavFileName$

    if fileReadable(pitchtierFileName$)
        Read from file: pitchtierFileName$
    else
        To Pitch: 0, 75, 600
                Interpolate
                Smooth: 10
        Down to PitchTier
        selectObject: "Pitch " + simpleName$
        Remove
        selectObject: "Pitch " + simpleName$
        Remove
        selectObject: "Pitch " + simpleName$
        Remove
    endif

    selectObject: "TextGrid " + simpleName$
    numberOfIntervals = Get number of intervals: phon_tier
    for iInterval from 1 to numberOfIntervals
        selectObject: "TextGrid " + simpleName$
        sTime = Get start point: phon_tier, iInterval
        eTime = Get end point: phon_tier, iInterval
        duration = eTime-sTime

        labelOfInterval$ = Get label of interval: phon_tier, iInterval

        intervalWordTier = Get interval at time: word_tier, sTime
        sTimeWord = Get start point: word_tier, intervalWordTier
        eTimeWord = Get end point: word_tier, intervalWordTier
        durationWord = eTimeWord - sTimeWord
        labelOfIntervalWord$ = Get label of interval: word_tier, intervalWordTier
        output$ = simpleName$ + tab$ + labelOfInterval$ + tab$ + fixed$(duration, 3) + tab$ + labelOfIntervalWord$ + tab$ + fixed$(durationWord, 3) + tab$
        output2$ = simpleName$ + tab$ + labelOfInterval$ + tab$ + fixed$(duration, 3) + tab$ + labelOfIntervalWord$ + tab$ + fixed$(durationWord, 3) + tab$
        stepTime = duration / 9
        for i from 1 to 10
            selectObject: "PitchTier " + simpleName$
            tmpTime = sTime + stepTime * (i - 1)
            pitchValue = Get value at time: tmpTime
            output$ = output$ + fixed$(pitchValue, 0)
            output2$ = output2$ + fixed$(tmpTime, 3)
            if i <> 10
                output$ = output$ + tab$
                output2$ = output2$ +tab$
            endif
        endfor
        appendFileLine: save_path$, output$
        appendFileLine: save_path$, output2$
    endfor
    
    selectObject: "TextGrid " + simpleName$
    Remove
    selectObject: "Sound " + simpleName$
    Remove
    selectObject: "PitchTier " + simpleName$
    Remove
endfor

selectObject: "Strings fileList"
Remove

exit 脚本运行结束! 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Praat(国际音标 [praːt]或[pʀaːt])在荷兰语中是说话或交谈的意思,而doing phonetics by computer即使用计算机研究语音学。作为软件的名称,简便起见,不妨合起来翻译作Praat语音学软件。 [编辑]作者 Praat的作者是荷兰阿姆斯特丹大学人文学院语音科学研究所的主席保罗•博尔斯马(Paul Boersma)教授和大卫•威宁克(David Weenink)助教授。 [编辑]版本 Praat最早的版本发布于1993年。起初用户还无法自由地下载使用,但从2003年6月5日的4.1版起,作者取消了专门的授权并开放了绝大部分源代码。进一步,从2004年3月4日的4.2版起,作者开放了全部源代码,使Praat成为采用GNU通用公共许可证授权的开源软件。相隔短则一天,长则月余,作者就会发布最近修订的版本,消除旧的故障,增添新的功能。2007年12月10日发布了5.0版。[1] Praat目前支持在多种计算机平台上运行,包括:  Macintosh  Windows[2]  Linux,FreeBSD  SGI,Solaris,HPUX 作者为以上平台的用户提供已编译好的目标文件。高级用户还可以在其他操作系统平台上修改并编译源代码后运行Praat程序。 Praat能够在图形和命令行两种用户界面下运行,但两种界面的目标文件(可执行文件)各自独立,以Windows版为例,即分为praat.exe和praatcon.exe两个可执行文件,其中后者只能通过命令行方式从控制台调用。 [编辑]功能简介 请注意:和维基百科中其他介绍软件产品的条目一样,本条目以下章节中对Praat的功能进行的简要介绍仅供读者参考,不可能也无意于代替由开发者提供的手册文档。 [编辑]用途概述 Praat的主要功能是对自然语言的语音信号进行采集、分析和标注,并执行包括变换和滤波等在内的多种处理任务。作为分析结果的文字报表和语图,不但可以输出到个人计算机的磁盘文件中和终端的显示器上,更能够输出为精致的矢量图或位图,供写作和印刷学术论文与专著使用。 此外,Praat还可用于合成语音或声音、统计分析语言学数据、辅助语音教学测试,等等。随着新版本的发布,Praat的功能和用途仍在不断扩展,但实际上多数用户只需要用到一小部分功能。 [编辑]构成与界面 Praat程序由外围与核心两层构成。外围主要包括对象窗口(Object window,标题为Praat objects)、画板窗口(Picture window,标题为Praat picture)、脚本编辑器(ScriptEditor)、按钮编辑器(ButtonEditor)、数据编辑器(DataEditor,无固定标题)、情报窗口(Info window)和手册(Manual)等不负责具体的信号处理任务的辅助性组件。Praat每次启动时,自动打开对象窗口和画板窗口。对象窗口也是Praat的主控窗口,在Praat程序的会话进程中始终打开,大部分功能也需要由此展开。脚本(script)在是Praat中执行各种操作的宏命令,能够简化日常操作,减少出错,并实现大量复杂操作的自动化。按照作者的最初设想,除了Praat之外还会有其他程序使用与Praat相同的外围程序,但多年来一直没有实现[3]。 Praat的核心部分即具体负责语音信号处理任务的程序,包括所有的对象类型(Types of object)、动作命令(Action commands)和相应的编辑器(Editors)。对象(object)是由Praat程序所构建的数据存储载体,有很多种类型,如声音(Sound)、文本表格(TextGrid)、音高(Pitch)、变换(Manipulation),等等,通过执行编辑器或动态选单(Dynamic menu)中的动作命令完成对数据的查询(数字化测量)和处理(生成新对象)任务。声音编辑器(SoundEditor)和文本表格编辑器(TextGridEditor)是Praat中最常用的两种编辑器,多用于涉及语音分析和标注的科学研究与课堂教学。 [编辑]语音分析与标注 对语音信号的分析与标注是Praat的基本功能。在Praat中录音或读取音频文件后,可以按用户要求显示以下多种语图:  三维语图(spectrogram)  频谱切片(spectral slices)  音高(即基频[4])曲线(pitch contour)  共振峰曲线(formant contour)  音强曲线(intensity contour) 所有的语图都可以绘制成精致的矢量图,也可以将相应的对象数据保存为磁盘文件。除直观的语图外,Praat也能通过对信号数据的计算获得各种文字情报,比如音高、时长、第一或第二共振峰频率的数值等,也同样可以根据需要输出为适当的形式。 Praat允许用户对语音数据进行标注,包括音切分和文字注释,标注的结果还可以独立保存和交换。然而,Praat本身缺乏自动标注功能,只能对有声和静默进行简单的识别,而不能对音节、节拍群等语流单位加以切分。[5] [编辑]其他功能 Praat还具有许多其他功能,包括:  语音实验:嗓音分析、多重强迫选择实验、滤波、声源滤波合成、发音合成等。  辅助教学:前馈神经网、优选论学习等。  统计分析:主成分分析、多维量表、判别分析等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值