2022年の投稿(時系列順)[394件](10ページ目)
2022年2月 この範囲を新しい順で読む この範囲をファイルに出力する
オレメモ
np.abs( np_array_dt - ( datetime.datetime.now() - datetime.timedelta(seconds=0.1) ) ).argmin()
#Python
np.abs( np_array_dt - ( datetime.datetime.now() - datetime.timedelta(seconds=0.1) ) ).argmin()
#Python
キーボード、モニタ、ネットワークなど、ハードウェアとのやり取りを先に進めていますが、ボチボチ本丸であるパッチ機能の具体的な作りもまとめ始めています。
パッチ機能はマッピングファイルに従って入力を出力に置き換える作業なのでアルゴリズムに難しいことはありませんが、十分な速度を得られるかが難しい課題です。
DMX512は1スロットあたり44usecです。100万分の44秒ってことですが、8ユニバース扱うなら100万分の5.5秒以内に1スロットを確実に処理しなければなりません。RaspberryPi4BのCPUクロックは1GHz以上であり、それが4スレッドありますから間に合うような気もするのですが、確認しながら工夫していく必要があると思われます。
なんの工夫もなくPythonを動かすとCPUは1スレッドしか使われません。RaspberryPiでは能力の1/4しか使えないってことです。CPUの能力を最大限使おうとするなら、実行ファイルを複数に分けてOSレベルでプロセスを分けるか、Python内でmultiprocessingを定義して複数のCPUスレッドがPythonの処理を請け負うように仕向けないといけません。
multiprocessingの使い方はThreadingと似ているので難しいことは無さそうですが、こういったちょっと深いところをちゃんと書かないとRaspberryPiでパッチマシンは厳しい感じです。
#Python #[Art-Net]
パッチ機能はマッピングファイルに従って入力を出力に置き換える作業なのでアルゴリズムに難しいことはありませんが、十分な速度を得られるかが難しい課題です。
DMX512は1スロットあたり44usecです。100万分の44秒ってことですが、8ユニバース扱うなら100万分の5.5秒以内に1スロットを確実に処理しなければなりません。RaspberryPi4BのCPUクロックは1GHz以上であり、それが4スレッドありますから間に合うような気もするのですが、確認しながら工夫していく必要があると思われます。
なんの工夫もなくPythonを動かすとCPUは1スレッドしか使われません。RaspberryPiでは能力の1/4しか使えないってことです。CPUの能力を最大限使おうとするなら、実行ファイルを複数に分けてOSレベルでプロセスを分けるか、Python内でmultiprocessingを定義して複数のCPUスレッドがPythonの処理を請け負うように仕向けないといけません。
multiprocessingの使い方はThreadingと似ているので難しいことは無さそうですが、こういったちょっと深いところをちゃんと書かないとRaspberryPiでパッチマシンは厳しい感じです。
#Python #[Art-Net]
先日書いた謎のオレメモ
np.abs( np_array_dt - ( datetime.datetime.now() - datetime.timedelta(seconds=0.1) ) ).argmin()
これはDelay機能で重要な処理です。
日時の配列(np_array_dt)の中から、現在日時から一定の時間を差し引いた日時に最も近い日時を項に持つIndexを得ます。
Delayを構成するにあたり、受信値に日時を付けて数世代のデータを保存し、少し前の入力値を使います。出力を遅らすのではなく入力を遅らすのです。
パッチはパッチマップに従って入力スロットの値を出力スロットにコピーしますが、コピー元の入力スロットを探すアドレスに受信世代のインデックスも持たせれば1フェーズでパッチとDelayの処理が完了します。コピー元のアドレスの表現を「何秒前の何番LINEの何番スロット」とするワケです。Titan系からのパクリですが、LINEとはDMXの内部系統のことです。8ユニバースを扱う構想ですから8LINEあります。内部系統に入出力先をパッチするのは言うまでもありません。
意味合いとして正しいのはパッチが済んだデータの出力を指定時間遅らすことだと思いますが、入力を遅らせてもその様に振る舞うならいいかなと。
そもそも反応が鈍い劇場の調光装置と反応が鋭い機器をワンボードで操作しても明かりの変化を一斉にさせたいという要望からのDelayです。カットインをカットインにしたいだけで、照明効果を作るエフェクトではありません。
ですから、厳密に設定時間分遅らせることが目的ではなく、全体が同じタイミングで動いているように「見えれば」いいので、入力の世代を管理する方法で十分だと思うのです。
「少し前の日時のインデックス」を見つけるのが謎式の正体です。
ちなみに、時刻を使わず日時を使う理由は、深夜24時、日付が変わる瞬間に必ずエラーが起こるからです。0時0分0秒付近でほんの一瞬ですが、設定可能な最大Delay時間前のデータが出ます。Delay最大値が1秒なら1秒前のデータが出てしまうのです。一瞬のこととはいえ、こんな潜在エラーがあったらカウントダウンの現場では使えません。
#Python #[Art-Net]
np.abs( np_array_dt - ( datetime.datetime.now() - datetime.timedelta(seconds=0.1) ) ).argmin()
これはDelay機能で重要な処理です。
日時の配列(np_array_dt)の中から、現在日時から一定の時間を差し引いた日時に最も近い日時を項に持つIndexを得ます。
Delayを構成するにあたり、受信値に日時を付けて数世代のデータを保存し、少し前の入力値を使います。出力を遅らすのではなく入力を遅らすのです。
パッチはパッチマップに従って入力スロットの値を出力スロットにコピーしますが、コピー元の入力スロットを探すアドレスに受信世代のインデックスも持たせれば1フェーズでパッチとDelayの処理が完了します。コピー元のアドレスの表現を「何秒前の何番LINEの何番スロット」とするワケです。Titan系からのパクリですが、LINEとはDMXの内部系統のことです。8ユニバースを扱う構想ですから8LINEあります。内部系統に入出力先をパッチするのは言うまでもありません。
意味合いとして正しいのはパッチが済んだデータの出力を指定時間遅らすことだと思いますが、入力を遅らせてもその様に振る舞うならいいかなと。
そもそも反応が鈍い劇場の調光装置と反応が鋭い機器をワンボードで操作しても明かりの変化を一斉にさせたいという要望からのDelayです。カットインをカットインにしたいだけで、照明効果を作るエフェクトではありません。
ですから、厳密に設定時間分遅らせることが目的ではなく、全体が同じタイミングで動いているように「見えれば」いいので、入力の世代を管理する方法で十分だと思うのです。
「少し前の日時のインデックス」を見つけるのが謎式の正体です。
ちなみに、時刻を使わず日時を使う理由は、深夜24時、日付が変わる瞬間に必ずエラーが起こるからです。0時0分0秒付近でほんの一瞬ですが、設定可能な最大Delay時間前のデータが出ます。Delay最大値が1秒なら1秒前のデータが出てしまうのです。一瞬のこととはいえ、こんな潜在エラーがあったらカウントダウンの現場では使えません。
#Python #[Art-Net]
2022年3月 この範囲を新しい順で読む この範囲をファイルに出力する
Art-Netパッチにはミキサー機能も入れたいような。
将来的にレガシーDMX512も取り付けるならあると便利ですし、Art-Netはローレベルでミキサーを構成しやすいのがわかったからです。
見える機能にしないまでも、内部的には可能な様に作っておけばいいのかなと。
機能の大枠はミキサー、パッチ、ディレイ、カーブプロファイル、リミッタまたはコンプレッション、ライン(固定値・いわゆる直)で検討を進めています。
設定項目を多くし過ぎると凡ミスの原因になりますので現実的な線で考えたいですが・・・
用語ですが、DMXの内部系統をラインと呼ぶと混乱するのでルート(route)と呼ぶことにします。
#[Art-Net]
将来的にレガシーDMX512も取り付けるならあると便利ですし、Art-Netはローレベルでミキサーを構成しやすいのがわかったからです。
見える機能にしないまでも、内部的には可能な様に作っておけばいいのかなと。
機能の大枠はミキサー、パッチ、ディレイ、カーブプロファイル、リミッタまたはコンプレッション、ライン(固定値・いわゆる直)で検討を進めています。
設定項目を多くし過ぎると凡ミスの原因になりますので現実的な線で考えたいですが・・・
用語ですが、DMXの内部系統をラインと呼ぶと混乱するのでルート(route)と呼ぶことにします。
#[Art-Net]
客席テーブルは天板に塗布したポリエステル樹脂の強度・耐久試験をしています。
音響のアンプが入ったゴム足付きのラックケースを載せているだけですが、以前の塗装では調光卓を2-3日載せたらゴム足の形に凹んでしまったので重要な試験です。
今のところ、半日経過しても凹む様子はありません。明日は重量を増やしてみましょう。3-4日そのままにして大丈夫ならOKとします。
全体の結論が出るまで加工や塗装が出来なかった部分の仕上げは残っていますが、軽量化を図りつつあと2-3台作りたいです。
#ガチ工作
音響のアンプが入ったゴム足付きのラックケースを載せているだけですが、以前の塗装では調光卓を2-3日載せたらゴム足の形に凹んでしまったので重要な試験です。
今のところ、半日経過しても凹む様子はありません。明日は重量を増やしてみましょう。3-4日そのままにして大丈夫ならOKとします。
全体の結論が出るまで加工や塗装が出来なかった部分の仕上げは残っていますが、軽量化を図りつつあと2-3台作りたいです。
#ガチ工作
ユニバース単位の試験的な物ですがDelayが出来ました。精度はともかく遅れます。
ただ、卓の更新頻度による問題発生。
MAdot2は値が変化しているときの更新頻度が1/30秒くらいですが、値の変化が無いときの更新頻度は1/10秒くらいです。卓としては間違っていない動作ですが、この違いのためにカットチェンジとフェードチェンジではDelayタイムが見た目で違ってしまいます。1/30なら0.033秒、1/10なら0.1秒の潜在的な遅れが処理のキータイムになってしまうからです。
こうなると入力を遅らせるのではなく出力を遅らせないといけないのかな?スロット単位にDelayをかけたいけど出力側のユニバース単位が現実的かなぁ~。
・・・考えを進めてみました。
今は受信のタイミングでデータをスタックしていますが、一定時間でスタックをしたらどうか。
DMX512は最大1/44秒毎くらいですが、1/100秒毎くらいで最後に受信したデータをスタックしていくのです。タイミングとピッチが違う情報をサンプリングの頻度を上げることで整えて滑らかにします。また、スタックの時間間隔が一定なら日時情報をスタックせずに済みますし、ソート並みに重い近似値抽出も不要です。
スタックが多くなっても処理全体が軽くなるならアリかも。
#Python #[Art-Net]
ただ、卓の更新頻度による問題発生。
MAdot2は値が変化しているときの更新頻度が1/30秒くらいですが、値の変化が無いときの更新頻度は1/10秒くらいです。卓としては間違っていない動作ですが、この違いのためにカットチェンジとフェードチェンジではDelayタイムが見た目で違ってしまいます。1/30なら0.033秒、1/10なら0.1秒の潜在的な遅れが処理のキータイムになってしまうからです。
こうなると入力を遅らせるのではなく出力を遅らせないといけないのかな?スロット単位にDelayをかけたいけど出力側のユニバース単位が現実的かなぁ~。
・・・考えを進めてみました。
今は受信のタイミングでデータをスタックしていますが、一定時間でスタックをしたらどうか。
DMX512は最大1/44秒毎くらいですが、1/100秒毎くらいで最後に受信したデータをスタックしていくのです。タイミングとピッチが違う情報をサンプリングの頻度を上げることで整えて滑らかにします。また、スタックの時間間隔が一定なら日時情報をスタックせずに済みますし、ソート並みに重い近似値抽出も不要です。
スタックが多くなっても処理全体が軽くなるならアリかも。
#Python #[Art-Net]
客席テーブルに塗布したポリエステル樹脂はよさげです。
YAMAHAのPC2002を1台と7.5kgの砂袋を2個乗せて丸1日様子をみましたが、ラックケースのゴム足の汚れが移るくらいで変化はありません。汚れは雑巾で拭けば落ちます。
爪で掻くと薄い線が付きますので鉄板やデコラ板より柔らかいのですが、ラッカーなどの1液式塗料に比べたら圧倒的に丈夫です。ポリエステル樹脂は造形に使う物で、塗料は装飾性を上げたり風化を抑える物ですから機械強度が違って当然ですけど。
あとは、ボールロックピンの紛失防止ワイヤーの固定と脚を収納する受けの塗装です。
脚は塗装をし直したい感じもあります。溶接によって寸法が狂ったところがあるのですが、補正をすると塗料が剥げるので、どうせなら防錆(「必殺錆封じ」という防錆剤の塗布)からやり直したいかも。
ちょいと忙しくなってきた本業を片付けつつ最終仕上げまでやってしまいたい。
#ガチ工作
YAMAHAのPC2002を1台と7.5kgの砂袋を2個乗せて丸1日様子をみましたが、ラックケースのゴム足の汚れが移るくらいで変化はありません。汚れは雑巾で拭けば落ちます。
爪で掻くと薄い線が付きますので鉄板やデコラ板より柔らかいのですが、ラッカーなどの1液式塗料に比べたら圧倒的に丈夫です。ポリエステル樹脂は造形に使う物で、塗料は装飾性を上げたり風化を抑える物ですから機械強度が違って当然ですけど。
あとは、ボールロックピンの紛失防止ワイヤーの固定と脚を収納する受けの塗装です。
脚は塗装をし直したい感じもあります。溶接によって寸法が狂ったところがあるのですが、補正をすると塗料が剥げるので、どうせなら防錆(「必殺錆封じ」という防錆剤の塗布)からやり直したいかも。
ちょいと忙しくなってきた本業を片付けつつ最終仕上げまでやってしまいたい。
#ガチ工作
Art-Netの入力の扱いについて考えを進めています。
受信の更新頻度に合わせた処理ではフリッカーが発生することが確定。送られてくる頻度が変化するために起こることですが、根本的に何か変えないと解決しません。
対策は、十分に早い頻度で入力をサンプリングし、内部処理を整えて値の変化を滑らかにすることです。
例えば、1/30秒の頻度から1/10秒の頻度を見たとき、更新が1/3回と見るのではなく、3回同じデータが送られているとみるべきなのです。
DMX512の規格を読み解くと更新頻度は1秒~1/44秒の範囲になりますが、更新頻度の違いによるフリッカーを防止するには1/44秒よりも短い頻度でサンプリングすることが肝のようです。
短ければ短いほど安定すると思われますが、実際に作って落としどころを見つけましょう。
#[Art-Net]
受信の更新頻度に合わせた処理ではフリッカーが発生することが確定。送られてくる頻度が変化するために起こることですが、根本的に何か変えないと解決しません。
対策は、十分に早い頻度で入力をサンプリングし、内部処理を整えて値の変化を滑らかにすることです。
例えば、1/30秒の頻度から1/10秒の頻度を見たとき、更新が1/3回と見るのではなく、3回同じデータが送られているとみるべきなのです。
DMX512の規格を読み解くと更新頻度は1秒~1/44秒の範囲になりますが、更新頻度の違いによるフリッカーを防止するには1/44秒よりも短い頻度でサンプリングすることが肝のようです。
短ければ短いほど安定すると思われますが、実際に作って落としどころを見つけましょう。
#[Art-Net]
客席テーブルのポリエステル樹脂は大丈夫でしょう。
先日「爪で掻くと薄い線が付く」と書きましたが、ポリエステル樹脂が削れるのではなく、爪が僅かに削れて痕が残るようです。
シリコンオフで拭くと取れますので、チョークで書いた様なものでしょうか。
#ガチ工作
先日「爪で掻くと薄い線が付く」と書きましたが、ポリエステル樹脂が削れるのではなく、爪が僅かに削れて痕が残るようです。
シリコンオフで拭くと取れますので、チョークで書いた様なものでしょうか。
#ガチ工作
Art-Netは受信したデータのスタックの仕方を変えてうまくいきました。
約1/100秒毎でスタックし、1/40秒毎で出力しています。
試験的な処理ですが、Delayもユニバース単位で綺麗に動きます。
Art-Netの送受信の試験製作はこれにて終了。
ただ、テストで使っていた中華電器のArt-Netデコーダが不良品でした。
8アウトの製品ですが、普通に使うとDMXポートが1つしか信号を出さない。
組み合わせを吟味すると半分の4ポートは出力されますが、マニュアル通りに使って正しく動かないのでは現場じゃ使えません。
届いた時にMAdot2でテストしてちゃんと動いたような気がするのですが・・・
Art-Netのデコーダは市販品もありますが、RaspberryPiでここまで出来てしまうと自作した方が圧倒的に安い。市販品の国内価格は7-8万円ですが、材料費だけなら2万もしません。
レガシーDMXのインターフェースは基板から自作になりますが、PICマイコンでSPIからDMXにプロトコル変換するだけなのでそれほど難しくないハズ。パッチマシンとしてまとめる際には必要ですから作ってしまいましょう。
#RaspberryPi #[Art-Net]
約1/100秒毎でスタックし、1/40秒毎で出力しています。
試験的な処理ですが、Delayもユニバース単位で綺麗に動きます。
Art-Netの送受信の試験製作はこれにて終了。
ただ、テストで使っていた中華電器のArt-Netデコーダが不良品でした。
8アウトの製品ですが、普通に使うとDMXポートが1つしか信号を出さない。
組み合わせを吟味すると半分の4ポートは出力されますが、マニュアル通りに使って正しく動かないのでは現場じゃ使えません。
届いた時にMAdot2でテストしてちゃんと動いたような気がするのですが・・・
Art-Netのデコーダは市販品もありますが、RaspberryPiでここまで出来てしまうと自作した方が圧倒的に安い。市販品の国内価格は7-8万円ですが、材料費だけなら2万もしません。
レガシーDMXのインターフェースは基板から自作になりますが、PICマイコンでSPIからDMXにプロトコル変換するだけなのでそれほど難しくないハズ。パッチマシンとしてまとめる際には必要ですから作ってしまいましょう。
#RaspberryPi #[Art-Net]