2013-12-14 4 views
2

Я хочу изменить высоту тона в двух разных частях wav-файла. Для этого у меня есть информация о времени начала и времени окончания из соответствующего файла textgrid файла wav. Можно ли изменить шаг на две части.Изменение высоты тона в praat

ответ

2

Вы можете использовать объект Manipulation, чтобы внести любые изменения в высоту исходного звука.

# Original sound made of three consecutive notes 
snd[1] = Create Sound as pure tone: "A", 1, 0, 0.3, 44100, 220, 0.2, 0.01, 0.01 
snd[2] = Create Sound as pure tone: "B", 1, 0, 0.3, 44100, 247, 0.2, 0.01, 0.01 
snd[3] = Create Sound as pure tone: "C", 1, 0, 0.3, 44100, 277, 0.2, 0.01, 0.01 

selectObject(snd[1], snd[2], snd[3]) 
sound = Concatenate 
Rename: "original" 

removeObject(snd[1], snd[2], snd[3]) 

selectObject(sound) 
Play 

# We will invert the pitch, so that the notes play in the opposite direction 
manipulation = To Manipulation: 0.01, 200, 300 
pitchtier = Extract pitch tier 

# We copy it because we want to modify it, not create one from scratch 
# and we want to be able to read the values of the original from somewhere 
original = Copy: "old" 
points = Get number of points 

# This for loop looks at the values of the original pitch tier and writes them 
# onto the new pitch tier 
for p to points 
    selectObject(original) 
    f = Get value at index: points - p + 1 
    t = Get time from index: p 
# If you uncomment the if block, the changes will only affect the first and last 
# quarter of the sound 
# if t < 0.25 or t > 0.75 
    selectObject(pitchtier) 
    Remove point: p 
    Add point: t, f 
# endif 
endfor 

# We replace the pitch tier 
selectObject(pitchtier, manipulation) 
Replace pitch tier 

# Resynthesize 
selectObject(manipulation) 
new_sound = Get resynthesis (overlap-add) 

# And clean up 
removeObject(original, pitchtier, manipulation) 
selectObject(new_sound) 
Rename: "modified" 
Play 

Вы измените шаг яруса путем добавления точек в разное время с разными значениями высоты тона (в Герцах), и когда вы делаете ресинтез Praat будет изменять исходные значения, чтобы они совпадали с заданными параметрами.

В вашем случае вы можете использовать значения времени от TextGrid, чтобы знать, когда необходимо добавить измененные пункты PitchTier и оставить остальных в покое. Вы также можете манипулировать длительностью, подобной этой.

В этом примере скрипт изменяет значение каждой из точек исходного тонального уровня со значением точек в инвертированном порядке, так что первая точка будет иметь значение последней. Блок if внутри for является одним из способов ограничения этих изменений подмножеством уровня основного тона, но как вы это сделаете, это будет зависеть от тех изменений, которые вы пытаетесь сделать.

+0

Да, таким образом я делаю это. Я делаю это следующим образом: в wav-файле 3 части есть ---- 1 ---- 2 --- 3 --- и я хочу изменить 1 и 3 без изменения 2. Для каждого часть говорит 1, я извлекаю питчер и меняю его и заменяю предыдущий питчер на новый. Точно так же я делаю это и для части 3. Но мой вопрос в том, что я могу одновременно изменить две части. –

+0

Не понимаю. Разделяются ли три части Звука? Или это разные части одного объекта (начало, середина и конец, скажем)? И что вы подразумеваете под «одновременным»? – jja

+0

Нет, три части принадлежат одному файлу wav. да! они представляют собой разные части одного объекта. поэтому, для изменения высоты тона. Каждый раз, когда мне приходится извлекать отдельный гребень и продолжать заменять их оригиналом. Это надежный способ сделать это. –

Смежные вопросы