Скрипт praat получает список шагов для определенного слова

Я пытаюсь написать сценарий для Praat, и у меня возникают трудности с этим.

Я хочу получить результат для определенного слова в предложении (и звука), например: Поскольку в данный момент вы не пользуетесь своей машиной, могу ли я одолжить ее?

Мне нужен список предложений для слова "момент". Если я выберу слово «момент» и выберу список шагов в меню шага, он даст мне время и f0 для каждой 0,01 секунды (откройте и звук, и TextGrid).

Я искал и пытался написать сценарий, но пока не удалось.

Не могли бы вы помочь мне с этим?


Я изменил верхний вопрос.

предложение: Поскольку в данный момент вы не пользуетесь своей машиной, могу ли я ее одолжить? (у меня есть mp3-файл, текстовая сетка с 2 уровнями для этого предложения, уровень 1 — это слово, а уровень 2 — это телефон)

Ниже приведен мой сценарий. Я хочу иметь f0 max и min для последней слоговой части слова «момент», но мне удалось получить f0 max и min только для всего интервала 10 («момент» на уровне 1).

У меня также есть телефонный уровень для слова «момент» (на уровне 2), который выглядит следующим образом:

номер телефона для слова "момент" M OW M AH N T

=> и я хочу [M AH N T] f0 max и f0 min, исключая [M OW], который является частью первого слога.

следующий сценарий у меня есть до сих пор.


form Get F0 Min-Max
    sentence Directory ./
    word Base_file_name 
    comment The name of result file
    text textfile F0_list.txt
endform

# Create a header row for the result file:
header$ = "Filename TextGridLabel startTime endTime minTime f0min maxTime f0max'newline$'"
fileappend "'textfile$'" 'header$'

#Read all files in a folder
Create Strings as file list... mp3list 'directory$'/'base_file_name$'*.mp3
Create Strings as file list... gridlist 'directory$'/'base_file_name$'*.TextGrid
n = Get number of strings

for i to n
clearinfo
#We first extract pitch tiers
    select Strings mp3list
    filename$ = Get string... i
    Read from file... 'directory$'/'filename$'
    soundname$ = selected$ ("Sound")
    To Pitch... 0.01 75 600
    output$ = "'soundname$'.Pitch"
    # Write to binary file... 'output$'

# Read grid files and extract the selected intervals in them
    select Strings gridlist
    gridname$ = Get string... i
    Read from file... 'directory$'/'gridname$'
    int=Get number of intervals... 1

# Calculates F0 max, and F0 min (I need interval 10 to be analyzed for the word "moment" so have the 1 10 for the label) 
    select TextGrid 'soundname$'
    label$ = Get label of interval... 1 10 
    if label$ <> ""
        startTime = Get starting point... 1 10
        endTime = Get end point... 1 10 
        select Pitch 'soundname$'
        f0max = Get maximum... startTime endTime Hertz Parabolic
        maxTime = Get time of maximum... startTime endTime Hertz Parabolic
        f0min = Get minimum... startTime endTime Hertz Parabolic
        minTime = Get time of minimum... startTime endTime Hertz Parabolic
        resultline$ = 

"'soundname$''tab$''label$''tab$''syllableTime''tab$''endTime''tab$''minTime''tab$''f0min''tab$''maxTime''tab$''f0max'"
        fileappend "'textfile$'" 'resultline$'
    endif

fileappend "'textfile$'" 'newline$'

endfor

# clean up

select all
Remove

Не могли бы вы помочь мне с этим? Огромное спасибо.


person boyun_phonetics    schedule 26.09.2018    source источник
comment
Привет и добро пожаловать в SO :) Можете ли вы поделиться тем, что у вас есть, чтобы люди могли сказать, чего не хватает.   -  person Gert Kommer    schedule 26.09.2018
comment
Не могли бы вы переформатировать вопрос, чтобы было понятно, где начинается ваше примерное предложение? Может быть, вынести это в отдельный абзац или выделить курсивом.   -  person Roland Weber    schedule 26.09.2018


Ответы (1)


Не могли бы вы добавить новый уровень, чтобы отделить только интересующую вас часть? Есть ли в ваших данных какие-либо другие предложения?

# define your variables
phoneTier = 2
newTier = 3
name$ = "syllable"
regexFirst$ = "M"
regexLast$ = "T"

# use this to add a new tier in each text grid
select TextGrid 'soundname$'
Insert interval tier: newTier, name$

# loop through the phones to find the start time of the syllable
# put this in the for loop that loops through each textgrid
phoneInt = Get number of intervals... phoneTier
for i from 1 to phoneInt-3
    label$ = Get label of interval... i phoneTier
    labelNext$ = Get label of interval... i+3 phoneTier
    if index_regex(label$, regexFirst$) & index_regex(labelNext$, regexLast$)
        start = Get starting point... i phoneTier
        end = Get end point... i+3 phoneTier
        Insert boundary... newTier start
        Insert boundary... newTier end
        syllableInterval = Get low interval at time: newTier, end
        Set interval text... newTier syllableInterval "syllable"
    endif
endfor

затем измерьте интервалы, которые вы только что создали.

person Lisa    schedule 19.11.2018