れーすのエグゼ流星Blog

エグゼとゲームと雑記

エグゼ解析したりゲーム作ったりいろいろ。

マイシンセサイザー、わからん。

Unityでシンセサイザーを! - Qiita

 

難儀していたプロジェクトでたまたま発見したこ

MidiJackよりも高性能だったから頓挫していたプロジェクトを切り開くものかと歓喜したけれども、中がとても複雑

 

            key.OnKeyDownEvent.AddListener*1;
            key.OnKeyUpEvent.AddListener*2;

 

クリック時の動作で成り立っているので、キー入力やトラックパッドへ置き換えをしたいけどなかなかうまくいかない。

 

と思ってたらだんだんわかってきた。

 

=>はラムダ式というものらしい

kan-kikuchi.hatenablog.com

 

関数OnKeyDownとかはindexを引数にとっている。indexとはキーボードそれぞれを指してる。

syntheStation.Instrument[PortNo].Channel[ChNo].NoteOff*3;

で音を鳴らす。

 

つまり、key.OnKeyDownEvent.AddListener*4{
            OnKeyDown(1);
        }
        if(Input.GetKeyUp(KeyCode.A)){
            OnKeyUp(1);
        }

...etc

 

もっと気持ちいいコードで描きたいけどとりあえず実現できたので。 

*1:) => OnKeyDown(index

*2:) => OnKeyUp(index

*3:byte)(BaseNote + index

*4:)

この部分を弄る

OnKeyDownEventってなんだよ、と調べたらまたもやこれもKeyPropertyで定義されている

 

private readonly UnityEvent onKeyDownEvent;
    private readonly UnityEvent onKeyUpEvent;
    public KeyProperty()
    {
        onKeyDownEvent = new UnityEvent();
        onKeyUpEvent = new UnityEvent();
    }
    public UnityEvent OnKeyDownEvent
    {
        get
        {
            return onKeyDownEvent;
        }
    }
    public UnityEvent OnKeyUpEvent
    {
        get
        {
            return onKeyUpEvent;
        }
    }

 

あと、UnityEventというものがつかわれてるけどこんな感じ

www.urablog.xyz

 

KeyProperty.csに詳しい設定がなされていた

 

OnPointerEnterはクリックした時のもの Unity標準

tsubakit1.hateblo.jp

そこから自前の関数でいろいろ実装しているみたい

 

 

やっとできました。

update関数でパワーコードで攻めた。

 

        if(Input.GetKeyDown(KeyCode.A