見出し画像

ジェネラティブアート作成時の頭のなか #AltEdu2022 18 日目

 今日のお題は音を使った作品、とのこと。

Processing で音を扱うのは、多分初めてではないかと思う。そもそも Processing で音を鳴らすにはどうしたらよいのか?まずはそこから調査する。

調査しつつも、今回の作品はどうしたものかと考える。トーンを用いた自動作曲的なものにするのか、それともアルゴリズミックにビートを刻む作品にするのか、等々。

まず自動作曲的な作品について考えてみる。音楽理論は全く分からない訳ではないが、周波数的な話の範囲に留まる。小学生の時にバイオリンを習っていたが、先生と相性が合わず半年でやめてしまったことが悔やまれる。

ビートについてはどうであろうか。リズムに関する講義(といっても、正規の授業時間後に開催されていたものであった)は Eric Lyon によるエリックのサウンドレクチャー(だったかな)しか受けたことがない。数回の授業であったが、リズムを分析的に聴くことを教えてくれた非常に貴重な経験となった。リズムは耳で聴くものであるが、まさに目から鱗が落ちる間隔があった。一応、アルゴリズミックなビート生成もなんとかなりそうではあるが、私の場合は #つぶやきProcessing として作品発表したいので、それを考えるとこちらもなかなか難しそうだ。

 そんなことを思っていると、ふと noise 関数の音を聞いてみたくなった。noise 関数は様々な作品で活用 - 可視化しているので、その波形はよく分かる。しかし、それが音になった場合、どのような音になるのかは見当がつかない。であれば、今日は noise 関数の音波化を目指してみよう。

となると、作成するプログラムでは音の波形そのものが扱えなければならない。そんなことを思いつつ検索していると、次のようなページが見つかった。

 どうやら Minim というサウンドライブラリが存在するようだ。ただ、こちらの記事をよく読むと、波形の指定ではなく周波数の指定となっている。いわゆる周波数変調 frequency modulation (FM)である。当初は波形そのものを生成する AM の方を考えていたのだが、FM 方式も面白そうである。どんな音がするのであろうか。

 上記のページは Java によるものである。Java は #つぶやきProcessing には向いていないため(関数を値として扱えないため)、Minim を Python モードで利用したい。こちらも適当に検索していると、ryotako さんの記事が見つかった。

Python 版はラッパ関数などでラップされているのかな?と思いきや、そもそも Java で記述された Python である Jython であるとのこと。なるほど、それであれば Java で利用できるライブラリは Python mode でも利用できる訳である。

 上記 2 つのページを参考に、ざっとプログラムを書いてみる。

add_library('minim')
m=Minim(this)
o=m.getLineOut()
w=Oscil(440,0.5,Waves.SINE)
w.patch(o)
def setup():
    size(500,250)
N=lambda s:(noise(frameCount*s)-.5)*880+400
def draw():
    clear()
    fill(-1)
    text("SOUND ONLY",210,140)
    h=N(.01)+N(.02)*.5+N(.04)*.25
    w.setFrequency(h)

note では動画を直接取り扱えないため、なんのことやら…という感じではあるが、端的に言えばテルミンのような音色である。そもそもテルミンの原理から考えれば、そりゃまぁそうなるか、という感じもする。

 これはこれで面白いので、今日はこの作品を #つぶやきProcessing 化してみる。インデントを除去しても少々文字数が多いので、倍音成分を少し減らして 280 文字に収めた。


この記事が気に入ったらサポートをしてみませんか?