<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title><![CDATA[ 全年6月14日の投稿［6件］ - 電装工芸日記 - 舞台照明機器の製作とか - ]]></title>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi</link>
	<description><![CDATA[ 今年は開発案件を進めたい ]]></description>
	<language>ja</language>
	<copyright>Copyright 2026</copyright>
	<lastBuildDate>Tue, 21 Apr 2026 06:51:15 +0900</lastBuildDate>
	<generator><![CDATA[ <!-- てがろぐ Version: -->Powered by <a href="https://www.nishishi.com/cgi/tegalog/" target="_top">てがろぐ</a> Ver 3.4.0 ]]></generator>
	<!-- BEGIN ENTRIES -->
	<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　現地照明でしたが、シュートが終わったらバラシまで待機という… ]]></title>
	<description><![CDATA[ 　現地照明でしたが、シュートが終わったらバラシまで待機という名の休憩。直しとトラブルシュートに対応出来ればいいのでまとまった空き時間です。こんな時は設計という名の妄想が一番です。<br /><br />　課題は毎度おなじみ「ArtNetPatch」です。主にソフトウェアの構成が課題です。<br />　受けたデータを一時保存、加工、出力しますので、機能は映像ストリーミングに近いかもしれませんが、自分のイメージはデータベースです。<br />　その昔ファイルメーカーを母体に機材の稼働管理システムを作って今も使っていますが、データを動的に仕分けて加工する感覚が今回活用出来ています。<br />　アルゴリズムと言えばそうなんですが、データを保管する構造体の設計が主な作業です。可能か不可能かを確認しながらになりますが、最終的にまとめる構造体が決まれば仕分けて加工するアルゴリズムはおのずと決まってくるので私にはこの感覚で進めるのが性に合っているようです。処理の全体像が見えてきました。<br /><br />　アセンブラではないので構想の段階で処理時間の見込みを付けることは難しいのですが、そもそもRaspberryPiのCPUにおけるマシンコードの動作速度はどうだと計算したら恐ろしい数字。ARMの2.4GHzですが、PICの感覚で単純計算したら１クロック当たりの時間は0.42nsec。PICに比べたら桁違いというか単位違い。OSを介するので単純には比べられないもののマシンコードのイメージで書けばかなり速くなりそう。例えば、積や商を求めるために四則演算をするかビットシフトをするかってことです。2倍や1/2などの2の乗数に関わる積や商ならビットシフトの方が速いハズです。この辺りが「C言語はアセンブラを汎用化したもの」ってイメージであり、Pythonとは違い、C言語はアセンブラの感覚で使うベシってのが私個人の感覚になりつつあります。出来るだけ単純な計算方法を目指してデータ構造を考えるのです。Ｃ言語の難解さがアセンブラ傾向のアプローチで軽くなった気分です。普通は逆なんでしょうけど。<br />　Ｃ言語を作った神達はアセンブラをマクロ化して手間を減らすところから始まってますので、世代を経ても底辺はアセンブラなんでしょう。同時代のCOBOLやFORTRANは意味付けが違うようですけど。<br /><br />　勝手な妄想はともかく、どんなデータをどう変換・加工するかを明らかにすればおのずと見えてくるようです。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%41%72%74%2d%4e%65%74" class="taglink" title="Art-Net">#&#91;Art-Net&#93;</a> <a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%e5%99%a8%e5%85%b7%e3%81%ae%e8%a3%bd%e4%bd%9c" class="taglink" title="器具の製作">#器具の製作</a> <a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%ef%bc%a3%e8%a8%80%e8%aa%9e" class="taglink" title="Ｃ言語">#Ｃ言語</a> -- Posted by 電装工芸 〔1034文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=1074</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=1074</guid>
	<category>tegalog</category>
	<pubDate>Sat, 14 Jun 2025 22:44:01 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　python-vlc で音源を流す試験をしました。 ]]></title>
	<description><![CDATA[ 　python-vlc で音源を流す試験をしました。<br />　単に再生するだけなら簡単。<br />　ちょっと難儀したのは再生終了を確定する処理。再生後自動的にリセットされませんので、再生が終了したことを確認して後処理をしないといけません。<br />　vlc.MediaPlayer.is_playing()は再生中かどうかを把握出来ますが、これだけでは再生が終了したフェーズかわかりません。オレフラグ(下記ではis_playing)を併用して再生前か再生後かを判別します。再生後ならstop()を実行します。きちんとstop()しないともう一度再生が出来ないpython-vlc。<br />　下記は再生終了を確定する試験として繰り返し再生するモノです。<br /><br /><small class="decorationS"><span class="decorationF deco-code"># -*- coding&#58; utf-8 -*-<br /><br />import time<br />import vlc<br /><br />def play() &#58;<br />　# 音声ファイルを定義<br />　play_music = ( &#91; vlc.MediaPlayer() &#93; )<br />　try &#58;<br />　　play_music&#91;0&#93;.set_mrl( &apos;C&#58;/音源.mp3&apos; )<br />　except &#58;<br />　　return -1<br />　# 再生ボリューム設定<br />　play_music&#91;0&#93;.audio_set_volume( 60 )<br />　# フラグ定義<br />　is_playing = 0　　# 再生実行済みフラグ<br /><br />　# Main Loop<br />　while True &#58;<br />　　try &#58;<br />　　　# 予備睡眠<br />　　　time.sleep( 0.0001 )　　# Ctl-Cの反応を良くするのに少しsleepを入れるといい<br />　　　# 停止中<br />　　　if( play_music&#91;0&#93;.is_playing() == 0 ) &#58;<br />　　　　# 未開始で停止中<br />　　　　if( is_playing == 0 ) &#58;<br />　　　　　play_music&#91;0&#93;.play()<br />　　　　　while ( play_music&#91;0&#93;.is_playing() == 0 ) &#58;　# 再生状態が確定するまで待つ<br />　　　　　　time.sleep( 0.001 )<br />　　　　　play_music&#91;0&#93;.set_time( 0 )<br />　　　　　is_playing = 1<br />　　　　# 再生終了で停止中<br />　　　　else &#58;　　　# if( is_playing == 1 ) &#58;<br />　　　　　play_music&#91;0&#93;.stop()　　# 再生終了を宣言してインスタンスをリセットする 主にこれをやりたいがための処理<br />　　　　　is_playing = 0<br />　　　# 再生中<br />　　　else &#58;<br />　　　　pass　　　# 再生中に行う処理は書いていないのでとりあえずpass<br /><br />　　# Ctl-Cで終了<br />　　except KeyboardInterrupt &#58;<br />　　　play_music&#91;0&#93;.stop()<br />　　　break<br />　return 0<br /><br />if __name__ == &quot;__main__&quot; &#58;<br />　play()<br /><br /></span></small><br /><br />　python-vlc便利過ぎ。<br /><br />追記<br />　vlc.MediaPlayer.get_length()とvlc.MediaPlayer.get_time()を使って再生が最後まで行ったかチェックしました。<br />　何曲か試しましたが、概ねlengthの-0.1～-0.2秒で終了しています。vlc.MediaPlayer.get_time()は取得単位の1msecで厳密にカウントされているモノでも無さそうなので表示上の誤差かもしれません。トラック別で音繋がり場合は少し不安がありますが、音のお尻には1-2秒の余白があるのが一般的ですし、そこまで突き詰めるシステムではありませんのでいいかなと。<br />　画面作りをやって LTC Generator と合わせれば完成が見えてきそうです。<br />　ウィンドウマネージャーはPython標準のtkinterを使う勉強をしています。書式は違いますが、考え方はHTMLとCSSを使ったweb画面作りに酷似していますので、方言的に翻訳が出来れば何とかなりそうです。ただ、ボタン操作や画面の更新をオブジェクト指向のイベント処理(割り込み)で書くので少し面倒ですし、LTC Generator の制御やvlcの部分はバックグラウンドの常駐処理にしたいのでウィンドウ制御とは別スレッドとなり手間がかかるかも。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%50%79%74%68%6f%6e" class="taglink" title="Python">#Python</a> <a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%e3%82%bf%e3%82%a4%e3%83%a0%e3%82%b3%e3%83%bc%e3%83%89" class="taglink" title="タイムコード">#タイムコード</a> -- Posted by 電装工芸 〔1857文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=650</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=650</guid>
	<category>tegalog</category>
	<pubDate>Wed, 14 Jun 2023 22:01:04 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　オレメモ ]]></title>
	<description><![CDATA[ 　オレメモ<br /><br />　PythonでVLCを使った音楽再生方法を再整理。<br /><br />　Windows11x64<br />　Python3.7<br />　VLC media player ver.3.0.18<br /><br />　pipでpython-vlcをインストール。<br /><small class="decorationS"><span class="decorationF deco-code">コマンドプロンプト(管理者権限にて)<br />&gt; pip3 install python-vlc</span></small><br />　pipとはPythonのライブラリを提供してくれるリポジトリのこと。先達に感謝。<br /><br />　pythonでvlcによる再生。<br /><small class="decorationS"><span class="decorationF deco-code">import vlc<br /><br />if __name__ == &apos;__main__&apos;&#58;<br />　p = vlc.MediaPlayer()　　 ＃vlc.MediaPlayerのインスタンスを作成<br />　p.set_mrl(&apos;sound.mp3&apos;)　　＃インスタンスに音源ファイルを関連付け 相対パスも可能らしいがフルパス指定を推奨<br />　p.play()　　　　　　　　　＃再生開始<br /></span></small><br />　これだけで音声ファイルが再生されます。<br /><br />　以下基本的なAPI。<br /><small class="decorationS"><span class="decorationF deco-code">p = vlc.MediaPlayer()　　 　　　　＃vlc.MediaPlayerのインスタンスを作成<br />p.set_mrl(&apos;&lt;file_name&gt;&apos;)　　　　　＃インスタンスに音源ファイルを関連付け 相対パスも可能らしいがフルパス指定を推奨 ファイルはVLC media player で扱える物なら何でも。<br />p.play()　　　　　　　　　　　　　＃再生開始　戻り値 0=正常再生/-1=再生出来ない　※ pauseされていれば再生再開<br />p.is_playing()　　　　　　　　　　＃再生中か　戻り値 0=再生していない/1=再生中<br />p.pause()　　　　　　　 　　　　　＃再生中なら一時停止、一時停止中なら再生再開　戻り値無し<br />p.get_length()　　　　　　　　　　＃音源の長さを取得　戻り値 秒数(msec.)<br />p.get_time()　　　　　　　　　　　＃音源の最初からの再生位置を取得　戻り値 秒数(msec.)<br />p.set_time(&lt;msec.&gt;)　　　 　　　　＃再生再開位置を秒数(msec.)で指定　戻り値無し　※ 再生中やpause()中でないと指定出来ない<br />p.audio_set_volume(&lt;パーセント&gt;)　＃0=mute,100=0dB（パーセント指示だと思っていいみたい。100以上も指定可能。）戻り値 0=再生中に設定成功/-1=設定はしたが再生はしていない<br />p.stop()　　　　　　　　　　　　　＃停止　戻り値無し 次回のplay()では最初から始まる<br />※ 最後まで再生しきっても、stop()をしないと次回のplay()はスタートしない。再生終了で必ずstop()を実行する。<br />※ 停止中は次の再生開始秒数を指定出来ないので、特定の秒数(msec.)から再生する場合は、play()に続いてset_time(&lt;msec.&gt;)を実行する。ただし、pause()中は指定可能。<br />p.play()<br />p.set_time(&lt;msec.&gt;)</span></small><br /><br />　複数の音源ファイルをプレイリストとして扱ってくれるクラスもあるのですが、LTCを作るには少し不便がありそうなため、１曲単位で扱うことにしています。<br /><br />　vlc.MediaPlayer()のリストを作成する。<br /><small class="decorationS"><span class="decorationF deco-code">p = ( &#91;vlc.MediaPlayer(), vlc.MediaPlayer(), vlc.MediaPlayer()&#93; )<br />＃ p&#91;0&#93;、p&#91;1&#93;、p&#91;2&#93; などと使える。</span></small><br />　普通にオフジェクトのリストとして扱える。<br /><br />　これだけはメモ。<br />　リストのオブジェクトを追加する。<br /><small class="decorationS"><span class="decorationF deco-code">p.append( vlc.MediaPlayer() )<br />＃ 上記に続いた場合は p&#91;3&#93; が追加される</span></small><br /><br />　再生操作のレスポンスはとても良く、タイムラグはほとんど感じない。<br />　ただ、プレイリスト分のインスタンスを設定するにはメモリに注意かもしれない。<br /><br />参考<br />　<a class="url" href="http&#58;//www.olivieraubert.net/vlc/python-ctypes/doc/" target="_blank" title="http&#58;//www.olivieraubert.net/vlc/python-ctypes/doc/">python-vlcのドキュメント</a><br />　ここの「vlc.MediaPlayer」を参照。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%50%79%74%68%6f%6e" class="taglink" title="Python">#Python</a> -- Posted by 電装工芸 〔1723文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=649</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=649</guid>
	<category>tegalog</category>
	<pubDate>Wed, 14 Jun 2023 13:01:24 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　LTC Generator のLTC信号を卓(MA dot… ]]></title>
	<description><![CDATA[ 　LTC Generator のLTC信号を卓(MA dot2)が認識しました。<br />　ただ、同じ値を送り続けても認識しません。LTCを入力してから認識するまで１秒弱かかるので、カウントを進めずに信号を認識し続ける方法が欲しいのです。<br />　試しに数フレームの繰り返しを組んでみたところ認識し、数フレームの繰り返しを一定回数行ってから抜ける様にしたところ期待する結果を得ました。<br />　最初のCUEポイントのマイナス数フレームの位置で2-3フレームの繰り返し待機をし、トリガが立ったらそれを抜ける考え方で良さそうです。<br />　ともかく、卓が認識したので一安心です。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%e3%82%bf%e3%82%a4%e3%83%a0%e3%82%b3%e3%83%bc%e3%83%89" class="taglink" title="タイムコード">#タイムコード</a> -- Posted by 電装工芸 〔283文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=648</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=648</guid>
	<category>tegalog</category>
	<pubDate>Wed, 14 Jun 2023 11:24:09 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　LTC Generator は30fpsも他のfpsと同様… ]]></title>
	<description><![CDATA[ 　LTC Generator は30fpsも他のfpsと同様の誤差でした。時間の勘定に期待値が出たので PIC のファームウェアは一応の完成とします。あとは、卓が認識するかです。<br />　今後はPC側のアプリケーションの製作です。Pythonベースでvlcライブラリを使い、LTCとVLCは同時スタートの疑似シンクです。VLCの現在時からLTCを生成することは難しいからです。途中スタートではLTCの現在時からVLCの開始時を補正して合わせる様にします。<br />　音声ファイルはプレイリストとしてまとめ、スタートタイム、エンドタイム、ボリューム、連続再生、曲間時間などを個別に設定出来る様にします。複数の音声ファイルを並列で再生する用途は想定しませんので、１トラックのわかりやすいモノを目指します。もちろん、LTCのタイムが被らない様にチェックする機能も大切です。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%e3%82%bf%e3%82%a4%e3%83%a0%e3%82%b3%e3%83%bc%e3%83%89" class="taglink" title="タイムコード">#タイムコード</a> -- Posted by 電装工芸 〔385文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=647</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=647</guid>
	<category>tegalog</category>
	<pubDate>Wed, 14 Jun 2023 07:01:55 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　夢想妄想で電子回路を設計していたんですが、ほんの少しロジッ… ]]></title>
	<description><![CDATA[ 　夢想妄想で電子回路を設計していたんですが、ほんの少しロジックICを使いたい。ＡＮＤが２個とＯＲが１個。<br />　14ピンくらいのDIP-ICを２個使えばいいのですが大柄になるので避けたい。<br />　ちょっと前までは表面実装トランジスタと同じくらい小さなワンゲートロジックと呼ばれる物が秋月さんでも手に入ったのですが今は微妙。<br />　共立エレショップさんで何となく探したところ便利そうなロジックICが見つかりました。<br /><a class="url" href="https&#58;//eleshop.jp/shop/g/gF22123/" target="_blank" title="https&#58;//eleshop.jp/shop/g/gF22123/">　コンフィギュラブル マルチファンクションゲートIC　<br />　SN74LVC1G97DBV　</a> <br />　これはワンゲートロジックの一種ですが、つなぎ方で様々なロジック回路になります。SN74LVC1G97DBVはANDもORもどちらも出来ます。電圧の対応範囲も広く、20mAくらいドライブ出来るので小さなLEDなら直接点灯も出来そう。これは便利。<br /><br />　実は、WS2812Bというマイコン内蔵型のLEDをPICでドライブする方法を考えていたのですが、PICではほんの少しロジック回路が必要です。<br />　CLCと呼ばれる小規模GALが内蔵されたPICならこれを用いれば済みますが、表面実装のPIC16F1939を大量に在庫しているので出来ればこれを用いたいのです。<br /><br />追記<br /><br />　以前、DMX-512を入力できるWS2822Sのことを書きましたが、アドレス設定機を作れば便利に使えそうなものの、国内はおろか中華電器も含め、取り扱いが秋月電子さんだけになっていました。<br />　秋月さんに問い合わせればわかることですが、もし製造元で廃番になっていると将来的な入手に不安があります。WS2812やそれと近しい制御信号の製品はamazonでも中華電器でも手に入るので、どうせ作るならこの系統にしようかなと。<br />　PICのメーカーであるmicrochip社のサイトにWS2811を動かすアプリケーションノート(AN1606)があってそれを参考にしています。信号のプロトコルはWS2811、WS2812(前期型)、WS2812(後期型)、WS2815で微妙に違うのですが、PICの条件も含め、出来る限り互換性を持った方法を見つけてみようと思います。信号のレートが800kbps相当と速いのでPICには少し荷が重いのですが、出来るだけフルアドレスに対応出来る様に考えてみたいと思います。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%e9%9b%bb%e5%ad%90%e5%b7%a5%e4%bd%9c" class="taglink" title="電子工作">#電子工作</a>  -- Posted by 電装工芸 〔982文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=297</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=297</guid>
	<category>tegalog</category>
	<pubDate>Tue, 14 Jun 2022 16:46:10 +0900</pubDate>
</item>

	<!-- END ENTRIES -->
</channel>
</rss>

