Изменение высоты звука в праате

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

1 ответ

Решение

Вы можете использовать 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 Это один из способов ограничить эти изменения подмножеством уровня высоты тона, но то, как вы это сделаете, будет зависеть от того, какие изменения вы пытаетесь внести.

Другие вопросы по тегам