見出し画像

音楽と部品と全体 シンセ puredata bytebeat




還元主義とホーリズム


全体は個別の総体以上もしくは全体は個別の総体でしょうか。個別の部品に分解していけば全体を理解できるという考え方を要素還元主義というようです。逆に全体は個別の部品の総体以上だとする考えを全体論、ホーリズムというようです。




厳密な意味からやや外れて還元主義⇔全体論的な方向性という二つの軸を考えます。還元主義はイメージできる、想定内の出来事、理解できるもので物事を構成する。全体主義は理解できる個々の部品からでも理解できない挙動を見出しうる、予想外の出来事的なものをイメージします。制作や目的の方向性としてこの二つのイメージを使うことを考えます。

普段maxやpdで音楽を作ったりしています。また最近Pythonやc++言語で音響合成ライブラリを作成して音楽制作を行なっています。ただライブラリを制作する過程で自分がユニットジェネレータの考え方やパラダイムを土台にしか考えることができないことに何か想像力の欠如を感じていました。基本的にはmaxやpdや他のサウンドプログラミング言語と同じパラダイムであってそれ以外のパラダイムはあるのだろうかということを考え始めました。



ユニットジェネレータ

 オシレータやエンベロープ、フィルター、シーケンサーなど単一の機能を持ったパーツを組み合わせることで様々な機能を作るという考え方はユニットジェネレータと言います。モジュラーシンセとかもユニットジェネレータ的な感じで似ています。maxやpdなどにおけるUnit generatorという考え方は、個々の単一機能の部品を組み上げて総体を作るという還元主義的なパラダイムです。オシレータ、エンベロープ、シーケンサーという個々のパーツが相互作用というよりは、独立に機能を持ち動き、全体を作り上げるという作り方やパラダイムは還元主義的です。シンセなどで少ないパラメータなどから予測できない挙動や思いがけない挙動というのは還元主義というよりは全体論的挙動のように感じます。
maxやpuredataなどを使う動機の一つに予測できない新しいものを見たいという動機があるとします。これは全体論的な挙動を動機としていると考えられます。

bytebeatと還元主義


bytebeatという音楽の制作スタイルがあります。

log(t*[t,1,t*t*t,t*t*t*t][(t>>5)%4])*((t/10*[1,3,3,2,5,3,3,2,1][(t>>11)%8])%(10+[3,2,1,2,3,2,3,2][(t>>10)%8]/1.1))%256


t*([1,2,3,4,5,6][(t>>10)%3])+t*([1,2,3,4,5,6][(t>>5)%4])+t*t*([1,2,3,4,5,6][(t>>10)%4])%128



128+sin(3e5/([t*2,0,t,t, t*40, t/10, t/3, t*100,t*t,t/2][(t>>10)%8]%16383))*128+([t*t,t*t*t,t,t,1,1][(t>>10)%5]*t/3&100)%256


128+sin(((((t>>3)*(t>>10))>>16)%14)*3e5/([t*100,t*400,t*300,t*100 ][(t>>15)%4]%(32767<<4)))*64
+sin(3e5/([t,t,t,t][(t>>15)%4]%(32767)))*64


64+32+([3,3,0,7 ,3,0,3,5][(t>>[6,10,13,8][(t>>15)%4])%8]*(t&t/[4,8,8,7][(t>>16)%4])&64)%256
+sin(3e5/(([t,t*2,t*4,t/2][(t>>[4,11,6,15, 13,5,14,13, 12,6,11,14, 13,5,13,15][(t>>14)%16])%4])%(32767/[1,2,4,8][(t>>15)%4])))*64


beat

sin( pow((1-((10*t%8000)/8000)),30)*10*6.28)*64*[1,0,1,10 ,1,10,1,10 ,10,0,1,100 ,1,10,1,10 ][(t/(480000 / 600)|0)%16]
+sin( pow((1-((10*t%8000)/8000)),10)*5*6.28)*64*[2,1,0,1 ,2,5,0,0 ,0,1,0,20,40,1,0,10 ][(t/(480000 / 600)|0)%16]+128


cos( log((10*t%8000))*30)*64*[1,0,0,1 ,0,0,1,0 ,1,0,1,1 ,1,0,1,0 ][(t/(480000 / 600)|0)%16]%64+128



s=44000,
(sin(16e4* log10((10*t%s))/2048)*64*[1,0,0,1 ,2.1,0,1,0 ,0,1,0,1 ,1.01,0,0,1 ][(t/(60*s / 600)|0)%16]%64
+((random()*32-128)*[0,0,1,0 ,0,1,0,0 ,0,1,0,0 ,0,1,1,0 ][(t/(60*s / 600)|0)%16]%32)
//+(t/2^10)*[1,1,0,2 ,6,1,0,2 ,4,1,1.3,0 ,6,1,0,0  ,1,2,1.3,2 ,6,1,3,2 ,4,1,1.3,0 ,6,1,0.5,0 ][(t/(60*s / 600)|0)%32]%64)%256
+(t/16^13)*[1,1,0,2 ,3,1,0,2 ,4,1,8,2 ,0,1,0,0  ,1,2,1.3,2 ,0,1,3,2 ,4,1,1.3,0 ,6,1,0.5,0 ][(t/(60*s / 600)|0)%6]%64)%128
+127

s=44000,
(cos(15e4* log10((5*t%s))/2048)*64*[1,0,0,0 ,t^123,0,0,0 ,1,0,0,0, t^125,0,0,0 ][(t/(60*s / 600)|0)%16]%100
+((random()*32-127)*[0,0,1,0 ,0,0,1,0 ,0,0,1,0 ,0,0,1,0 ][(t/(60*s / 600)|0)%16]%64)
+((t/17^17)%64)*[0,1,2,16 ,0,1,4,2 ,0,20,2,2 ,0,2,4,0  ,0,2,3,2 ,0,1,3,2 ,0,1,6,30 ,0,1,2,0 ][(t/(60*s / 600)|0)%32]%227)%127
+127


s=60000,
(cos(21e4* log10((5*t%s))/2048)*64*[1,0,0,0 ,1,0,0,0 ,1,0,0,0, 1,0,0,0 ][(t/(60*s / 600)|0)%16]%100
+((random()*32-16)*[0,0,1,0 ,0,0,1,0 ,0,0,1,0 ,0,0,1,0 ][(t/(60*s / 600)|0)%16]%100)
+(((t/15^23)%64)+(((t*2.02)/15^43)%64))*[0,1,2,3 ,0,1,2,2 ,0,1,2,2 ,0,1,4,7  ,0,1,3,2 ,0,1,4.4,6 ,0,1,2,3 ,0,1,2,4 ][(t/(60*s / 600)|0)%32]%227)%127

+127


s=44000,
(
(tanh(2.5*cos(( 30e5* log10((10*t%s)))/65536)) *64*[1,0,0,0, 1,0,0,0 ,1,0,0,0, 1,0,0,0 ][(t/(60*s / 600)|0)%16]%64-32

+(t/8^10)*[0,2,5,2 ,6,1,2,2 ,4,1,1.3,2 ,2,3,1,5  ,7,2,3.3,2 ,6,1,3,2 ,4,1,1.3,1 ,6,1,1.5,1 ][(t/(60*s / 600)|0)%16]%32)%128
+(t/12^10)*[2,1,3/4,2 ,3,1,0,2 ,4,1,8,2 ,0,1,0,0  ,1,2,1.3,2 ,0,1,3,2 ,4,1,1.3,0 ,6,1,0.5,0 ][(t/(60*s / 600)|0)%32]%64 
)%256
+128



bytebeatは非常に短い記述から複雑な挙動が発生するので全体論的な構造をしているような創発的な挙動があるようなかんじがします。実際のところどうでしょうか?

Bytebeatの有名な42メロディを見てみます。

t*(42&t>>10)


の一行から32ステップの音楽が発生します。

この構造はtの部分がオシレータです。42&t>>10の部分がメロディです。t>>10の部分はテンポです。42&t>>10の部分は個々の部品以上の機能が発生していますがよくみると意外と個々の部品は個々の機能を持っている還元主義的な構造をしていることがわかります。記述が短いので全体主義的に見えますが意外と個別機能を持っています。


bytebeatは記述が長くなっていくにつれて還元主義的制作構造を持っていくようです。個々のシーケンスや単一機能を持つパーツの組み合わせで全体を作るような作りをしている人が多いようです。その場合、構造の問題ではなく記述の問題となるかもしれません。




構造と階層

 楽器の多くはピッチを変更できますが、大まかに構造的にピッチを変更できるものと固定された複数のピッチの構造を並列に多数並べてそれらを鳴らすことによってピッチを変更できるようにしたものの二つがあるかもしれません。これは固定ピッチ楽器とも呼ばれるようですがうまく検索に引っかかりませんでした。ピアノ、鉄琴、木琴、ドラム、ハープ、ハーモニカなどは複数の発音体を用意してそれらを発音させるかどうかによってピッチや音色を変更させます。一方で弦楽器やフルートのような楽器などは単一、もしくは限定された発音体のピッチ自体を変更させるような構造を持っています。仮にこれらを自由ピッチ楽器とし、もう一方を固定ピッチ楽器とします。楽器のパラメータを単純化すると自由ピッチ楽器はピッチと発音=エンベロープに対し、固定ピッチ楽器は発音=エンベロープのみとなるかもしれません。シンセはその意味では自由ピッチ楽器的構造をしているようです。

自由ピッチと固定ピッチ楽器の構造を考えるとピッチを可変させるという部分の有無で構造的に差が発生するように感じます。自由ピッチ楽器の場合、ピッチの可変の機構があります。

固定ピッチ楽器と自由ピッチ楽器の構造上の同時発音数を考えると固定ピッチ楽器の同時発音数のパラメータは音域のパラメータと相関しています。4オクターブの音域を発音するためには4オクターブ分の個数の発音体を用意する必要があります。同時に使うかどうかではなくどのくらいの音域を使用するかに同時発音数は関連しています。 

同時発音ということを考えた場合、限られた発音体を交代で使う必要があります。自由ピッチ楽器を考えると限られたボイス数に対し発音の割り当てという構造があります。シンセの場合、同時発音数が限られている場合、発音の割り当てをする必要があります。ボイスアロケーション。
一方で固定ピッチ楽器の場合、発音のリトリガーはありますが割り当てという構造は省略することができます。これはPuredataの場合です。


ボイスアロケーションはpolyというオブジェクトが行います。
poly→voiceという構造があり、限定された構造を割り当てるようになっています。



ある種通常のシンセは個数の限定されたボイスに対して割り当てという構造があるのでその分複雑になります。

PureDataによる作成

 

並列性



よりシンプルな考え方、例えば固定ピッチ楽器的な作法で作成することを考えます。これは固定された周波数440Hzのオシレータです。


オシレータを二つ足し合わせてみることが出来るようになったとします。これで要素の並列が出来るようになります。

2→n>2 の難易度


並列という考え方はシンプルかもしれません。
2個の並列が出来れば2個以上、例えば8個の並列も難易度的には差があまりないと考えます。最小機能の単体パーツを作成して、それを並列することで機能を作るという作り方はシンプルです。


クラスタ

 最小機能の単体パーツを作成します。オシレータ同士を掛け合わせると音量が変化します。ゆっくりしたオシレータはパラメータの変更にも使えます。片方のオシレータはエンベロープになります。これは決まった周波数の音を担う440Hzのオシレータと音量、テンポを担う0.5Hzのオシレータから出来ています。ピッチと音量、テンポの調整を行う最小機能の単体パーツです。


 このようなパーツを並列に並べてテンポをずらすことでシーケンスのような動きを作成することが出来ます。これは先ほどのボイス、割り当てというような階層構造ではなく、平面的な低い階層構造を持っています。まとまって一つの機能を行うというシステムというよりは、個々の独立した単機能の集合体です。集合体なので一部を削除しても動作します。






よろしければサポートお願いします!