Praatのスクリプト機能を使って簡単な音楽を流す方法

概要
音声分析ソフトPraatのスクリプト機能を使い、簡単な音楽を合成して、再生する方法を紹介する。

説明

音声分析ソフトの Praat では、簡単な音を合成する機能が付いている。また、簡単なスクリプト機能もあるので、これらの機能を組み合わせて簡単な音楽を流すことができる。

後述のスクリプトの1行目においては、文字で音譜を示してある。ここを変えれば別の音楽にすることも可能だ。

スクリプト

以下のスクリプトを実行すると「きらきら星」の音楽が流れる(実際に流れる音声は以下を参照)。

なお、このスクリプトの仕様上、実行し終わったときに、合成された音楽以外の Praat Object はすべて消えるので注意されたい。

musicNotes$ = "ccggaagxffeeddcxggffeedxggffeedxccggaagxffeeddcx"

# Create a mute sound
do("Create Sound from formula...", "x", 1, 0.0, 0.5, 44100, "0")

# Create sounds (c-b)
@makeSound: 262, "c"
@makeSound: 290, "d"
@makeSound: 330, "e"
@makeSound: 349, "f"
@makeSound: 392, "g"
@makeSound: 440, "a"
@makeSound: 494, "b"

musicLength = length(musicNotes$)

# Copy sounds to create the music
for i from 1 to musicLength
  note$ = mid$(musicNotes$, i, 1)
  selectObject: "Sound " + note$
  do("Copy...", "note" + string$(i))
endfor

# Concatenate sounds
for i from 1 to musicLength
  if i== 1
    selectObject: "Sound note" + string$(i)
  else
    plusObject: "Sound note" + string$(i)
  endif
endfor
do("Concatenate")
do("Rename...", "result")

# Play the music
do("Play")

# Remove work files
select all
minusObject: "Sound result"
do("Remove")

# Subroutine
procedure makeSound: frequency, soundName$
  do("Create Sound as pure tone...", soundName$, 1, 0.0, 0.5, 44100, frequency, 0.2, 0.01, 0.01)
endproc