soundflowで作ろう16 "Deck運用"

こんにちは👐

今まではこの「soundflowで作ろう」で私のパッケージの中身の説明とかが多くなってましたが、
パッケージに関してはリリースノートの形式をとってしっかり分類、管理をしていくことにしましたので、
この「soundflowで作ろう」では、より「自作🛠」することにフォーカスしていきたいなと思っています‼️


さて、Deck。

soundflowにおけるDeckとは

画像1

画像2

こういったもののことですね。

上が私のPro Tools用Deck

下が私のFinder用Deck

こうしてアプリケーションによって複数のDeckを作成するのが良いと思います。


画像3

作成はここから。



そしてトリガーは

画像4

こんな風にするといいでしょう。

最前面アプリが切り替わるとDeckも連動して切り替わってくれる。

私はそうしてます。



別の運用

私のやりたいことには向いていないためやってませんが、
例えばこんなふうに

画像5

画像6

ショートカットアサインで切り替える、というのもアリなのかな……

最前面アプリケーションにないものを操作したいことが多いならこういうのもありですね。(あるかな……?)

ちなみに

画像7

こんな風に二つの条件をアサインすることも可能です。

こうすることで、基本的には自動で切り替わるけど、緊急としてはキーボードショートカットでも切り替わる。ということになります。
(私は必要ないからやってませんけど)




もっとDeckを便利にしたい


実際にsoundflowを使い込んでいますと、
「stream deckのボタン足りねぇ〰😩」
ってなりました。

とはいえ 8×4 のこれ以上ボタンが増えても瞬発力が下がるのは自明🤔

Deckにはフォルダ機能があって、

画像8

ここで入れ子構造にしていくことで、一つのDeck内にほぼ無限にスクリプトを格納することができます。

ですが瞬発力を要するコマンドを入れるにはあまり向かないですよね。

私もフォルダは活用していますが、

画像9

このカラーパレットボタン🎨の先に

画像10

こうするみたいに、

「よいしょ」みたいなことにフォルダ機能は向いていると思います。

「色つけるか〰」ポチポチ

みたいな。

「うおおおお🏃🏃🏃🏃🏃」ってミックスしてる時にパッパッと使うようなスクリプトはやはり1階層目に置きたい、でもちょっとボタン数が足りなくなってきた……

もっとアクセスが素早く……使いやすく……🤔🤔🤔



と考えた結果、

キーボードとの組み合わせでDeckが変わるようにすればいい💡

という結論に。



Hot Deckという運用

基本のDeckは一枚あるとして、もう一つ、サブとして一枚Deckを作る。
そこには

「押す頻度は少ないけど、すぐ押したいスクリプト」

を入れる。

ていう感覚で作ってみました。

これが私のHot Deck

画像11

各部詳細はまたの機会にするとして、

このDeckにひょいっと切り替えたい。

あくまでメインはこっち

画像1


当初は

画像31

画像32


こうしてました。

これでF18, F19を押すことで簡単に切り替わる。

Basic Deckは "When Activate Pro Tools" のトリガーも入ってるので、
アプリ切り替えとかするとBasic Deckのほうが表示されます。

つまり何かっちゃあBasic Deckの方が表示されますので、いい感じ😊



……と、これで運用してたんですけど、
スタジオによってはF18, F19にMacのシステム環境設定でショートカットアサインしてること多いですよね。

私のホームスタジオもそうで、F18にカラーパレットがアサインされておりまして、
アシスタントさんが押す機会多かったんですね。

いちいち毎回「F18効かないから気をつけてね〰」って伝えるのめんど😩、と思ってましたので、

やっぱり本当は1キーでトグルできたほうがいいよなぁ……🤔

と思ってました。


そしてちょっと時間ができたので1キーでトグルするスクリプトの作成にチャレンジ⛰




Hot Deck キートグル編


さてこっから具体的な「soundflowで作ろう」の内容に入っていきます🤩

自分で作る気のない人にはついてこれない世界かも。

でも楽しいですよ!自分で作れると!🙆‍♂️🙆‍♂️🙆‍♂️



「一つのキーで(この場合F19)デッキをトグル切り替えるスクリプト」

が欲しいと思った場合。

「Basic Deckが表示されていたらHot Deckを表示、Hot Deckが表示されていたらBasic Deckを表示」

するスクリプトのキートリガーをF19にすればよい。

ということになります。


これを行うためには、まず

「現在表示されているデッキが何か」

を毎回知る必要がありますね。



今まで自分でスクリプトを作成してきた経験で

「デッキごとに固有のIDが振り分けられている」

のはなんとなく知っています。

このへんチャレンジされた方はわかると思います。


さて、では現在表示されてるDeck IDを取得する方法はなんだろな……

というわけで、叡智の結晶soundflow forumで検索検索!!

画像13

"current deck id" とかで出るっしょ!

ヒット

「これしたいな〰」って時の大抵の疑問はすでにforumにあるので検索頑張りましょう。


さてこちらを見ると

log(sf.devices.streamDeck.firstDevice.currentDeckInstance.fullInstanceId);

これで現在のDeckのIDが出るらしい。

動かすと

画像14

確かに出た。

logっていうコマンドは () の中の情報をこうやって右上に表示させるコマンドです。

ですので () 内部の

sf.devices.streamDeck.firstDevice.currentDeckInstance.fullInstanceId

このコマンドが「現在のDeck IDを取得」するスクリプトです。



それじゃあ自分のスクリプトを作っていきましょう!

まずこうします。

const currentdeck = sf.devices.streamDeck.firstDevice.currentDeckInstance.fullInstanceId;;

constというのは何か?
よくわかりません!笑🤪
みんなこうしてるからこれでいける。
Java Script全然わかってないんで!
それでも作れるんですねトライ&エラーで。
大体わかっていることは、この先のスクリプトで

currentdeck

という文字列を入れるだけで
= 以降のコマンドによって取得される情報が呼び出される。
ということです。

まぁなんか省略するみたいなことですかね。ハハハハハハハハ🤣🤣🤣🤣

試しに


const currentdeck = sf.devices.streamDeck.firstDevice.currentDeckInstance.fullInstanceId;;

log(currentdeck)

こうすると

log(sf.devices.streamDeck.firstDevice.currentDeckInstance.fullInstanceId);

これと同じ結果がlog表示されます。
そういうことです笑🤣🤣😂


さて試しにこのlog付きのスクリプトをBasic Deckが表示されている時とHot Deckが表示されている時とで動かして、両者の変化を見ましょう。

名称未設定 2

名称未設定 3

うんうん、確かにちゃんとDeckによって変わってるね、

と試していたところで、

どうやらこのスクリプトで取得できる情報には不必要な部分が多く含まれていることがわかります。

同じデッキを表示しているのに「現在のDeck IDを取得するスクリプト」を動かすと、毎回

名称未設定 4

一枚前の画像と比較すると、

こうして一部違う結果が出てしまいます。


どうやらこの文字列の

名称未設定 5

この部分がデッキの固有のIDのようです。

毎回変動してしまう後半の部分はなんだかわからないし毎回変わられると困るのでいらないなぁ🤔

私が今取得したいのはここだけなんだよなぁ🤔

そういう時にはこの取得した文字列を取得後、変更の必要があります。



文字列の変更

さて、Java Script上で文字列を変更するのはなかなか簡単にはいきません。

検索検索

はい、これ、超重要なのでブックマーク必須。

これが参考スクリプト

const selectedClip = getSelectedClipNamesFromClipList()[0].split("_").slice(0,-2).join("_");
split('_') will split the string into an array of strings, separated by each '_' character.
slice(0, -2) will take all elements of the array and make a new array, except the last two items (-2)
join('_') will take the array elements and join them together as one single string, joining with the '_' character.

このスクリプトは
getSelectedClipNamesFromClipList
が意味する文字列を
.split("_") _で切り分けて
.slice(0,-2) おしりの二かたまりを消して
.join("_") _で結合
した結果を
selectedClip
という名前で呼ぶよ!

ということ!

めっちゃわかりやすい!

つまり
Kick_On_ATM_02-1

Kick_On
になります。

なるへそ〜


さて、この手法を使ってcurrentdeckのいらない文字列を削るコマンドを追加しましょう。


const currentdeck = sf.devices.streamDeck.firstDevice.currentDeckInstance.fullInstanceId;;

const currentdeckId = currentdeck.split(":").slice(0,-1).join(":");

こういうことになります。

: で分けて、おしりの一つはいらないので消して、: を入れて復元

結果の文字列をcurrentdeckId

と呼ぶことにしてます。

さて、正しくできているか確認するために

logコマンドを使って確認


const currentdeck = sf.devices.streamDeck.firstDevice.currentDeckInstance.fullInstanceId;;

const currentdeckId = currentdeck.split(":").slice(0,-1).join(":");

log(currentdeckId)

画像19

お、ちゃんといらない部分が削れていて問題なし!👍👍👍


さーてこれで現在のdeckのIDが取得できるようになりました。



ifを使った条件分岐


さて、現在のdeck IDはゲトれたので、

Basic deckのIDと

Hot deckのIDも入力しときましょう。

これは簡単。

画像20

さて、この各deckのIDは

画像21

このCopy Command IDで取得できます。

const basicdeck = "ここにDeck IDをいれる"

です。

ダブルコーテーションで囲むことを忘れないように。

これで
現在のDeckのIDをcurrentdeckId
Basic DeckのIDをbasic deck
Hot DeckのIDをhotdeck
と省略して表記することがこの先可能になりました。


さて、先述した

「Basic Deckが表示されていたらHot Deckを表示、Hot Deckが表示されていたらBasic Deckを表示」

この条件分岐、とてもシンプルなので簡単に作れます。

Java Scriptにおけるif文というのを使います。

イメージ-1 2

ていう仕組み!簡単!!!

current Deck IDがHot Deck IDと同一な場合に起きて欲しいことは、
「Basic Deckを表示する」
ことなので、

画像23

このマクロを作って、

画像24

ここで、copy as Java scriptします。

そしてそれを

イメージ (1)-1

にコピー!

画像26

できた。

これで

Hot Deckが表示されていた場合にはBasic Deckを表示してくれるスクリプトが完成。

でもこれだと一方通行なので、Basic Deckが表示されている場合はHot Deckを表示できるようにもする必要がある。

その場合は

else

を使います。

イメージ (2)-1

というもの。

はー!おもしろ。

なのでここには

画像28

これをスクリプト化したものをペースト!


画像29

完成〰



動作確認

できあがったスクリプトをF19キーにアサインしましょう。

画像30

おー、便利便利。

完成です!





おしまい


いかがでしょうか?なんとなく作り方みたいのが見えてくるとわりと簡単なんです。

是非みなさん自作にチャレンジ!



記事を購入してもらえるようにしています。

買っても買わなくても読める内容は変わらないのですが、
購入いただけると作者のやる気が出ます🤗

購入いただけた方には一応コピペで簡単にできるコードを置いておきます。

別にここまで読めたなら絶対必要ないですけど


ここから先は

380字

¥ 300

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