遊び tokidoki 仕事

数学と音楽と教育と遊び

Top | おしごと | ゼミ | がくせい | すうがく | かがく | きょういく | おんがく | おきにー | Tips | Photo | イベント | ものもう | あれこれ | About

sin波による疑似フォルマントシミュレーション

今年の4年ゼミ生の一人は音声分析・合成をテーマにしている.
EXCEL上でちまちま作業してもらっているが,
線形予測によるフォルマント抽出がうまくいかないのか,
なかなか母音「あいうえお」すら \sin波から合成できないでいる.

手軽にBASICで母音の合成ぐらいできないものかと探したら,
高々6つ程度の倍音の重ね合わせで「あいうえお」らしい音を作っているページを見つけた.
qiita.com
本当に手軽にできそうだったので,10進BASICでサウンド生成する方法を探して作ってみた.
十進BASIC−外部プログラムの利用

でもって,音程も適当に定めて実行したのが↓

う~ん,そう思って聞けば聞こえなくもない程度.

AquesTalkつかえば,簡単なんだけどね↓

https://www.a-quest.com/index.html


以下,BASICソースと使い方.
実行すると,母音と音程の列を入力するよう聞いてくるので,
母音[aiueo]と音程[0~9]の組合せをinput.
上掲の音源では
   a3i7u9e0o2
とinputしてある.
するとソースのある場所に test.wav が生成されダイレクトにそれが再生される.
いや,その予定だったのだけど,やっているうちにダイレクト再生できなくなった.あれれ.
まぁ,生成された test.wav をクリックすれば再生できるようなので.

REM [疑似母音フォルマント シミュレータ]
REM Ver. 2017/12/23
REM 参考:
REM BASIC 元ネタ:http://hp.vector.co.jp/authors/VA008683/ExtProg.htm
REM               testwave.bas  十進BASICによる音声ファイル生成プログラム 
REM               chr$関数の引数として全ての1バイト整数が許される様に、オプションメニューの
REM               「互換性」「動作」で「文字列処理の単位」を「バイト」に設定して実行すること
REM フォルマント:https://qiita.com/rild/items/339c5c36f4c1ad8d4325

OPTION CHARACTER BYTE
DECLARE FUNCTION formant

INPUT  PROMPT "母音とその高さの列をどうぞ.(「あい↑う↑↑え↓お」は a3i7u9e0o2 など)":vw$
LET vwlen=LEN(vw$)
LET d=0.3  !継続時間(秒)
LET f0=220 !正弦波周波数(Hz)
LET db=-10 !生成波形の最大値(±32767を0dBとする)
LET fs=44100 !標本化周波数(Hz)
LET bps=fs*4 !1秒当りのデータ量(ステレオ16ビット量子化)
LET dsize=d*vwlen*fs*4 !オーディオデータサイズ
LET fsize=dsize+36 !ファイルサイズ(先頭8Bを除く)
LET fmtsize=16 !フォーマットサイズ
LET channel=2^17+1 !ステレオPCMデータの指定
LET reso=2^20+4 !16ビットの指定
LET a=10^(db/20)
OPEN #6 : NAME "test.wav" !ファイルを開き、この名前のファイルが
ERASE #6 !既に存在していた場合には上書きを指定
LET t0=TIME
PRINT #6 : "RIFF"; !以下、wavファイルのヘッダーを作成
CALL out4(fsize) !
PRINT #6 : "WAVEfmt "; !
CALL out4(fmtsize) !
CALL out4(channel) !
CALL out4(fs) !
CALL out4(bps) !
CALL out4(reso) !
PRINT #6 : "data"; !
CALL out4(dsize) !ここまでがヘッダー用の出力
LET al=a*32767 !左チャネル係数
LET ar=a*65535 !右チャネル係数
LET k0=f0/fs*PI*2 !引数の刻み
LET audio$="" !オーディオデータバッファを初期化
FOR vw=0 TO vwlen/2-1
   LET count=0 !カウンタをリセット
   LET vow$=vw$(vw*2+1:vw*2+1)
   LET ht=VAL(vw$(vw*2+2:vw*2+2))
   PRINT vow$,ht
   FOR i=1 TO d*fs
      LET vsin=formant(vow$,k0*(1+ht/20))
      LET lch=INT(vsin*al+0.5)
      IF lch<0 THEN LET lch=lch+65536 !負の数は補数表現
      LET rch=INT(vsin*ar+0.5)
      IF rch<0 THEN LET rch=rch+65536 !負の数は補数表現
      LET audio$=audio$&CHR$(MOD(lch,256))&CHR$(INT(lch/256))&CHR$(MOD(rch,256))&CHR$(INT(rch/256))
      LET count=count+1
      IF count=64 THEN !バッファデータが所定の長さ(64サンプル256Bがほぼ最適)に達したら
         PRINT #6 : audio$; !データをファイルに出力して
         LET audio$="" !バッファを初期化し
         LET count=0 !カウンタをリセット
      END IF 
   NEXT i
   PRINT #6 : audio$; !バッファに残ったデータを出力して
NEXT vw
CLOSE #6 !ファイルを閉じる
PRINT "elapsed time = ";TIME-t0;"seconds"

PLAYSOUND "test.wav"

SUB out4(i4) !4バイト整数の出力(little endian)
   LET j4=i4
   FOR m=0 TO 3
      PRINT #6 : CHR$(MOD(j4,256));
      LET j4=INT(j4/256)
   NEXT m
END SUB

FUNCTION formant(v$,k)
   SELECT CASE v$
   CASE "a"
      LET formant=0.19*SIN(i*k*4)+0.09*SIN(i*k*2)+0.08*SIN(i*k*3)+0.08*SIN(i*k*5)+0.07*SIN(i*k*1)+0.07*SIN(i*k*6)
   CASE "i"
      LET formant=0.19*SIN(i*k)+0.09*SIN(i*k*2)+0.08*SIN(i*k*11)+0.08*SIN(i*k*13)+0.07*SIN(i*k*12)
   CASE "u"
      LET formant=0.19*SIN(i*k)+0.09*SIN(i*k*6)+0.08*SIN(i*k*2)+0.08*SIN(i*k*5)+0.08*SIN(i*k*4)
   CASE "e"
      LET formant=0.19*SIN(i*k)+0.09*SIN(i*k*2)+0.08*SIN(i*k*3)+0.08*SIN(i*k*11)+0.07*SIN(i*k*4)
   CASE "o"
      LET formant=0.19*SIN(i*k*4)+0.09*SIN(i*k*2)+0.08*SIN(i*k)+0.08*SIN(i*k*3)
   CASE ELSE
      LET formant=SIN(i*k)
   END SELECT
END FUNCTION
END 

Moire Amore!(1)―現象編

むか~しむかし,あるゼミ生がモアレを題材に卒論を書いたことがある.
日付を見るともう8年も前,2代目の作品だ.tokidoki.hatenablog.jp
で今年の卒論,10代目となるのだが,
錯視の数理としてちっとも数学に乗ってこないゼミを1人行ってきた.
もとはベンハムのコマを数理的なモデルを立てて
色が見える仕組みの解明を目指していたのだが,
科学実験の枠を超えて数理モデルを立てるには未だ至らず.
(まじめにやると心理物理学とか生理光学とかにはまっていくし.)www.ncsm.city.nagoya.jp
拉致があかないので,
あるときから平行してモアレ現象で何かできないか探し始めていた.
ああ,あの干渉縞のことね,それなりに数式は立てられるだろうけど,
高校数学の練習問題ぐらいなんじゃない?と思われるだろう.
だが,中には結構面白い現象があるんだってことを最近知った.
なんと格子縞は拡大レンズの役割をするのだ.
初めは身の回りの品でモアレが起こる例としての下の動画の中で,
六方格子状に穴が並んだ板を重ねて回転させると
六角格子が拡大される現象から,おや?となったことに始まる.
モアレテスト - YouTube

あれっ,ってことは拡大レンズになるのかもしれない.
他にそんな実験してないか探したところ,例えば以下の動画などどうだろう.


Moire Lens/モアレレンズ - YouTube
同じ文字が細かく並んだシートの上に,同一ピッチで穴を開けたシートを載せると
小さな文字が拡大されて浮き出てくるのだ.な~んと.

で,ぼや~っと運転しながら考えてたら意味が分かってきた.
要するにこれは「粗視化」の一種なんだ.
遠くから見るという操作は,図形の高周波成分を短周期で積分してしまうと理解できる.
でもその前に自分の手の中でも実験したくなり,早速作ってみたよBASICで.
↓はその実験動画.前半は格子を微小角回転させて文字を拡大,
後半は格子のピッチを文字のピッチより縮小させて文字を拡大している.


拡大縮小モアレ模様 - YouTube

そしてそのソース.

REM
REM [Moire de expansion]
REM Ver. 2015/12/01
REM 左ドラッグしながら上にマウスを動かすと格子ピッチが縮小される
REM ドラッグしないで上に動かすと格子が左右に微小に回転する
REM

SET WINDOW 0,1,0,1
SET TEXT font "",7
LET dt=.01

! 下地となる文字模様画像作成
INPUT  PROMPT "Character":c$
FOR x=0 TO 1 STEP dt
   FOR y=0 TO 1 STEP dt
      PLOT TEXT ,AT x,y:c$ ! 拡大したい文字
   NEXT y
NEXT x
! このBasicファイルと同じ場所に下地となる文字模様画像を保存
gsave "moire.png"

! 画面のピッチに合わせて変更のこと(BASIC画面801×801では 6 が丁度良い).
SET LINE width 6
pause
DO
   mouse poll mx,my,left,right
   SET DRAW mode hidden
   CLEAR
   gload "moire.png"
   IF left=1 THEN
      LET e=1+my/10
      LET sx=mx/100
      FOR x=0 TO e STEP dt*e
         PLOT LINES: x+sx,0; x+sx,1
      NEXT x
      FOR y=0 TO e STEP dt*e
         PLOT LINES: 0,y+sx; 1,y+sx
      NEXT y
   ELSE
      LET sy=my/100
      LET sx=SIN((mx-.5)*PI/10)
      FOR x=0 TO 1 STEP dt
         PLOT LINES: x+sy,0; x+sy+sx,1
      NEXT x
      FOR y=0 TO 1 STEP dt
         PLOT LINES: 0,y; 1,y-sx
      NEXT y
   END IF
   SET DRAW mode explicit
   WAIT DELAY .1
LOOP UNTIL right=1
END

さて,これをどうやって数式で理解するか.それは次回に.

f:id:okiraku894:20151202123949p:plain:w400

閑(しず)かな知性

電気で生きる微生物を初めて特定 | 理化学研究所
なんだろう,相変わらず生き物は想像外の姿を見せるね.
もちろん,その生き物に電気プラグがついてるって話じゃないよ.

むしろ,電気プラグがついてそうなのはこっち.
Boston Dynamics All Prototypes - YouTube
こちらの進化,異常に速い.
そして前にもふれたけど,この企業,Googleに買収された.
そしてGoogleは人工知能関連企業も買い集めている.
もはやSkyNetだね.

ターミネーター (日本語吹替完全版) スチールブック仕様 [Blu-ray]

ターミネーター (日本語吹替完全版) スチールブック仕様 [Blu-ray]

それにしても,植物ですら何か意志を持って進化しているように思えるときがある.
本当に自然淘汰だけで説明できるのか,つい疑ってしまう.
例えば,実の中に種が何個あるか何らかの方法で判断している木があるのだと.↓原論文.
http://www.jstor.org/stable/full/10.1086/675063
なんでもその果実の種にハエが卵を産み付けると,
種が複数個そこにあるなら産み付けられた種だけ成長を止めることで
ハエの幼虫を死なせ残りの種を確保する,ってだけでなく,
もしその果実に種が一個しかないならたとえ卵を産み付けられていても
成長を止めないのだそうだ.
というのも,一個しかないときに成長を止めたら種が何も残らなくなってしまう,
それならたとえわずかであれ,卵が孵らない可能性に賭けて
そのまま種を育てる,ということらしい.
こんな風に果実の種の個数を植物が把握しているだけでなく,
その状態に応じて「判断」を変えているということなんだ.

虫に葉っぱを齧られるとその齧る振動を感じてその葉っぱに苦い成分を出す,
という植物があるという話を何かで読んだが,
あの一見静かな植物たちが,こんな風に実に巧妙な戦略で生き延びている.
なんだろう,「植物知」という形の知性ってものがあるように思う.
あるいは時間軸方向にうんと長い尺度を取って見えてくる「知性」が
あるんじゃないだろうか.

こういった生物学関係で面白いネタを紹介してくれるページを
結構前に見つけたので紹介.

たとえば(これは教科学のネタに使えないかと探していて見つけたのだけど)
葉っぱが黄金比角で生える仕組み.これはよく黄金比が自然界にもあるんだよ,
って形で数学読み物に引き合いに出されるのだけど,
その理屈だったら別に黄金比でなくとも無理数なら何でもいいじゃん,
って自分はよく突っ込んでた.
同じように数学者の説明に納得していない著者が,
生物学者の視点からきちんと議論してみたというお話.
第14回:全ての植物をフィボナッチの呪いから救い出す

あと,こんなハチャメチャなページもあった.やりすぎでしょ.
生命科学研究の大御所はアートに昇華したか?

何しろ人間は愚かだから,人知を超えたものをすぐに忘れる.
だから10万年先の子孫に平気で負の遺産を残せるのだよね.
ま,その話は別の機会に.

波紋と螺旋とフィボナッチ: 数理の眼鏡でみえてくる生命の形の神秘

波紋と螺旋とフィボナッチ: 数理の眼鏡でみえてくる生命の形の神秘

残念な国(2)―それでも子供は育つ

時期が時期だから「安保うんぬん」を話題にしたいところだが,ちょっと変化球.
国は残念でも,それに呑み込まれず子どもたちを育てている人たちがいるって視点で.

数年前から「すっげーなこいつら」って思ってる,小中学生の自由研究コンクール.www.shizecon.net
どうだろうこの自由な視点と研究,実際学生の卒論ネタにもできると思うよ.

さて,統計とコンピュータも終了を迎えつつあって理解度調査をしているのだが,
ここにきてなお「度数分布」「ヒストグラム」「分散」を「知らない」と回答してくる学生がいる.
え...えぇっと,ネタだよね,それ...

と,現実から目を逸らしながら小中学生の自由研究を眺める.
ほらほら,中学生ですらカイ二乗検定使ってるよ↓
f:id:okiraku894:20150720170004p:plain:w600

お父さんの薬がみつからないっ!
秋田県由利本荘市立本荘東中学校

結局のところ,学ぶ当人が必要性を感じていなければ
どれだけ趣向を凝らしても馬耳東風ということなんだ.
だから特に今期,学習環境デザインを意識して試みたのだけど,
ちょっと間に合わなかったのが残念.
再び次年度,より多くの学生が意義を感じられるような,
内発的動機をもてるような仕組みを考えなくては,と思う次第.

ところでこの「自然科学観察コンクール」(シゼコン)に刈谷周辺の小中学校が
毎年多数入選しているのに気づく.2014年度だけでも↓のように.

金属にできる「虹」の研究
 愛知県刈谷市立住吉小学校6年
バスケットボールのシュートの研究~どうしてネットはひっくり返るのか~
 愛知県刈谷市立富士松中学校3年
忍者の科学
 愛知県刈谷市立雁が音中学校
炊きたてご飯の「ぺらぺら膜」の秘密
 愛知県刈谷市立朝日中学校3年 科学部
ヨモギ餅の研究 〜なぜ、雑草であるヨモギを餅の中に入れるのか?〜
 愛知県刈谷市立刈谷南中学校

これはもしや,大学がずっと続けている「訪問科学実験」の効果なのかな.
訪問科学実験|愛知教育大学

これ,算数・数学でもできないものかな.
ちょっとまえの数学同人Sigmaなら,あるいはできたかもしれないが,
現在は活動もままならなくなってきたからなぁ...

人を伸ばす力―内発と自律のすすめ

人を伸ばす力―内発と自律のすすめ

世界は実在なのか関係なのか

もうそこまで来ているんだね.eetimes.jp

当然これと人工知能技術は結びつくだろうし,そうなると新たな知性との
例の問題も気になってくる.
ネズミではないアルジャーノンと僕らはどう付き合うべきなのかということ.tokidoki.hatenablog.jp

いや,その背景はK.プリブラムの脳ホログラフィーを意識しているのだけどね.

ニューエイジサイエンスにどっぷりはまった大学時代がちょいと懐かしい.
あのころ,ニュートン力学的な世界観に人間存在の意義を揺さぶられ,
それに対抗するべくウィルバーやボーム,ユング...とハマっていったんだった.
まさに世界は実在なのか関係なのか,が問題だった.

ときどきふと思うのは似たようなパラダイムシフトは数学の中ではよく起こる.
それを統一的に記述しているのがCategory theoryなんだと思う.

空像としての世界―ホログラフィをパラダイムとして

空像としての世界―ホログラフィをパラダイムとして

シンクロニシティ

シンクロニシティ

追記:おや,「アルジャーノンに花束を」ドラマリメイク始まるんだね.www.tbs.co.jp
しかも脚本,野島伸司じゃないですか!
明日ママ以来,この国では,もはや90年代のような"自由な表現"が
許されなくなったんだと酷く窮屈に思ったのだけど,さて今度はどう出るのかな,お互い.

アルジャーノンに花束を

アルジャーノンに花束を