2023年8月30日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 今「人工石油」が注目されています。
 簡単に安く短時間で灯油や軽油とほぼ同質の油を作る技術です。

 この映像の3'40"くらいから細かい説明がありますが、これは面白い製造方法です。
 結合が強い二酸化炭素を分解するって発想がまず凄い。

#雑談
Icon of admin
 実行ファイル化した LTC Player 0.2.0β の処理負荷は5~7%です。十分に軽いと言えます。
 しばらくは本業を頑張らないといけませんが、その本業で使って細かいバグを見つけていきましょう。

#タイムコード #Python
Icon of admin
 Python でファイル保存するには次の方法がお手軽みたい。
「pythonでlistをファイルに保存し、読み込む方法(numpyも同様!)」
 上記内の「pickleを使用する方法(おすすめ!)」です。
 ここでは list を保存する方法として書かれていますが tuple でもOK。もちろん、list や dict を含む異なる型をテキトウに突っ込んだ tuple でもOK。Python で一つの変数として扱える状態にしてから pickle.dump でファイルに入れれば何でもいいみたい。読出しは load すれば pickle.dump する直前の状態で変数に格納されます。変数のまんま保存し変数のまんま読み出せるイメージです。
 やりたいことは list 型のセットリストと諸々のステータスの保存/読出しです。これらを tuple にまとめれば一括で扱えるみたいです。
 ファイル保存は手続きが面倒ってイメージがありましたが、これは楽チンです。

 追加オレメモ。
「Pythonでファイル、ディレクトリ(フォルダ)の存在確認」
「Pythonでディレクトリ(フォルダ)を作成するmkdir, makedirs」
「Python ファイルのコピーと移動」
 こういった基本的なことが凄く簡単なのは Python のすばらしさ。
 この様な操作を整理しているのは、データを他のパソコンに持って行く前提で、音源ファイルをセットリストファイルと同じフォルダに置きたいからです。

 pyinstaller を使って実行ファイル化(.exe化)してみました。この状態にすると Python をインストールしていないパソコンでも動きます。操作は簡単ですし中身を隠せていいかも。
 モノは試しにアップしてみました。Windows11の64bitでしか試していませんが、64bitならWindows10でも動くと思われます。
 LtcPlayer
 セットリストの保存機能が未実装のβ版です。モノ好き大好き自己責任でお楽しみください。
 LTC の出力には専用インターフェースが必要です。これが無ければ単なる音楽プレーヤーです。
 専用インターフェースのことを LTC Generator と呼んでいますが販売するかは検討中です。ノンクレーム返品可で少数販売でしょうか?手作りなので数を作れませんしサポートしきれませんし。

#タイムコード #Python
Icon of admin
 LTC Player は「オイラ、最初からこうだよ」と言わんばかりの顔で動いています。嬉しいようなちょっとムカつくような。

#タイムコード #Python

2023年8月29日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 DMX Delay を発見!(知人に教えてもらいました)
 DMXdelayer (alpha version)

 同じことに取り組んでいる方がいらっしゃることが何より嬉しいです。

#[Art-Net]
Icon of admin
 LTC Player はセットリストの保存以外は完成した様子です。0.2.0βとしました。
 バグや設計ミスはあると思うのですが、これ以上は使ってみないと分からないような気がします。
 LTCについて、MAdot2の場合ですが、無信号から受信開始まで0.3-0.5秒かることへの対策として停止タイムの数フレーム前を数フレームリピートしていますが、他の卓の挙動の検証も必要です。

#タイムコード #Python

2023年8月27日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 今回の LTC Player と LTC Generator のパソコン側のシステムは全て Python で書いています。
 その過程でオブジェクト指向を世に出した先達の気持ちを垣間見ることができたワケですが、そうなるとC言語でやってきたこともC++にしてみたくなる。時間と脳味噌に空きが無くて1年近く止まっている Art-Net の パッチマシン も完成させたい気持ちがあるのですが、C++で書いたらスマートに書けそうな気がしてきています。
 C++と言っても ANSI の C言語にオブジェクト指向を追加して書きやすくしたモノとしか思えませんし、実際、ANSI の C言語の記述やライブラリが混在しても大半が動きます。記述の違いは少なくありませんが、標準語に対する津軽弁や鹿児島弁の違いより容易いと思われます。
 ただ、Art-Netパッチはデータベースや財務系の処理をするとの近い気がしますので、SQL や COBOL を勉強しておくと参考になりそうな気もします。これらは群のデータを扱うことに特化していますからね。C言語で SQL を扱うのは敷居が高そうですし、この時代 COBOL の情報を探すのは無理がありそうですから、Python で SQL を扱う勉強を少ししようと思います。

#C言語
Icon of admin
 とある中堅企業さんの労働組合さんの納涼祭でした。お盆もとうに過ぎているのに納涼祭?とか思ったりしますが、中堅の工場はお盆前後が忙しいので時期をずらすのはアリアリでしょう。勤務日数が少ない8月を乗り切ったぞー!ってヤツも含まれていそうです。
 そんな現場でしたが、MAdot2 を使ったので LTC Player のランニングテストも同時に実施。本番でこんなことをするのは不謹慎ちゃ不謹慎ですが、LTC が途切れることなく受信されるかを確認するには丁度よい。普段なら卓をずっと眺めていることは難しいですが、目の前の卓を操作するのが仕事なら無理はありません。LTC で卓を動かすのでははく長時間の認識のテストですから時計を表示するのと同じ。LTC のデータが間違っていたり途切れたりして卓が止まることはまずありません。なんでかんで MA の製品ですから。
 8時間ほど実施しましたが問題は発生セズ。バグではなく設計(デザイン)のミスを見つけたので今後対策しますが、音源に沿った LTC で止まることなく卓がカウントを刻むのは気持ちがイイ。
 プレイリストの保存機能も構成しなければなりませんし、修正もまだまだありますが、間違いなく β版 に昇格しています。この達成感と安堵感は暑さという調味料以上にビールを美味しくしてくれています。オタク冥利とはこのことでしょうか。

#タイムコード #Python

2023年8月25日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 LTC Player & LTC Generator を α版 から β版 に昇格しました。主要な機能が搭載されたって意味です。
 プレイリストの保存やバグ潰し、細かい調整はこれからですが、音の再生に沿った LTC が出力され、それを拾って卓が動きます。音のポジションを飛ばしてもそれに沿った LTC が出ます。フレーム値が飛んだ時の挙動は卓次第ですが、一時停止も先送りもしなければとても素直に動きます。何度再生しても同じ結果が出ます。そうでないと困るのですが、これぞ期待した機能であります。
 ただしmp3などの圧縮データではパソコンによって再生のクセが違い、音アタマとオシリの挙動が一定しません。メロディ続きでトラックが分かれている音源では問題になりそうです。圧縮データだからでしょうが、VLC のライブラリに頼り切っている私にはどうすることも出来ません。非圧縮のデータ形式の wav では正常なので音源のデータ形式を制限した方がいいですね。Windowsならwav、MacintoshならAIFFってことです。
 なんでかんで5,000行もあるソースコードになりました。本業を後回しに書いていたのは間を空けると細かいことを忘れてしまうからです。自分なりに読みやすく書きましたので正常に動くところまでやっておけば読み返して戻ることも出来ますが、障害を残したまま間を空けると次の作業で障害を思い出すのに時間がかかるのです。
 一応の区切りが付きましたので、一旦お休みというか本業にアタマを戻してプレイリストの保存方法などを検討していこうと思います。

#タイムコード #Python

2023年8月23日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 初期構成の段階ですが、LTC Player & LTC Generator の融合が出来ました。
 PLAYボタンを押すと曲と共に LTC がカウントされ、卓(MAdot2)が認識します。まだまだ課題と見えない問題は多いと思いますが、峠を越えた心持ちです。
 処理負荷はWindows7世代のミドルレンジパソコンで20%前後です。まぁまぁでしょう。

 ここ2日間はEoCとコレばっかりやっていたので本業がヤバイですけど、祝杯を上げてもいいかもしれません。
 この後は考えをまとめて構造を整理します。

#タイムコード #Python
Icon of admin
 EoCの試験の続きでArt-Netを通してみました。全く問題なく動きます。繋いだだけで動いたので試行錯誤は無し。
 接続は次の通りです。配線が汚いのはテストなのでご勘弁を。

20230823104137-admin.jpg

 [MAdot2]
  ↓ Cat5e
 [Ethernetハブ]
  ↓ Cat5e
 [PoEインジェクタ] ← <AC100v>
  ↓ Cat5e(PoEとして電源供給線も兼ねるので細いケーブルは非推奨)
 [EoCレシーバ]
  ↓ A2V1B(3C相当) 50m
 [EoCトランスミッタ]
  ↓ Cat5e
 [Ethernetハブ]
  ↓ Cat5e
 [Art-Net Node]
  ↓ XLR 5P
 [DoctorMA]
  ↓ USB2.0
 [パソコン]

 エフェクトエンジンのデータで半日くらい様子を見てみます。

 トランスミッタとレシーバは逆にしても動きます。
 DMXのモニターにはDoctorMXを使っていますが、信号の遅れなのかDoccorMXの遅れなのか、ほんのわずかに遅れを感じるかもしれません。

 しばらく先になりますが、現場で使えるパッケージも考えないといけません。これらを毎回組んでいたら面倒ですからね。
 箱の中にそれぞれの用品を固定し、パネルに取り口を付けようと思います。これにUPSやインカムのパワーサプライも同居させたら便利かなと。
 EoCのレシーバとトランスミッタはそこそこ熱を持つのでパッケージにおいては冷却を考慮した方がいいですね。こうったバラバラの物をパッケージする際はベース板を合板にした方が楽ですが、底板をアルミにした筐体放熱も検討の余地ありです。

#[Art-Net]
Icon of admin
 EoCは割り切った仕様で好みです。
 ただ、youtubeの視聴でテストをしていたのですが一度だけ通信が落ちていたことがあります。 原因はわかりませんが、十分に検証する必要はありそうです。
 原因はEoC、LAN、インターネット、パソコン、youtubeなどの構成するすべてとその組み合わせにまで可能性あるだけに絞り込むのは困難でしょう。何かに問題があっても実用レベルで動けばいいのですけどね。そもそも、即応性は二の次として開発されたEthernetでライブ制御をするのですから潜在的な問題だと思いますが・・・。
 現時点ではパソコンをインターネットに接続する試験でしたので、卓からのArt-Netでノードを動かす試験をします。パソコンがインターネットに繋がるなら動くと思いますケド。

 現時点のコストですが、設備用の5C-FBが19,800円/100m、カナレさんのA2V1Bが59,800円/100m、カナレさんのDMX203が19,800円/100mです。
 100mbpsでArt-Netを通せるなら実用域は8ユニバース以上です。何を基準に評価するかですが、仮に4ユニバースとして、DMX203を4本に対しArt-Net&EoCシステム、同軸ケーブルのコストを比較すると若干EoCに分があります。
 コストに大差がなく配線長に優位性があるならEoCを研究する価値があるように思います。

#[Art-Net]

2023年8月22日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 EoC のアダプタが入荷しました。翌日お届け恐ろしい。
 まずはパソコンで試していますがネットワークが普通に繋がります。
 購入品は次の2品。
● EoC トランスミッタ&レシーバ
「LINOVISION 同軸LANコンバーター POE対応 電源不要型 1000mまで配線可能 100Mbps最大通信速度 既存の同軸ケーブルでIPカメラ ルーターなどのネットワーク機器を配線可能」
● PoE インジェクター(普通の Ethernet を PoE にする電源アダプタみたいな物)
「REVOTECH ギガビット PoE インジェクター アダプター、IEEE 802.3af/at パッシブ PoE+ 、PoE 48V 0.5A 出力電力、10/100/1000Mbps ギガビット速度、IP カメラ/AP/PTZ/テレビ電話用、プラグ アンド プレイ (D05A-G)」
 主ケーブルはカナレさんの A2V1B の 50mです。3C相当の同軸回線×1、平衡音声回線×2の複合ケーブルです。

 接続は次の通り。

 [パソコン]
  ↓ Cat5e
 [PoEインジェクタ] ← <AC100v>
  ↓ Cat5e
 [EoCレシーバ]
  ↓ A2V1B(3C相当)
 [EoCトランスミッタ]
  ↓ Cat5e
 [Ethernetハブ]
  ↓ Cat5e
 [LAN]

 といった具合です。
 EoCトランスミッタには同軸ケーブルから電源共有されますのでPoEインジェクタは不要です。
 EoCのレシーバとトランスミッタの違いは電源を供給するデバイスがレシーバってだけみたいです、データに方向性は無く、途中に同軸ケーブルが挟まったLANケーブルと見なして良さそうです。
 BNRで計測するとキッチリ100Mbps出ています。今時からすれば速くはありませんがArt-Netには十分な速度ですし、いわゆるLANケーブルの制限長は100mなので、最大ケーブル長1000mには魅力があります。

#[Art-Net]
Icon of admin
 LTC Player から LTC Generator を制御するモジュールを本格的に書き始めました。
 ハードウェアを作った3ヶ月前の自分が何を考えていたか整理しつつ、bytes と bytearray を用いてシリアル通信の再構築です。
 USB-Serial 変換の FT232RL には LTC Generator であるとマークを埋め込みたいのですが、FT Prog では書き換わっていても、Python で読むとシリアルナンバーくらいしか書き換えが反映しません。排他処理が出来ればいいのでコレでもいいのですが腑に落ちません。

#タイムコード #Python

2023年8月21日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 MoCAに関する情報は youtube にもあります。
 視聴して思ったのですが、海外では家屋の各部屋にテレビを設置することが普通らしく電源コンセント並みに配線されているアンテナ回線を使えたら便利しょ、っといった発想みたいですね。MoCAは既存のアンテナと共存できるそうですから、スマートテレビを使いやすくするという発想も含まれているようです。テレビアンテナの回線にアンテナとインターネットが共存出来るからです。ただし、日本国内では衛星放送の送信周波数とMoCAの変調周波数が被るので注意が必要らしいです。クローズドな使用をすれば問題にならないと思いますケドね。

 今のところは手持ちの複合ケーブルを活かす目的で取り組んでいますが、普通に使えるならDMXの配信の標準にしてもいいのかもしれません。
 屋外のライトアップで効果を発揮しそうな予感もするので、パケージは屋外仕様で考えたいですね。

 ただ、調べを進めるとMoCAの最大ケーブル長は100ヤード(90m)の様な気がします。300m送れるという製品もありますが、逆に見るならMoCAで1000mは無理ともなります。
 事の真相やいかに。

「LINOVISION 同軸LANコンバーター POE対応 電源不要型 1000mまで配線可能 100Mbps最大通信速度 既存の同軸ケーブルでIPカメラ ルーターなどのネットワーク機器を配線可能」
 上記の製品は「EoC(Ethernet over Coaxial cable)」と呼ばれる規格らしくMoCAとは違います。こちらは100Mbpsながら1000m延長出来るとあります。推奨ケーブルはRG59ですが、これは3C-2Vの別名と捉えても支障なし。3Cですから特性インピーダンスは75Ωです。
 100Mbpsあれば8ユニバース以下のArt-Netには十分ですので、ピア・ツー・ピアな用法に限定したコレの方がいいのかもと想ったり。出来る限りの便利を目指すと制限を理解せずに使って「動かない!」とか騒ぐアホが湧きますので、100baseを安価な同軸ケーブルで1000m延長するだけの単機能な器具にするのがいいかもしれません。
 これもポチってみました。人柱をするのにケチなことを言ったらいけません。

#[Art-Net]

2023年8月20日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 同軸ケーブルにEthernetを通すMoCAを調べています。
 分波器と呼ぶべきか分配器と呼ぶべきか、splitterについて参考になったサイトがありました。
「HTEM5 – How do I know if my splitter is MoCA 2.5 compatible?」
 Google先生に翻訳して頂いて読むところ、
1)テレビアンテナ用の分配器を使う。
2)双方向通信が可能な物。<=追加
3)1000MHz以上に対応する物。
4)MoCA対応と刻印のある製品が望ましい。
 てなことが読み取れました。
 さらに、ケーブル配線の条件として、
5)経路中に増幅器(アンテナブースター)が無いこと。
6)メインの分配器からの配線は100ヤード(90メートル)以内にする。
 との記載もありました。
 既設のテレビ回線を利用することが主目的の様ですからその筋の用品が使えるのでしょう。

追記
 分波器の条件には「双方向通信」も必要らしい。アンテナから受信機へ一方通行で繋がるだけの物はダメという意味です。
 この点を明記した製品は少なく判断が難しいので、MoCA対応と謳われている製品を選んだ方が無難っぽい。
 MoCA対応品はMoCA2.0と刻印されている製品が多い様子ですが、MoCA2.0と2.5の違いは同時に通信されるチェンネル数らしいので、MoCA2.0対応品ならMoCA2.5にも使えるような気がします。

#[Art-Net]
Icon of admin
 同軸ケーブルに Ethernet を通す方法というか規格には「MoCA」(「モカ」と発音?)というのがあるらしい。テレビアンテナからの配線を含め、すでに施工されている同軸ケーブルに Ethernet を通そうという指向みたい。日本語の情報が少ない感じですが、次のサイトが参考になります。
「MoCA 2.5 を使用しTVの同軸ケーブルを使ってLAN構築」
 有益な情報が含まれていますが、ここの情報だけではMoCAの全貌は把握出来ません。諸々理解するには少し時間がかかりそうですが、1000mの配線長でG(ギガ)クラスのネットワークを構築できるという謳い文句は魅力的です。テレビアンテナに使える同軸ケーブルは安価で入手性がいいので尚更です。
 ケーブルには75Ωの同軸ケーブルを用いるそうです。推奨されるケーブルの規格の詳細やグレードは把握できていませんが、すでに施工されているテレビアンテナの配線を利用することも想定してるそうですので最上位グレードのケーブルが求められているワケでもなさそうです。家屋内の商用電源配線にLANを乗せるPLCと似ているとか思ったり。
 MoCAの規格は1.0からあり、小売りで手に入る製品では2.5が今のところ最上位みたいです。表記は「MoCA2.5」です。2.5は世代を表すのではなく、スループットの最大理論値が2.5Gbpsって意味らしいです。
 この名称で検索するとまぁまぁ出てきますので興味のある方は是非調べてみてください。

 具体的な例が見当たらないので人柱をしましょう。amazonに次の製品があったのでポチってみました。先日ポチったのは未出荷だったのでキャンセルです。
「TRENDnet Ethernet Over Coax MoCa 2.5アダプター (2個パック) TMO-312C2K MoCA 2.0/1.1/1.0 RJ-45ギガビットLANポート ネットスループット最大1Gbps対応 最大16ノード対応 ブラック」
 期待値は200mくらいの配線で8ユニバースの Art-Net を実用レベルで通せることです。10baseのLANでも可能な内容ですから、これが通らない様では話になりません。
 イマイチ不明なのは、上記製品の「同ネットワーク内にノードを16個設置出来る」という謳い文句を形にする配線方法です。会場のあちらこちらに安い線材でノードを置けたら便利だろうなぁ~というイメージはありますが、メーカのマニュアルを読んでも構築の具体例が見当たりません。MoCAに関する他の情報を見ますと分波器を使えば分岐出来るようですが、どんな分波器を意味しているのかがわかりません。上記のサイトを読みますと MoCA2.5 の変調周波数は 1,125〜1,675 MHz らしいので、テレビアンテナの分波器でいいなら 2400MHz まで対応する物を使えばいいのかな?とか思いつつも分からんことだらけです。
 入荷には2週間くらいかかるそうです。時間はあるので、空き時間にノンビリと調べを進めましょう。実機が入荷したら1対1接続から始めて分岐の方法も探ってみるつもりです。分波器は中華電機にオーダーしてみました。これも2週間くらいで入荷する見込みです。

 あと、設置済みケーブルのインピーダンスの測定方法は次のサイトが参考になります。同軸ケーブルはインピーダンスが合わないと能率が激落ちするので重要です。50Ωでも通るには通るでしょうが、スループットも信頼性もどうなるのでしょうね。
「特性インピーダンスを測定してみました!」
 測定にはLCRテスターが必須です。一般のご家庭は知りませんが我が家では常備アイテムです。テスターと繋ぐ先バラケーブルと末端をショートするコネクタを作れば既設の埋め込み配線も測定できると思います。

#[Art-Net]

2023年8月18日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 先週末、LTC Generator の関数を書いてました。モード値とタイムコード値から送信のバイナリを起こす関数です。
 この作業で Python の変数の型である bytes と bytearray の違いようやくわかりました。
 突き詰めたらどちらもバイトデータの羅列ってのが第一条件なんですが、コマンドで数値を処理するなら bytearray にしといた方が楽で、デバイスが送受信で扱うのは最終的に bytes ってだけでした。
 とかく serial、socket を扱うなら bytes と bytearray がわかってないと不便。bytes にしなくても送信は出来るのですが文字コードの悪魔がちょっかいを出してくるので便利機能に頼るにしても自力で bytes まで持っていくつもりで書いた方がいいし、受信はどこまで行っても bytes なので避けて通れません。アセンブラに慣れきってしまった自分にとって「バイナリのデータが読めるとホッコリするよねぇ~」なんです。

#タイムコード #Python
Icon of admin
 本業が忙しい。工作が出来ない。哀しい。
 稼がんといけませんので仕方なし。

 こんなとき、ちょっとしたアイデアが出るもの。
 ジャンク品ですが、5Cクラスと思われるBNC同軸ケーブルと2回路の音声ケーブルが1本になっている複合ケーブル(ジープケーブル)が手元にあります。50mが2本と100mが1本です。
 出処は書けませんが、とんでもなく品質の良いケーブルです。もちろん機械強度も高い。
 丈夫で長さがあるので音声回線にDMXを通していましたが、考えてみたら同軸ケーブルにEtherでArt-Net通したらよくね?音声回線にはインカムとLTC通したらよくね?
 今回は「同軸ケーブルが望ましいので積極採用!」ではなく、ジャンクなケーブルを活かすって意味ですから実用域のアダプタが安く手に入ればアリかな?って話です。
 調べてみますと100Mbpsクラスの変換器なら入口出口のセットが1万円くらいで手に入ります。DMXマルチケーブルや屈強なLANケーブルで作ることを考えたら十分に安い。こんなんでもカタログスペックでは数百メートル引き回せるそうですから十分。

 これは試すしかありませんのでポチリました。
 幸い株で稼いだ分で賄えます。このところ株価の動きがアホみたいに大きいので、たまたま波に乗れたら3週間で原資の8%くらい取れました。巧い人は1年で何倍にもするのでしょうが、博才が皆無な私でも4月から月平均6%くらい取れています。どこに預けても増えるどころか実質目減りですから、損切り上等!で波を読むことを楽しんでます。現物なら目減りしても借金を背負うことはありませんから気楽なものです。運が良ければ持ち金が増える課金ゲームですね。昨年はちょっと負けましたが、自分に対する待ちどころがわかり始めた今年は負け分を取り返して小遣いくらいは稼げてます。自分を相手にポーカーをしているような気分ですけど。

#[Art-Net]

2023年8月11日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 ディナーショーの現場です。
 仕込めてしまえは空き時間多め。

 LTC の時間値を扱う関数を書き上げました。
・msec からフレーム数得る物
・フレーム数から LTC の時間値を得る物
・時間値をインクリメント(+1)する物
・時間値を減算する物
 以上4つです。

 上3つは当たり前でも減算が必要か?って思われるかもしれませんが、卓がLTCを再認識するのに0.5秒くらいかかることへの対策に使います。試したのは MAdot2 ですが、LTCを停止すると認識が落ちますのでLTCを再開してもすぐには動作しません。ファーストCUEが遅れることになるので困ります。ところが2-3フレームを折り返し繰り返せば認識を維持しつつ進行を止めることが出来るのでコノ状態を Pause 処理にしようと思うのです。故に、現在値に対する減算が必要なのです。
 具体的には再開の頭フレームのマイナス1フレームからマイナス3フレームを繰り返して待機状態とします。マイナス何フレームで繰り返すのが適切かは卓に寄って違う可能性がありますので今後検証したいと思います。

 この後は LTC Generator 本体のファームウェアの手直しです。制御コマンドを少し増やしたいかなと。

#タイムコード #Python

2023年8月10日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 29.97fp-NDF の場合、単位時間あたりのフレーム数は 29.97fps で 勘定は 30fps の NDF と同じです。
 ・・・ってことが頭の中で混乱しました。
 29.97fps-NDF はタイムコードの時間勘定が増えるため値の進みが遅くなります。
 こういった「増えると減る」みたいな関係は挙動の理解がややこしい。

#タイムコード

2023年8月9日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 次の2つの関数を作成しました。
・時間値をフレーム数に変換
・フレーム数からタイムコード値に変換(30・29.97・25・24fpsNDF、29.97fpsDFをサポート)
 29.97fpsでは±1フレームの誤差が出ますが、他のfpsの様にキリ良く計算出来ないからです。演出機器を動かすなら29.97fps以外を使った方がいいと思います。
 ドロップフレーム(DF)の処理はパズルでした。規則は単純ですが、計算式だけで解を得られない数の置き換えは思った以上に難儀します。
 この後は LTC Player から得られる時間値からタイムコード値を自動でカウントし続けるモジュールを作ります。すでに試作品があるのでそれを参考にします。ここでもDFが面倒な課題となります。

#タイムコード

2023年8月8日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 LTC のフレーム値の計算で悩む。
 ノンドロップフレームなら簡単ですが、29.97fpsドロップフレームではそうもいきません。実時間とタイムコードの値が合うのは1時間ごと、つまり途中は実時間とズレるのです。タイムコードは映像のフレームに時間形式のナンバリングを与える手法であって実時間を表す物ではありませんので仕方ありません。ズレがあるとしてもフレームナンバーをゼロからカウントするのは何も問題ありませんが、不特定の時間値からカウントされる場合に漠然とした疑問があるワケです。

 困っていても仕方がないので条件を整理しましょう。
 10分単位で考えてみます。
 30fpsなら10分で18,000フレームです。29.97fpsドロップフレームは10分の間に18カウントを落としますので17,982フレームです。フレーム長の伸縮比1.001を掛けますと17,999.92となり、時間差は0.08フレームです。秒に直すと0.0026秒くらいの誤差です。そんなに大きな値ではありませんねぇ。見た目にわかる人は皆無ですからあんまり気にしなくてよくね?
 となると、基準点(時毎もしくは10分毎)からのフレーム数を出し、このフレーム数からタイムコード値を得ればいいんでないか?大げさな感じもしますが、時間値で計算すると奇妙な繰り下がりが発生して計算が面倒だからです。30fpsの24時間分のフレーム数は 2,592,000 ですから32bitの整数でも十分管理出来ます。時間からフレームの枚数目を得る関数とフレームの枚数目から時間を得る関数を作っておけばどうにでもなりそう。
 ここまでやれば、都度の誤差は人が感知出来ないレベルに収まると思います。

#タイムコード

2023年8月7日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 本業がイイ感じに忙しいのでプログラム作業は思った程進みません。仕方ありませんけど。
 LTC Player は音楽プレーヤー機能が一応組めたので、LTC の送出部を本格的に進めます。

 どういった構造にしましょうかね。
 クラスライブラリの書き方も体に入ってきましたので、本格的なドライバっぽい書き方に挑戦してみようと思います。LTC Generator は LTC Player と別な時間軸で動かさないといけませんのでマルチスレッドを使うことはマストだと思われます。LTC Generator は import する別ファイルとし、LTC Player とやりとりする部分はクラスとして記述し、そのクラスからスレッドを立ち上げてシリアル通信を制御するのです。これならLTC Player からはシンプルな関数にしか見えませんので構造的に美しく如何にもドライバって風味になりますw シリアルポートのリストを得る関数も別枠で作り、LTC Generator のインスタンスを起こす際にシリアルポートを指定するようにすれば複数の LTC Generator を扱えます。実際には音声信号を分ければいいので複数扱う必要はないのですが、ドライバとしてならこうあるベキかもしれません。

#Python
Icon of admin
 Python の VLC ライブラリで mp3 を再生するとタイムオーバーします。長さ30秒の音源が32秒くらいまでカウントされて終わるのです。mp3 はデータの前後関係から復号する圧縮データのためでしょうか。
 再生ポイントがズレてのことかと思いましたがお尻に無音が付くだけの様子。VLCの再生が終了していなくても再生秒数が長さ分になったことで終了と同じ扱いにしました。
 付け焼刃な対策ですが、wav などの非圧縮データでは起こらないことですから、厳密を求めたいなら mp3 などの圧縮データを使わなければいいだけ、、、とします。
 条件を織り交ぜた Play List で一晩連続再生しましたがエラーはありません。今後は頻繁な操作を続ける試験が必要です。

20230807085604-admin.jpg

#Python

2023年8月6日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 現場が立ち合いだけだったので LTC Player を書き進めることが出来、音楽プレイヤーとして搭載予定の機能はほぼ入りました。この後は動作確認しつつバグ取りです。
 LTC を送出する LTC Generator の組み込みも考えましょう。LTCが組み込めれば全機能成立です。

#Python
Icon of admin
 LTC Player はかなり良い仕上がりです。機能をもう数種類搭載すれば音楽プレーヤーの部分は終わりかなと。
 主な課題は構造の整理ですが、細かいバグを潰しているためか負荷が減っています。特定の操作をするとファイルのアサインがおかしいバグがあったのですが、これを潰したところタスクマネージャー上の負荷が8%前後から4%前後に半減。余計なコマンドを1行消しただけなんですけど、重要な変数に破綻はさせないけどおかしな値を与えるものでした。プログラムは量じゃないと感じた一瞬ですね。

#Python

2023年8月3日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 PySimpleGUI ですが、ウェジットの更新がかなり重い様子。
 大したことやってないハズなのに重いなぁ~と以前から思っていたのですが、内容が更新されていないウェジットまで毎フレーム書き直しをしていたことが原因でした。進捗の時間表示もありますので毎フレーム書き換えるウェジットはありますが、かといって全部やるこたありません。
 ウェジットをグループに分けて内容が更新された時だけ書き換えを行う様にしたところ劇的に軽くなりました。当然っちゃ当然なんでしょうけど、ナルホドなぁ~ってことでした。フラグを立てまくりですから書き直しは面倒でしたが、これだけ軽くなるなら手間の分の価値はアリです。
 気になってどうしても確認したかったのですが、オカゲで本業が遅れております。これはこれでヤバイ。

#Python

2023年8月2日 この範囲を時系列順で読む この範囲をファイルに出力する

Icon of admin
 自作のポップアップウィンドウを作っています。
 汎用もあるのですが、ちょっと違うなぁ~って思いまして。

 ウィンドウを表示するだけなら簡単ですが問題は表示位置です。通常はモニタのセンターに表示されますが、ポップアップウィンドウは親ウィンドウの中央に表示したい。
 モニタのサイズ、親ウィンドウの位置やサイズは取得出来ますのでポップアップウィンドウのサイズがわかれば左上の位置は計算で出せますが、

 ・表示するとプログラムから表示位置の変更が出来ない。
 ・表示しないとウィンドウのサイズを得られない。

 といった制約のためナカナカ難しい。

 ならばと閃いたのが、テキトウな位置に表示してサイズを取得してすぐに消し、位置を計算して再表示するというもの。サイズ取得のための表示はタイムアウトを10msecくらいにすれば全く気になりません。
 進捗表示などはメインルーチンで進捗の更新しないといけませんが、関数側で表示まで行い、ウィンドウのステータスをメインルーチンに戻して進捗表示を進めます。処理が終わればメインルーチン側で close() を実行です。ウィンドウのステータスをポインタで返しているんですね。

 ついでに、親ウィンドウがモニタからハミ出した場合にはフルサイズになるようにもしてみました。

#Python