フェスに出演しました 3

イメージ
アイヌ文化フェスティバル2021に出演しました。 備忘録として。 前日仕込み とはいっても音響は自前の機材をほとんど使わないので、使いそうなモノ(ワイヤレス関連と卓まわり特にPC、インターフェイス関連)だけよりわけて荷揚げです。 スピーカー、卓、PCCなど場所を指定して置いてもらいました。 奥のモニター。いつもの場所にスタンドで立ててもらいました。 メイン&前モニター。 前モニターは場所が厳しくてこの位置に。同軸なので軸外の音の変化がすくないのが良い。 メインはラインアレーなんで、客席では明瞭度が高い。舞台上では、低音の回り込みは少なく客席からの跳ね返りは大きく感じられる。 卓廻り。手前がCL3。奥がCL5。 手元全貌。 PCはいつも通りの右側に戻しました。台本は箱馬を重ねた上にのっています。 緑のトレーは3Dプリンターで作ったもの。RIVAGEに合わせて作ったので、CLには収まりが悪く、ちょっと斜めになっています。 写ってませんがヘッドホンは自前のを引っ張り出してきました。 TBマイクは借りた58です。 案の定、照明、映像に時間がかかり、隙間で音出しして、あとはレイヤーやユーザーデファインドキーの設定に時間を費しました。 カスタムレイヤーの設定 CLのいやらしいところはMIX/MTXのレイヤーがインプットの側のブロックに出せないところ。 こんな風にNanoPadをCentraLogic上に置いちゃうと、MIXにアクセスしにくくなってしまう。 最初はNanoPadをどけながらいじっていたんだけど、かなり面倒。 カスタムレイヤーがみっつ設定できるので、A2に出力用のカスタムを設定したらとたんに便利になりました。LS9的な使い勝手が復活です。 ユーザーデファインドキーの設定 これはLS9にも設定してるんだけど、comp1/EQ/Home画面のbookmark、TB On/Off、TB画面を呼びだせるようにしておくと便利です。 何だか調子が悪い?..本番中に止まる 他団体のリハがお先で進んでいくんだけど、何だか調子が悪い感じ?繋がらないチャンネルがあったり、出音が変だったり… 曰くDanteを目一杯使っていて、かつDanteとMADI変換してるところがあって上手くいってないのではないか、あとCL5自体もおかしい、とのこと。まぢか。困る

Pythonでlambdaをいじる。ちょっと闇なswitch編


結局やりたいことは、

  • スイッチの古い状態と新しい状態とプレイヤーの状態から次の動作を決めて出力し、
  • 新しい状態を古い状態として保存する、

の繰り返しです。
~if~else~でも構築できるんだけど、条件が多いと書きにくいし、見てもよくわからないものになってしまいそう。
スイッチ的なものがあればなあ。ってそもそもPythonにはswitchないし...
そこをかんがえてみました。

前回のクイックソートを例に。

通常のdef関数定義


def qs( xs ) :
        le = [x for x in xs[1:] if x<=xs[0] ]
        gt = [x for x in xs[1:] if x>xs[0] ]
        if xs == []:
                return []
        else:
                return qs( le ) + [ xs[0] ] + qs( gt )

lambda式で関数定義


qs=(lambda xs :
    (lambda
        le = [x for x in xs[1:] if x<=xs[0] ] ,
        gt = [x for x in xs[1:] if x>xs[0] ] :
        [] if xs == [] else
        qs( le ) + [ xs[0] ] + qs( gt )
    )()
)

これをスイッチ風にします。

まず準備。

box=lambda *x:x    #タプルに入れる
unbox=lambda x:x[-1]    #最後の要素を返す
do=box             #良さげな名前にする
switch=unbox         #同上
これを使います。するとこんな風になります。

qs=(lambda xs :
    (lambda
        le = [x for x in xs[1:] if x<=xs[0] ] ,
        gt = [x for x in xs[1:] if x>xs[0] ] :
        switch(
                do( [] ) if xs == [] else False
                or
                do( qs( le ) + [ xs[0] ] + qs( gt ) )
        )
    )()
)
条件が少ないので無駄に字が増えただけかも...
動作が先で条件が後だし...変...

でも、何となくswitchブロックに見えません?

switch()の中に、

do(式1,式2,...)if 条件式 else False
のかたまりをorでいくつもつなげていくことができます。
 最後にすべてのifが偽になった時の処理をdo(式1,式2,...)で書きます。
do(式1,式2,...)の中味は順番に評価されます。
その結果がタプルとしてswitch()に渡され、タプルの最後の値が返ります。

switchとdoには特に意味はありません。ヒト的には何となくそれっぽいかなと思って変えてみました。
名前から想像する機能はありません。
機能的にはunbox(取り出す)とbox(箱に入れる)です。
真の場合の値をタプルで包んだ(box)三項演算をorでつないで、最後にタプルから取り出す(unbox)
っていえば分かりやすいでしょうか?
タプルで包むことで値がorの制御に影響しなくなります。

見た目はじゅうぶん闇だけど、意外と基本的な機能でできちゃった...(無理しなかったからだけどね)...

使ってみてまた変えるかも。

コメント

このブログの人気の投稿

カフボックス作った。andなぜノイズが出る?

シーンでフェードアウト on LIVE

AudioToolsを使ってみた