2015-08-03 4 views
1

Это мой первый вопрос, и я делаю все возможное, чтобы быть ясным. Я просмотрел сайт, не найдя прежний вопрос, который мог бы мне помочь.Как я могу установить вложенные петли в Praat для обнаружения начала в целом каталоге?

Я пытаюсь получить скрипт обнаружения начала в praat для цикла для всего каталога. Я вложил сценарий обнаружения начала как внутренний цикл в внешний цикл, проходящий через каждый файл в конкретной библиотеке. Однако я не могу заставить его работать. Я получаю только начало первого файла в моем каталоге. Скрипт обнаружения начала хорошо работает сам по себе, и внешний цикл отлично работает с другими командами, например, «получить интенсивность». Может ли кто-нибудь увидеть, что я делаю неправильно?

Вот что я сделал:

form Get Intensity 
    sentence Directory .\ 
    comment If you want to analyze all the files, leave this blank 
    word Base_file_name 
    comment The name of result file 
    text textfile intensity_VOT_list.txt 
endform 

#Print one set of headers 

fileappend "'textfile$'" File name'tab$' 
fileappend "'textfile$'" 'newline$' 



Create Strings as file list... wavlist 'directory$'/'base_file_name$'*.wav 
n = Get number of strings 

    for i from 1 to n 


    select Strings wavlist 
    filename$ = Get string... i 
    Read from file... 'directory$'/'filename$' 
    soundname$ = selected$ ("Sound") 
    To Intensity... 100 0 


    labelline$ = "'soundname$''tab$'" 
    fileappend "'textfile$'" 'labelline$' 


    select Intensity 'soundname$' 
    numberOfFrames = Get number of frames 
    fileappend "'textfile$'" 'numberOfFrames' 
    fileappend "'textfile$'" 'newline$' 
    for i from 1 to numberOfFrames 
     intensity = Get value in frame: i 
     if intensity > 40 
      time = Get time from frame: i 
      onsetresultline$ = "voice onset time for 'soundname$' is 'tab$''time''tab$'" 
      fileappend "'textfile$'" 'onsetresultline$' 
      fileappend "'textfile$'" 'newline$' 
      exit 
     endif 
    endfor 

endfor 

Я был бы рад за любую помощь. Если вы прочитаете мой вопрос и почувствуете, что он плохо сформулирован, пожалуйста, сообщите мне об этом, чтобы я мог попытаться поправиться. Добросердечно

+0

У вас есть инструкция 'exit' в конце второго цикла' for'. Ваш скрипт существует, как только он встречается с кадром в любом звуке, в котором значение больше 40. Кроме того, вы используете одну и ту же контрольную переменную ('i') дважды. Вам нужно будет использовать разные переменные. – jja

ответ

0

Вы использовали одну и ту же переменную управления для каждого цикла for, поэтому он каждый раз переписывался. У вас также был exit, где вы хотели, чтобы ваш скрипт выпрыгнул из второго цикла. Но оператор exit останавливает весь скрипт, а не цикл. Чтобы реализовать что-то вроде last или break, вы можете вручную увеличить контрольную переменную за ее конечное значение. Это пример:

form Get Intensity 
    sentence Directory .\ 
    comment If you want to analyze all the files, leave this blank 
    word Base_file_name 
    comment The name of result file 
    text textfile intensity_VOT_list.txt 
endform 

#Print one set of headers 

fileappend "'textfile$'" File name'tab$' 
fileappend "'textfile$'" 'newline$' 

strings_object = Create Strings as file list... wavlist 'directory$'/'base_file_name$'*.wav 
n = Get number of strings 

for i to n 
    select strings_object 
    filename$ = Get string... i 
    Read from file... 'directory$'/'filename$' 
    soundname$ = selected$ ("Sound") 
    intensity_object = To Intensity... 100 0 

    labelline$ = "'soundname$''tab$'" 
    fileappend "'textfile$'" 'labelline$' 

    select intensity_object 
    numberOfFrames = Get number of frames 
    fileappend "'textfile$'" 'numberOfFrames' 
    fileappend "'textfile$'" 'newline$' 
    for j to numberOfFrames    ; Renamed your second i into j 
    intensity = Get value in frame: j 
    if intensity > 40 
     time = Get time from frame: j 
     onsetresultline$ = "voice onset time for 'soundname$' is 'tab$''time''tab$'" 
     fileappend "'textfile$'" 'onsetresultline$' 
     fileappend "'textfile$'" 'newline$' 
     j += numberOfFrames    ; This will break out of the loop 
    endif 
    endfor 
endfor