授業で使ってみた音関連のOSS  -­‐‑Sonic  Piを中心に-­‐‑ 	
 
昨年列記したOSSは、	

立花

宏

首都大学東京		

2016.11.5  OSC  Tokyo  Fall		授業で使ってみた音関連のOSS  -­‐‑Sonic  Piを中心に-­‐‑ 	 内音関連OSSは、	

立花

宏

首都大学東京		

2016.11.5  OSC  Tokyo  Fall		2016楽器フェア  東京ビッグサイト 	
 冨田勲メモリアルミュージアム 	 冨田勲のシンセ 	
 

裏側 	
 

自己紹介 	 所属首都大学東京（元  東京都立大学）
大学教育センター（全学の情報教育等）
大学院都市環境科学研究科 分子応用化学専攻（化学プラント、計算機化学、人工光合成）

情報教育では、OSSを活用
大学院の授業でもOSSを活用
研究上もOSSを活用
趣味でもOSSを活用
楽器歴 ピアノ,トランペット(小学校)、その後ギター ここまではものにならず大学で 箏、尺八、篠笛、三味線（尺八、篠笛はものになる）
５年前から鼻笛（ものになる） YoutubeやSoundcloudでユーザー”tcbnhrs”

授業で 	
 学部の教養の情報授業で (MSオフィス系中心,LibreOfficeは実際に起動して動作を見せるまで．最後にSonic Piを少し試す)

同上の選択授業で（半期、2010年から7年目）
ビットマップグラフィックス GIMP  他
ベクトルグラフィックス
Inkscape 他
音・音楽関連Audacity, Aria Maestosa, MuseScore ,Sonic Pi 他

大学院で、
Avogadro,  Jmol, ImageJ, OpenMOPAC, GAMESS, babel, OpenSCAD,
Maxima, Processing 他

過去にプログラミングの入門で（半期）
OSSのJava系言語Processing（アート系、データの可視化で用いられている）を教えていた。（過去に５年間ほど）（研究用のデータの可視化にも活用）

化学数学等で Maxima他、統計関連で R 他

音のプログラミング 	 ある程度容易なもの	
Puredata	
Sonic  Pi	
abc	
MML	
	
SuperCollider,  ChucK,  CSound,  	Processing,  p5.js  や  Scratch  でも可		ProprietaryではMax  (/MSP)、vvvv他	
	

Sonic  Pi 	 今年の５月にOSS関連のニュースサイト(MOONGIFT)で存在を知る。	
すぐに使うことができ、面白い！	
	
Hello  worldに相当するのは、	
play  60	
print  “Hello  world”  や	
puts  “Hello  world”  も可	
	既に昨年度から多摩美などの教材 田所淳氏他	
SIAF  LAB 札幌国際芸術祭実行委員会 マニュアルの日本語化等	
入門的な情報は（英語、日本語共に）あるが、	それ以上の文書情報がSam  Aaronのもの以外あまりない。	
人のソースを見ると、見かけない命令や文法が散見している。	
Rubyの文法が使われていた。	
ループのstepについても(Rubyの入門書にも)全く書かれていない。	
	
自分用のメモを、書き溜めているとかなりの量になったので、公開。	
Sonic  Piメモ で検索、“SonicPi_memo.pdf”	

  今年のRubyKaigi  （日本で開催されているRubyコミュニティ主催Rubyに関する年次イベント） 	
 hXp://rubykaigi.org/2016/presentations/juliancheal.html

音程の指定法 	
 
半音((黒鍵)) 	
 
ド## 	
  	
 レ## 	
  	
  	
  	
  	
  	
 ファ## 	  	 ソ## 	
  	  	 ラ## 	 ::CCss44 	
 ::DDss44 	
  	
  	
  	
  	
 ::FFss44 	  	
 ::GGss44 	  	
 ::AAss44 	
 
レ♭ 	
 ミ♭ 	
  	
  	
  	
  	
  	
 ソ♭ 	
  	
 ラ♭ 	
  	
 シ♭ 	
 
::DDff44 	
 ::EEff44 	
  	
  	
  	
  	
 ::GGff44 	  	
 ::AAff44 	
  	
 ::BBff44 	
  	
 6611 	  	  	 6633 	
  	
  	
  	
  	
  	
 6666 	  	  	 6688 	  	  	 7700 	
 

 	
 ド 	
  	
  	
 レ 	
  	
  	
 ミ 	
  	
  	
 ファ 	
  	
 ソ 	
  	
  	
 ラ 	
  	
  	
 シ 	
  	
  	
 ド 	
 
::CC44 	
  	
 ::DD44 	  	
 ::EE44 	  	  	
 ::FF44 	  	
 ::GG44 	  	
 ::AA44 	  	
 ::BB44 	  	
 ::CC55 	
  	
 6600 	  	  	 6622 	  	  	 6644 	  	  	  	 6655 	  	  	 6677 	  	  	 6699 	  	  	 7711 	  	  	 7722 	  	 オクターブ下	 	
 4488 	  	  	 5500 	  	  	 5522 	  	  	  	 5533 	  	  	 5555 	  	  	 5577 	  	  	 5599 	  	  	 6600 	 上  	 7722 	  	  	 7744 	  	  	 7766 	  	  	  	 7777 	  	  	 7799 	  	  	 8811 	  	  	 8833 	
  	
  	
 8844

ループ 	
 無限
loop do    処理end
回数指定
3.times do
  処理
end

for i in 0...10 未満
処理
end

点３つ

for i in 0..11 以下
  処理
end

点２つ

stepは、
for i in (0..12).step(0.5)
その他	
while〜end

分岐 	
 ifを後ろに書く
i=0 if i>10
if i>=12
elsif i>=24
elseend
スペースを入れたelse if は不可
elseの末尾のeを取ってつなげる
その他  case〜when曲の入力例
use_bpm 180
play :C4 ド	
sleep 1 	play :D4 レ	sleep 1 	play :E4 ミ	
sleep 1 	play :F4 ファ	
sleep 1 	play :E4 ミ	
sleep 1 	play :D4 レ	sleep 1 	play :C4 ド
sleep 2

カエルのうた 	 play :C4 ド	play :E4 ミ	
sleep 2 	sleep 1 	play :F4 ファ	 play :C4 ド	
sleep 2 	sleep 1 	play :C4 ド	play :G4 ソ	
sleep 2 	sleep 1 	play :C4 ドplay :A4 ラ	
sleep 2
sleep 1 	play :G4 ソ	
sleep 1 	play :F4 ファ	
sleep 1 	play :E4 ミ	
sleep 2play :C4
sleep 0.5
play :C4
sleep 0.5
play :D4
sleep 0.5
play :D4
sleep 0.5
play :E4
sleep 0.5
play :E4
sleep 0.5
play :F4
sleep 0.5
play :F4
sleep 0.5
play :E4
sleep 1play :D4
sleep 1play :C4
sleep 2

ド	
	
ド	
	
レ	
	
レ	
	
ミ	
	
ミ	
	
ファ	
	
ファ	
	
ミ	
	
レ	
	
ド

カエルのうた  配列に格納 	
 
データ部分

演奏部分

a=[]
b=[]
a[0]=[:C4,:D4,:E4,:F4,:E4,:D4,:C4]b[0]=[1,1,1,1,1,1,2]a[1]=[:E4,:F4,:G4,:A4,:G4,:F4,:E4]b[1]=[1,1,1,1,1,1,2]a[2]=[:C4,:C4,:C4,:C4]b[2]=[2,2,2,2]a[3]=[:C4,:C4,:D4,:D4,:E4,:E4,:F4,:F4,:E4,:D4,:C4]b[3]=[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,1,2]

use_bpm 180
i=0a.length.times do
j=0
a[i].length.times do
play a[i][j],attack: 0.1
sleep b[i][j]
j+=1
end
i+=1
end

Runを繰り返すと、そのタイミングで音が重なって行く.

輪唱にするには、 	
 in_thread do
曲endsleep 8in_thread do
曲endsleep 8in_thread do
曲end

曲の部分に全play文または、演奏部分を入れる。
繰り返したいだけ(n)それぞれの曲の部分の外側にloopを入れれば良い.
n.loop do曲
endin_threadの代わりにlive_loopでも可Oﬃcialサイトのサンプルプログラムの全部に日本語コメントを付加 	
 

Haunted Bells
loop do	
 	
 	
 	
 	
 	
 	
 	
 	
#  無限ループ開始
sample :perc_bell, rate: (rrand 0.125, 1.5)
	#  サンプル音源の:per_bellを速度0.125〜1.5でsleep rrand(0, 2)#  間隔をランダムに0〜2拍あける.
end
	
 	
 	
 	
 	
 	
 	
 	
 	
#  無限ループここまで
	“Sonic  Piメモ”のページ上とPDF中に記載

計算上の注意 	 割り算等で片側が実数でも実数として計算されない.
puts 1./2０となる.
さらに
puts 1/2.
このような行があると、プログラム自体がエラーで実行できなくなる。
エラーメッセージとしては次の行が表示される.
(Rubyでも同様だった)
2.0ならば可Rubyでは常識？

シンセ音源の種類 	 使用法
use̲synth 上記の音源の名称
以降のplay文が指定された音源で鳴ります.

全てのシンセの名称をsynth_namesから得て１音だけ聞いてみるプログラム例.
synth_names.length.times do
print current_synth
    use_synth synth_names.tick
play :C4
sleep 0.5
end

MIDI音源よりも数は少ない（EDM系が多い）
音質はいい（SuperCollider）

シンセ音源は全てでADSRパラメータ  を調整可能 	 使用例play 60, attack: 0.2, sustain: 4

エフェクトの種類 	
 使用法with̲eﬀect エフェクトの名称, エフェクトのパラメータ do
エフェクトをかけたい音
endコードの種類 	
 使用例
play chord(:C4, M)
play chord(:C4, M, num̲octaves: 2)play̲pattern chord(:E3, :m7)
play̲pattern̲timed chord(:E3, :m7), 0.25

スケール(音階)の種類 	
 使用例
8.times do
play (scale :C, :major).tick
sleep 0.2
end
play (scale :C, :major) では、ドレミファソラシドが同時に鳴ってしまう.

サンプリング音源の種類 	
 使用例
sample サンプル名, オプション
sample :loop̲amen, rate: -1#逆再生モスキート・トーン  耳の若さ、若者だけに聞こえる音 	 周波数をMIDIナンバーに変換して使用
freq=17000
puts hz_to_midi(freq)
play hz_to_midi(freq),sustain:5

50Hz以下の超低音は録音してAudacityで観察
play 0,sustain:5(約 8.18Hz)
1

2

3

4

5

6

7

8

録音して	
	
	
	
Audacityで表示うなりの生成 	 ２つの音が１Hzずれていると、１秒間に１回のうなりを生じる。
２Hzのずれでは２回、0.5Hzのずれでは0.5回
play hz_to_midi(440), sustain:10とplay hz_to_midi(441) , sustain:10
を同時に実行すると１秒に１回のうなりが生じる．
チューニングをずらすことも可能で、centで与える．
centとは、平均律の半音を100段階に分けた値なので、１Hzを表す値は	
音程によって異なる。
play 69,sustain:10
use_cent_tuning 3.93
play 69,sustain:10# チューニングに用いるA=440の音を出す。
# Aの音を1Hz上げるcent値

平均律と純�正律の比較 	 平均律：ピアノ他、ほとんどの音楽
自在な転調を可能とするため、響を犠牲に
use_tuning :equal# 平均律とする（デフォルト）
play chord(:C4,:M)# ドミソを鳴らす
純正律：響の完全で美しい 弦楽合奏、合唱等
use_tuning :just# 純正律とする
play chord(:C4,:M)# ドミソを鳴らす
平均律（うなりがある）

純正律（均一な波形）

録音して	
	
	
	
Audacityで表示ローパスフィルタ(LPF) 	
 
指定した周波数より高い周波数を減衰させ、低い周波数を通すフィルタ		
ローパスフィルタで矩形波から倍音成分(含まれるのは奇数次のみ)を除いて	
正弦波に近づくところを観察する。
	
use_synth  :square	 	#  長方形でないので、綺麗な矩形波ではない
play  60	 	 	 	
#  中央のドを矩形波で鳴らす。
sleep  2with_fx  :lpf    do    play  60,  cutoﬀ:  60 	
#  高周波成分をローパスフィルターで除くと
    sleep  2	
 	
 	
 	
# 	
 	
 	
ほぼ正弦波となるのがわかる
end	
録音してAudacityで観察。  

ライブコーディング 	 WikipediaのDrum  Beat
最初に出てくる８ビートの例
	hXps://en.wikipedia.org/wiki/Drum_beat
閉じたハイハット	
スネアドラム	
バスドラム

MIDI用シーケンスソフトウェアを使ったピアノロールでの表示例（Aria Maestosa, GPL）

Aria  Maestosaの使い方のメモも公開 	 ８ビートのドラムのライブコーディング 	 live_loop  :cymbal  do	    8.times  do	        sample  :drum_cymbal_closed    #  閉じたハイハット        sleep  0.5	    end	end		
live_loop  :snear  do	    sync  :cymbal	
    2.times  do	        sleep  1	
        sample  :drum_snare_hard    #    スネアドラム	        sleep  1	
    end	syncは、なくても可	
end	
Runした後に新たなlive_loop		のソースを入力して再度Run	
live_loop  :bass  do	    sync  :cymbal	
する時には必要.	
    2.times  do		        sample  :drum_bass_hard    #    バスドラム	
既存のlove_loopを修正して	        sleep  2	
再Runの場合は不要.	
    end	end	一つのループ内で鳴らしても同様 	
 live_loop  :cymbal  do	    2.times  do	        sample  :drum_cymbal_closed     	#  閉じたハイハット      sample  :drum_bass_hard    		#    バスドラム	        sleep  0.5	        sample  :drum_cymbal_closed     	#  閉じたハイハット	        sleep  0.5	        sample  :drum_cymbal_closed     	#  閉じたハイハット	        sample  :drum_snare_hard    		#    スネアドラム	        sleep  0.5	        sample  :drum_cymbal_closed     	#  閉じたハイハット	        sleep  0.5	    end	end	ランダムなメロディーを追加 	
 live_loop :melo do
  use_synth :dsaw
play rrand(48,72)# 実数# play rrand_i(48,72)# 整数# play rrand_i(48,72)/2*2# 偶数# play scale(48,:major,num_octaves: 3).choose# 音階の中から# play scale(60,:hirajoshi,num_octaves: 2).choose# play scale(60,:hirajoshi,num_octaves: 2).choose,cutoff: 60# play scale(60,:egyptian,num_octaves: 2).choose# play chord(48,:major,num_octaves: 3).choose# コードの中から# play chord(48,:minor,num_octaves: 3).choose# play chord([:C,:C,:G].choose,[:major,:major7,:minor].choose) # コードで# play_pattern_timed chord([:C,:C,:G].choose,[:major,:major7,:minor].choose),0.1
sleep 1
# アルペジオでendアルペジオを正常に動作させるには 	 play_pattern_timedで鳴る音は３〜４音と決まっていない。
次に sleep 1 があると、さらに１拍が追加されてしまい、リズムが狂ってしまう。
解決法の一例
タイミングのcueだけを出す１拍で回るループを作っておき、これに sync させる
ことで毎拍の頭からアルペジオを開始できるようにする。 sleep 1 は削除する。
live_loop :timing docue :t1
sleep 1end
live_loop :melo do
sync :t1
use_synth :dsaw
play_pattern_timed chord([:C,:C,:G].choose,[:major,:major7,:minor].choose),0.025
endLibreOﬃceの音を使う 	
 LibreOﬁiceの音は、GPLライセンスでもあり自由に使える。	
音ファイルのパスを探して、Sonic  Piから直接読み込むことができる。	
使い方は、Sonic  Pi  内のsample音と同じ.	
	
バージョンによってパスが異なる。	
Mac版 4.3.7.2	
/Applications/LibreOﬃce.app/Contents/share/gallery/sounds/  	
Mac版 5.1.3.2	
/Applications/LibreOﬃce.app/Contents/Resources/gallery/sounds”。

Libre  Oﬃceの音 	 音のファイル名

s=["apert.wav","apert2.wav","applause.wav","beam.wav","beam2.wav","cow.wav”,"curve.wav","drama.wav","explos.wav","falling.wav","glasses.wav","gong.wav","horse.wav","kling.wav","kongas.wav","laser.wav","left.wav","nature1.wav”,"nature2.wav","ok.wav","pluck.wav","roll.wav","romans.wav","soft.wav",”space.wav","space2.wav","space3.wav","sparcle.wav","strom.wav","theetone.wav”,“top.wav”,“train.wav”,“untie.wav”,“ups.wav”,“wallewal.wav”]
ファイル名を指定しなくても可能（パスのみを与えてファイル名は自動取得できる.）
参考https://github.com/samaaron/sonic-pi/blob/master/etc/doc/tutorial/03.7-Sample-Packs.md

全部を続けて鳴らすプログラムは、#path="/Applications/LibreOffice.app/Contents/share/gallery/sounds/”

path="/Applications/LibreOffice.app/Contents/Resources/gallery/sounds”
i=0loop dosample path,isleep sample_duration path,i # サンプルごとの長さsleep
    i=i+1
endSonatina  Symphonic  Orchestra  の膨大なサンプリング音の利用  を全部通して聞く（全973のWAVファイル） 	
 サウンドフォント形式だが、中身はWAVファイル。	
hXp://sso.maXiaswestlund.net/	
半音刻みのWAVファイルが多数あるが、すべての音が揃っておらず、半音３つにつき１つが欠けているので、隣のファイルを
pitchまたはrpitchで音程を半音ずらして使う必要がある。	

例	
「春の海」

外部サンプル音の再生  ランダム般若心経 	 MP3はSampleとして不可	WAV,  AIFF等に要変換		
試してみた音源は→

hXp://www.sakado-­‐‑jigenji.jp/dl/hannyashingyou_b.mp3

ランダム般若心経コード 	 # ランダム般若心経# random HannyaSinggyo (Heart Sutra)# 般若心経をランダムな位置から、指定した拍数cycleTimeだけ読み上げ、これを繰り返します。
# 拍の最初と中間に、鳴り物を入れてあります。
# 音源は、mp3ファイルをwavに変換して使用。(MP3は読み込み不可)# たまたま使用した音源は、# http://www.sakado-jigenji.jp/dl/hannyashingyou_b.mp3
  use_random_seed 1
filepath="パス to /hannyashingyou_b.wav”# 音声ファイルの指定
totalTime = sample_duration filepath# 全体の長さを知る
  cycleTime = 2.0# 一度に読み上げる単位となる拍数
  limitTime = 1-cycleTime/totalTime# 全長を超えた開始時間を与えないための限界時間
sleep 1
  live_loop :speech1 do
    startTime = rand
# ０〜１のランダムな開始位置を与える
    startTime = limitTime if startTime > limitTime# 終了位置が全長を超えた場合には限界時間とする
    sample filepath ,start: startTime , finish: startTime+cycleTime/totalTime
sleep cycleTimeend
  live_loop :drum1 do
play 60,release: 0.2
sample の rate: を負の値にすると逆再生も可.
sleep cycleTime/2.0
play 72,release: 0.2
スクラッチ音等にsleep cycleTime/2.0
endEDMやノイズ系は好きか？  
使いやすいか？ 	
 入門時は、play…  で曲を入力するのも楽しいが、	
その後、自由に曲を創造できるか？	
既存の曲をいじってみたくなった場合の入力は、結構大変な作業。	
	
既存の音楽データとして、膨大なMIDIデータがあるが、Binaryであり(Rubyにも詳しくないので)そのまま読み込むのは困難。	
OSS  の  MuseScoreのMIDI→楽譜への変換機能は優れているので、さらにテキストファイルであるMusic  XML形式で出力すれば扱いが楽。	
（MuseScoreのソースを読むのも大変）	
具体的には、「春の海」を変換してみたかった。	
文字列をマッチングして、置き換えているだけだが、１対１に対応しているわ
けでなく少々面倒。	
和音のタイ、装飾音符が多数並ぶ、曲の途中での速度の指定、複数パートなど		Music  XMLをSonic  Piに変換する 	
 プログラムをProcessingで作成 	
 「春の海」のMIDIデータは作成済み。（10年以上前に）	
その後MuseScoreの楽譜としても公開。（PDとなってから）	
	
最近使っているのは、ほぼProcessingのみ。	
文字列関数で、MusicXMLを解読。	
	
装飾音符
  if  (data3[i].indexOf("ʺ<grace"ʺ)>=0)  	
タイの開始   if  (data3[i].indexOf("ʺ<tie  type=\"ʺstart"ʺ)>=0)	
	
目的を達成したが、	曲が長くてデータが大きく一度に読み込んでくれず全曲を演奏できない。	
	Forum  で質問。	
英国のRobin  Newmanさん（Raspberry  Pi関連の工作等でも活躍している）が解決法を教えてくれて、変換方法に興味を持ってくれたので、公開したところ使い方の非常に詳しい解説を作成してくれた。	
hXps://rbnrpi.wordpress.com/2016/08/30/gotchas-­‐‑when-­‐‑converting-­‐‑midi-­‐‑to-­‐‑sonic-­‐‑pi/	
hXps://rbnrpi.wordpress.com/2016/08/19/converting-­‐‑musicxml-­‐‑or-­‐‑midi-­‐‑ﬁles-­‐‑to-­‐‑work-­‐‑with-­‐‑sonic-­‐‑pi/		MusicXML→Sonic  Pi  変換後の出力例 	
 

a=[]	
 	
#  音程	b=[]	 	
#  長さ	
a[0]=[:E3,:B3,:D4,:E4,:A4,:B4,:A4,:E4,:E3,:B3,:D4,:E4,:A4,:B4,:D5,:E5,:E3,:B3,:D4,:E4,:A4,:B4,:A
b[0]=[0.5,0.25,0.25,0.25,0.25,0.25,0.25,2.0,0.5,0.25,0.25,0.25,0.25,0.25,0.25,2.0,0.5,0.25,0.25,0.25,
a[1]=[:r,[:D4,:F4],[:D4,:F4],[:B3,:E4],[:D4,:F4],[:D4,:F4],[:B3,:E4],[:D4,:F4],[:D4,:F4],:A4,:E4,:r,[:b[1]=[0.5,0.25,0.25,0.5,0.25,0.25,0.5,0.25,0.25,0.5,0.5,0.5,0.25,0.25,0.5,0.25,0.25,0.5,0.25,0.25,0.5,
途中省略	
c=[60,80,85,90,110,100,90,60,70,80,60,30,60,80,85,60,85,90,80,50,80]  #  速度BPM	
in_thread  do	for  i  in  0..a.length-­‐‑1	
use_bpm  c[i]	
for  j  in  0..a[i].length-­‐‑1	
play  a[i][j]	
sleep  b[i][j]	
の出だし
end	
end	
end

春の海

テキストファイル経由で  他のプログラムと通信できる 	 Sonic  Pi関連を検索中にたまたま見つけたPDF(約20頁)	
	
Alexandre  Rangelさん  (ブラジル)メディアアート系の人	
hXp://quasecinema.org/downloads/SoftPower_AlexandreRangel.pdf	

関連したソースの掲載はない

テルミンを作ってみた 	 Sonic  Piでは、音を長く伸ばして途中で音程を変えることができる。	
乱数をつかって		
テキストファイルから読み込んで	
テキストファイルはProcessingで書き出して	
インタラクティブに、		
テルミンは音程のアンテナと音量のアンテナがある。	
TwiXerで公開。	
そこそこのリツイートといいね！ （外国人からのみ）	
	
他の言語、RaspberryPi  で  Scratchからも可能	
Kinect,  LeapMotion  等で手の動きで操作することも可能単純�なランダムテルミン 	 s= play :C4, sustain: 99999, note_slide: 0.1,      amp: 1, amp_slide: 0.1, amp_slide_shape: 1
sleep 0.5
loop dox=rrand(60,72)
y=rrand(0.2,2)
control s, note: x, amp: ysleep rrand(0.2,2)
end

Processingで操作するテルミン 	
 コントロール部分を	
Aruduino	
Kinect	LeapMotion	
などで  ”手”にするのも容易.	

開発者のSan  Aaron氏の意見

OSCで通信  OpenSound  Control 	 教室では、管理者権限での設定が必要			
Proxyを利用していてlocalhostが参照できない等.	
p5.js（ProcessingのJavaScript版、音関連の機能はProcessingより豊富）教室での動作は難しく断念.	

竹内関数で音楽生成 	 ハッカーの遺言状──竹内郁雄の徒然苔     東大や早稲田で教授	
第18回：問題児も悪くない 	 	 	     	
        LISP界で有名
    hXps://cybozushiki.cybozu.co.jp/articles/m000434.html	
	
クリプトン・フューチャー・メディアの音楽プログラマ、藍圭介さん	
竹内関数で音楽生成 aike 	
    h>p://d.hatena.ne.jp/aike/20111112
	

Tarai  Function  Music	
    hXp://aikelab.net/tarai/			

まだSonic  Piでは誰もやっていなかったので、

Tarai関数 	
 Shepard  Tone  無限音階 	
 多数の音が考案されている。
一例
use_synth :prophet
音源
loop dofor x in 0..11
音程
play 60+x, amp: x/12.0 低→高play 72+x, amp: 1-x/12.0 高→低sleep 0.3
end
end

音量
小→大
大→小

Prophet音のA4(440Hzラ、時報)のスペクトル（周波数成分） 	
 
整数次倍音が大きく、	
特に奇数次倍音が大きい	
１/２倍も大きいProphet音の波形 	
 偶数倍音と奇数倍音の	両方を含む(整数倍音の)	
ノコギリ波に近い	

ちなみに	
奇数倍音のみでは、	
矩形波となる	データの可聴化  Soniﬁcationにも 	 大きい数値ファイルを読み込んで鳴らすことができた。	

ファイル “a1.txt”、サイズ 121.3MB 改行コードなしのスペース区切り

50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69

70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89

90 91 92 93 94 95 96 97 98 99 これの繰り返し

このMacBookで読み込みに約18秒かかった.

a=File.open(“/Users/tacMB2015/a1.txt”).read.split(“ ”) #スペース区切りでreadputs a.length# 配列に格納される    要素数  40,448,000 ４千万	
sleep 30

#  Big Data

for i in 0...a.length # … 点3つは < play a[i].to_i # to_f 文字列を整数に変換、実数は  to_f

sleep 0.1

end

PureDataは資産が豊富  書籍も多い  データはDL可→ 	
 

セミの音	
ノイズと	
High  pass  ﬁlter	
Low  pass  ﬁlter	
Band  pass  ﬁlter	の組み合わせでできている	

SonicPiでまねてみたところ鈴虫風にしかならなかった．	

Sonic  Visualiser 	
 電話のダイアル音、DTMF音	
Sonic  Visualiserの表示の一例

AudacityのFFT表示