Compare commits

...

3 Commits

Author SHA1 Message Date
ce0c6b1ddf [obsidian] vault backup: 2024-08-12 16:28:50
All checks were successful
Build / build (push) Successful in 2m52s
2024-08-12 16:28:50 +09:00
39828a543e [obsidian] vault backup: 2024-08-12 15:21:26[ 2024-08-12 15:21:26 +09:00
7261933738 [obsidian] vault backup: 2024-08-12 11:19:23[ 2024-08-12 11:19:23 +09:00
3 changed files with 71 additions and 0 deletions

View File

@ -100,5 +100,7 @@ Maxでは、udpsendオブジェクトで指定したIPの5000番ポート
- そもそも通常のBright ignでのUDPでのシンクはフレーム単位で同期してるわけではないのは公式でも書いてある。フレームレベルでの同期が必要ならBrightWall使うのが無難
- 自動ループする時、BrightSignのほうが若干ラグがあってからループする。そのため、実際には`jit.movie~`が自動ループしたタイミングでudp信号を送るのが良い。
- というか、`jit.movie`は再生速度が全く均一にならないんであんまり使わないほうがいい。BrightSignの映像側にタイムコード音声を書き込んでおいてMaxでそれを受けて特殊配置のスピーカーで音再生、とかが一番ありえるユースケースかも。
- [[MaxとSMPTE ToolでLTCをデコードした上で展示を自動起動させたい]]
- 内部がどういう仕組みかわからないが、UDPのメッセージのキューは割と簡単に詰まる。シークバーをぐりぐり動かすみたいな使い方はできない。
- 一時停止ができると便利なんだと思うが、いまいちやり方がわからなかった
- **追記動画のファイルのビットレートによってコマンドを送ってからシーク完了までの時間が変わるっぽい。2GBの動画とかだとコマンド送ってから5秒ぐらいかかったりすることもある。** やっぱり本番用の同期システムの選択肢というよりは、ざっくりでもいいから確認できるシステム構築のためと割り切るほうが良さそう

View File

@ -0,0 +1,69 @@
---
date: 2024-08-12 15:05
---
#max #tips
Maxには昔から`smpte~`というリニアタイムコードを出力するためのオブジェクトが存在する。
しかし、出力はできても音声ファイルとして書き込まれたLTCをデコードしてbangを送るとかはできそうでできない。
もっともシンプルなやり方として、[GSi - SMPTE Tool](https://www.genuinesoundware.com/?a=page&p=SMPTE_Tool)を使ってLTCから一度MTC(MIDI Time Code)に変換し、仮想デバイス`to Max`を経由して受信する。
MTCのデコードは[Peter Elsea氏の資料](http://peterelsea.com/Maxtuts_advanced/Max&MTC.pdf)を参考に。
![[img/スクリーンショット 2024-08-12 15.21.57.png]]
MTCのより詳しい話は[Holy Caterさんのブログ](https://ameblo.jp/holycater/entry-12657971601.html)を参考に。
## SMPTE Toolのデバイス情報保存問題
問題はSMPTE ToolとMaxを使って展示を自動で運用したい場合である。
SMPTE Toolは多分JUCEを使って作られているので、使用するオーディオデバイスや仮想含むMIDIデバイスは前回アプリ終了時の情報が自動で復元される。
SMPTE Toolsを起動中にインターフェースを抜いたり、仮想MIDIデバイスを持つソフトを落としたりすると、その情報は即時更新される。
つまり、展示などで自動起動・終了を考えた時に、SMPTE ToolがMaxより先に立ち上がると、Max以外のデバイスが自動で選択された状態になってしまう。終了時も、Maxが先にシャットダウンされるとMIDIデバイスの認識が外れた状態でSMPTE Toolも終了するので、次回起動した時にデバイスが正しく読み込まれない。
残念ながらSMPTE Toolには、設定ファイルやコマンドラインオプションなどで固定のデバイス名を指定して起動する方法が公式には存在していない。
だが、アプリケーションの状態を保存したファイルは、Macでは実は以下の場所に記録されている。
```
~/Library/SMPTE Tool/SMPTE Tool.setting
```
これを使用(悪用)すれば正しく運用されている状態を強制的に復元できる。
1. まず、展示での正しいオーディオインターフェースとMIDIデバイス等の設定を普通にアプリを起動して設定。
2. SMPTE Toolを一度終了する設定ファイルはここで更新される
3. `~/Library/SMPTE Tool/SMPTE Tool.setting`をプロジェクトフォルダやデスクトップなど適当な場所にコピーする
4. 展示の際はスタートアップ起動アプリに、立ち上げたいMaxプロジェクトと次のシェルスクリプトの2つを登録する。(ここではデスクトップにコピーしたとする)。Macの場合は拡張子を`.command`に設定して、設定→一般→ログイン項目にそのファイルを登録すればよい
```sh
#!/bin/bash
cp -f ~/Desktop/SMPTE\ Tool.settings ~/Library/SMPTE\ Tool
sleep 30;
open /Applications/SMPTE_Tool.app;
exit;
```
起動前に30秒スリープしているのは、Maxより先にSMPTE Toolが立ち上がるのを避けるため。逆に、Max内のアプリもSMPTE Toolが立ち上がるまでタイムコードでの同期は取れないので、諸々の起動処理はloadbangを35秒遅延させるなどの対策を取っておくのが安全。
シャットダウンは普通にpmsetでシャットダウン時刻を設定する。また終了時刻の数分前にMax上で`;max clean ;max quit`メッセージを使ってMaxを自殺させないとシステムがシャットダウンしないことがあるのでそれも組み込んでおく。
---
PythonでLTCからMTCにデコードするシングルファイルアプリがあるので、これを使うともっと楽になるのかも視覚的にタイムコード確認できるのは楽でいいけどね
[GitHub - Gouttfi/smpte-ltc-to-mtc: This repository contains a Python application for converting SMPTE-LTC timecode to MIDI Time Code (MTC).](https://github.com/Gouttfi/smpte-ltc-to-mtc)
```
brew install python-tk portaudio rtmidi
git clone https://github.com/Gouttfi/smpte-ltc-to-mtc.git
python3 -m venv venv
source venv/bin/activate
# 仮想環境に入る
pip install python-rtmidi mido PyAudio
python main.py
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB