Метки TextGrid
нельзя напрямую преобразовать в объект Strings
, поскольку, в отличие от объектов TextGrid
, объекты Strings
не имеют уровней. Таким образом, у вас может быть код, который берет все метки определенного уровня в TextGrid
и помещает их в объект Strings
.
0. Создание пустого Strings
Проблема здесь в том, что Праат не хочет, чтобы вы сами заполняли объект Strings
, поэтому Create empty Strings...
нет. Однако вы можете подорвать одну из существующих команд, чтобы сделать это:
Create Strings as tokens: ""
1. Перемещение меток к объекту Strings
Теперь, когда у нас есть пустой Strings
для заполнения, мы можем приступить к работе:
procedure labelsToStrings: .tier
.textgrid = selected("TextGrid")
# Make sure this works with interval and point tiers
.item$ = if do("Is interval tier...", .tier) then
... "interval" else "point" fi
# Make the empty Strings
.strings = Create Strings as tokens: ""
Rename: selected$("TextGrid")
# Fetch each label, and insert it to the Strings object
selectObject: .textgrid
.n = do("Get number of " + .item$ + "s...", .tier)
for .i to .n
selectObject: .textgrid
.label$ = do$("Get label of " + .item$ + "...", .tier, .i)
# I assume you don't care about empty labels?
if .label$ != ""
selectObject: .strings
Insert string: 0, .label$
endif
endfor
# Make sure the new object is selected
selectObject: .strings
endproc
2. Прибыль!
Вы можете попробовать:
synth = Create SpeechSynthesizer: "English", "default"
To Sound: "This is some text.", "yes"
sound = selected("Sound")
textgrid = selected("TextGrid")
selectObject: textgrid
@labelsToStrings: 4
removeObject: sound, synth
View & Edit
3. Бонус
Если вы заинтересованы в получении всех меток в более управляемом пакете, вам также может быть интересна команда Index specified labels...
из tgutils
plugin, который я тоже написал. (Я знаю: я отлично умею называть вещи).
Этот делает что-то похожее на это, но вместо использования объекта Strings
он сбрасывает все метки в Table
, а также метку времени точек или начало и конец интервалов. И вы также можете указать подмножества меток, чтобы рассмотреть возможность использования буквального соответствия или регулярного выражения.
С его помощью вы можете переписать @labelsToStrings
так:
procedure labelsToStrings: .tier
.name$ = selected$("TextGrid")
runScript: preferencesDirectory$ + "/plugin_tgutils/scripts/" +
... "index_specified_labels.praat", .tier, ".+", "yes"
.table = selected("Table")
Create Strings as tokens: ""
Rename: .name$
for .i to Object_'.table'.nrow
.label$ = Object_'.table'$[.i, "label"]
Insert string: 0, .label$
endfor
removeObject: .table
endproc
person
jja
schedule
27.01.2017