全年全月18日の投稿[33件](2ページ目)
2023年7月 この範囲を時系列順で読む この範囲をファイルに出力する
Pythonでマルチスレッドをする方法を改めて調べていました。
以前は threading を使いましたが、concurrent.futures が便利っぽい。普通の関数を使うのと大差ない手間で使えます。
しかもマルチスレッドだけでなくマルチプロセスも扱えます。マルチプロセスでも fork して管理する作業が無く、マルチスレッドとほぼ同じ書き方で使えるので、どちらかで書いておけば後から変更するのも簡単。
マルチスレッドとマルチプロセスの違いは先達の書き込みが沢山があるので割愛しますが、今回の用途ではマルチスレッドが良さそうです。処理の総量はシングルプロセスでも十分に間に合っているのですが、ウィンドウマネージャーの待ちとシリアル通信の待ちがかみ合わないことへの措置なので軽快なマルチスレッドなワケです。
#Python
以前は threading を使いましたが、concurrent.futures が便利っぽい。普通の関数を使うのと大差ない手間で使えます。
しかもマルチスレッドだけでなくマルチプロセスも扱えます。マルチプロセスでも fork して管理する作業が無く、マルチスレッドとほぼ同じ書き方で使えるので、どちらかで書いておけば後から変更するのも簡単。
マルチスレッドとマルチプロセスの違いは先達の書き込みが沢山があるので割愛しますが、今回の用途ではマルチスレッドが良さそうです。処理の総量はシングルプロセスでも十分に間に合っているのですが、ウィンドウマネージャーの待ちとシリアル通信の待ちがかみ合わないことへの措置なので軽快なマルチスレッドなワケです。
#Python
2023年6月 この範囲を時系列順で読む この範囲をファイルに出力する
LTC Player を試作ってみました。

まだまだ途中ですが、ウィンドウの下半分はこんな感じかなと。音源ファイルを選択して再生出来ます。再生、停止などは当たり前ですが、スライダーで再生位置指示と音量を付けてあります。音量は音源に対するものでシステムの音量は変化しません。上半分にはプレイリストを表示する予定です。
PySimpleGUIはレイアウトの制約が多いのですが、その範囲で並べればいいだけです。自由度を求めるならTkinterやKivyですが、これらはプログラミングが大変過ぎます。PySimpleGUIなら予習2日、製作数時間でここまで出来ました。
ボタンがフォーカス(押してはいないけど選択された状態)されているとスペースキーで押されたことになるので、フォーカスをボタン類から外すか常にPLAYボタンがフォーカスされた状態にするにはどうするかが課題です。
キー入力の取得も簡単でした。ウィンドウを表示コマンドにキーイベントを拾うスイッチを加えるだけです。キーボードで押された文字が戻り値に入ります。日本語入力状態には対策が必要です。
追記
ボタンのフォーカス問題ですが、ダミーボタンを置き、常にこれがフォーカスされる様にしました。
イベントが発生してPySimpleGUI.Window.read()を抜けたらイの一・無条件にダミーボタンをフォーカスするのです。
今はボタンしかレイアウトしていませんのでいいですが、強制フォーカスがダメな時には強制フォーカスの実行に条件を付けましょう。
#Python

まだまだ途中ですが、ウィンドウの下半分はこんな感じかなと。音源ファイルを選択して再生出来ます。再生、停止などは当たり前ですが、スライダーで再生位置指示と音量を付けてあります。音量は音源に対するものでシステムの音量は変化しません。上半分にはプレイリストを表示する予定です。
PySimpleGUIはレイアウトの制約が多いのですが、その範囲で並べればいいだけです。自由度を求めるならTkinterやKivyですが、これらはプログラミングが大変過ぎます。PySimpleGUIなら予習2日、製作数時間でここまで出来ました。
ボタンがフォーカス(押してはいないけど選択された状態)されているとスペースキーで押されたことになるので、フォーカスをボタン類から外すか常にPLAYボタンがフォーカスされた状態にするにはどうするかが課題です。
キー入力の取得も簡単でした。ウィンドウを表示コマンドにキーイベントを拾うスイッチを加えるだけです。キーボードで押された文字が戻り値に入ります。日本語入力状態には対策が必要です。
追記
ボタンのフォーカス問題ですが、ダミーボタンを置き、常にこれがフォーカスされる様にしました。
イベントが発生してPySimpleGUI.Window.read()を抜けたらイの一・無条件にダミーボタンをフォーカスするのです。
今はボタンしかレイアウトしていませんのでいいですが、強制フォーカスがダメな時には強制フォーカスの実行に条件を付けましょう。
#Python
2023年5月 この範囲を時系列順で読む この範囲をファイルに出力する
MUSES01Dが入荷したので我慢出来ず実験。
エージングが済んでいないのにNJM4580Dよりも圧倒的に良い音です。良い音の基準は難しいですが、第一印象は重なって隠れてしまう音が一つも感じられないことです。今まで聞こえなかった音が聴こえるとか、音の向こうの無音まで聴こえてきそうだと書いたら大げさですがそんな感じ。ジャズっぽい音源で試していますが、主旋律は勿論、僅かに入っている伴奏の輪郭や余韻まで明瞭に聴こえ、NJM4580Dではあまり聴こえなかったスネアのブラシにまで存在感があります。粒立ちが良く透明感があるとでも書けばオーディオ評論っぽい?
いかにもJRCの音なのは否定しませんが、これ以上は自分のバカ耳では評価不能かも。凄いの一言です。ちょっと聴いただけで「良い音ぢゃね!?」と思ってもらえるレベルだと思います。
バンドモノの現場で楽器を繋いで試してみたいです。ベースはもちろん、キーボードの音も圧倒的に良くなりそうな期待感があります。
本領発揮には300-350時間のエージングが必要とのこと。本当にここまで必要なのか疑問もありますが、やらないとわかりませんのでエージングを開始。2週間ガンバレ!
ちなみに、どの比較情報を見ても「OPA627」が群を抜いた高評価。形はMUSES01Dと同じDIP8ピンですが、1回路物なので今の基板では使えません。
実売価格は1個6,000円もします。DI-1に使うなら2個必要ですが、ここまでになると良質なダイレクトボックスを買った方が良さそうなので止めておきます。
端っからDI-1の限界に挑戦するつもりは無く、部品代5,000円未満で改善出来るならアリぢゃねってプランですからね。
予想以上に良い経過を得ているので更に上を試してみたい気持ちは捨てきれませんけどwww
余談かもしれませんが、amazonや中華電機には刻印を書き換えた偽物が多いらしいのでご注意を。5,000円以下のOPA627は怪しさ満点だし、MUSESシリーズは秋月電子通商以外で買わない方がいいとのこと。真相を確かめる気はありませんので、ナンとも言えないところですけどね。
オマケとして、今回の基板と外したM5218の記念撮影。

aitendoさんに同じ用途の基板がありました。
0.65-2.54/8P★SIL変換基板(3枚入)
DI-1の基板並みに太くて真っすぐな配線にグランドシールドが過剰にされている物が欲しかったので私には少し違うのですが、これを使えば同様の改造が可能だと思います。
aitendoさんのアイデア商品は売り切りで終わりになる事が多いので、興味のある方はお早めに購入されることをお勧めします。
3枚100円は安い!!
#音の世界 #器具の製作
エージングが済んでいないのにNJM4580Dよりも圧倒的に良い音です。良い音の基準は難しいですが、第一印象は重なって隠れてしまう音が一つも感じられないことです。今まで聞こえなかった音が聴こえるとか、音の向こうの無音まで聴こえてきそうだと書いたら大げさですがそんな感じ。ジャズっぽい音源で試していますが、主旋律は勿論、僅かに入っている伴奏の輪郭や余韻まで明瞭に聴こえ、NJM4580Dではあまり聴こえなかったスネアのブラシにまで存在感があります。粒立ちが良く透明感があるとでも書けばオーディオ評論っぽい?
いかにもJRCの音なのは否定しませんが、これ以上は自分のバカ耳では評価不能かも。凄いの一言です。ちょっと聴いただけで「良い音ぢゃね!?」と思ってもらえるレベルだと思います。
バンドモノの現場で楽器を繋いで試してみたいです。ベースはもちろん、キーボードの音も圧倒的に良くなりそうな期待感があります。
本領発揮には300-350時間のエージングが必要とのこと。本当にここまで必要なのか疑問もありますが、やらないとわかりませんのでエージングを開始。2週間ガンバレ!
ちなみに、どの比較情報を見ても「OPA627」が群を抜いた高評価。形はMUSES01Dと同じDIP8ピンですが、1回路物なので今の基板では使えません。
実売価格は1個6,000円もします。DI-1に使うなら2個必要ですが、ここまでになると良質なダイレクトボックスを買った方が良さそうなので止めておきます。
端っからDI-1の限界に挑戦するつもりは無く、部品代5,000円未満で改善出来るならアリぢゃねってプランですからね。
予想以上に良い経過を得ているので更に上を試してみたい気持ちは捨てきれませんけどwww
余談かもしれませんが、amazonや中華電機には刻印を書き換えた偽物が多いらしいのでご注意を。5,000円以下のOPA627は怪しさ満点だし、MUSESシリーズは秋月電子通商以外で買わない方がいいとのこと。真相を確かめる気はありませんので、ナンとも言えないところですけどね。
オマケとして、今回の基板と外したM5218の記念撮影。

aitendoさんに同じ用途の基板がありました。
0.65-2.54/8P★SIL変換基板(3枚入)
DI-1の基板並みに太くて真っすぐな配線にグランドシールドが過剰にされている物が欲しかったので私には少し違うのですが、これを使えば同様の改造が可能だと思います。
aitendoさんのアイデア商品は売り切りで終わりになる事が多いので、興味のある方はお早めに購入されることをお勧めします。
3枚100円は安い!!
#音の世界 #器具の製作
秋月さんから「MUSES01D」が入荷。
試したいけれど時間が微妙です。
けど、モヤモヤするのでやりましょう!
基本動作だけでも確認します。
#音の世界
試したいけれど時間が微妙です。
けど、モヤモヤするのでやりましょう!
基本動作だけでも確認します。
#音の世界
2023年1月 この範囲を時系列順で読む この範囲をファイルに出力する
秋月電子通商さんでRaspberryPi4Bが販売されていました。
特需ですぐに無くなってしまう?
お金は辛いですが、とりあえず3個発注しました。
#RaspberryPi
特需ですぐに無くなってしまう?
お金は辛いですが、とりあえず3個発注しました。
#RaspberryPi
本業が落ち着いたので所属会社の作業部屋を片付けをしています。
コンセプトマシンで使うオンジナオイルの20Lの空き缶2個の処分で悩む。捨てようと思えば捨てられますが、一般家庭ゴミでは出せませんので面倒。
ならば、イスにしてしまいましょう。
上面に丸く切ったコンパネを貼り、床を傷つけないように底面の縁にゴムのエッジ材を取り回しました。すべて余り材とジャンク品で済んだので目先のお金はゼロ。
しばらくは作業部屋とジャンク材の片付けです。キレイ好きとは真逆ですが、次の作業のためにもやっておかないといけません。
#本業
コンセプトマシンで使うオンジナオイルの20Lの空き缶2個の処分で悩む。捨てようと思えば捨てられますが、一般家庭ゴミでは出せませんので面倒。
ならば、イスにしてしまいましょう。
上面に丸く切ったコンパネを貼り、床を傷つけないように底面の縁にゴムのエッジ材を取り回しました。すべて余り材とジャンク品で済んだので目先のお金はゼロ。
しばらくは作業部屋とジャンク材の片付けです。キレイ好きとは真逆ですが、次の作業のためにもやっておかないといけません。
#本業
2022年12月 この範囲を時系列順で読む この範囲をファイルに出力する
Pythonはとても書きやすい。インタプリタなので即実行出来てデバッグも楽だし、処理速度を求めないなら短時間で書けて生産性がいい。
けど、重要な部分をC言語で書くなら全部C言語で書いてもいいんでないか?
Pythonが私の用途でイマイチな点は条件分岐を多用する繰り返し処理が遅いことです。だからこそPythonのライブラリをC言語で書こうとしているのですが、目的が機械制御ですからPythonを使っている時点でそもそも間違っていると言われても仕方ありません。
ならなぜC言語を使わないのか。
何十年も前の話ですがC言語に挫折したトラウマがあるからです。MS-DOS上のTurbo-Cを触ってみましたが、書けるには書けるものの、やりたい機械制御は霞の向うの桃源郷の様でした。正しくはデバイス制御が出来なかったとなるでしょうか。それが故にPICマイコンに目が向いたとも言えます。
ですが、今は良い教科書が多く、ネットにも先達の情報があふれています。デバイス制御をするにも先達たちが作り上げた資産の恩恵に与れます。
ケースバイケースでありますが、C/C++をもっと積極的に使った方がいい気がしてきました。
機械制御を目的とした製作なら、Pythonで試作をしてC/C++で本命を書くのがいいかもしれません。
PythonもC/C++も作法が違うだけで本質的には同じですし。
てなわけで、PythonのライブラリをC言語で書くことを勉強するのではなく、RaspberryPiをC/C++で開発する勉強をすることにします。
手始めに何十年も前に買ったANSI-Cの教科書を読み直しましょうか。Art-NetエンジンをC/C++で書くことを当面の目標にしましょう。これはPythonベースでほぼ完成していますからね。
#Python
けど、重要な部分をC言語で書くなら全部C言語で書いてもいいんでないか?
Pythonが私の用途でイマイチな点は条件分岐を多用する繰り返し処理が遅いことです。だからこそPythonのライブラリをC言語で書こうとしているのですが、目的が機械制御ですからPythonを使っている時点でそもそも間違っていると言われても仕方ありません。
ならなぜC言語を使わないのか。
何十年も前の話ですがC言語に挫折したトラウマがあるからです。MS-DOS上のTurbo-Cを触ってみましたが、書けるには書けるものの、やりたい機械制御は霞の向うの桃源郷の様でした。正しくはデバイス制御が出来なかったとなるでしょうか。それが故にPICマイコンに目が向いたとも言えます。
ですが、今は良い教科書が多く、ネットにも先達の情報があふれています。デバイス制御をするにも先達たちが作り上げた資産の恩恵に与れます。
ケースバイケースでありますが、C/C++をもっと積極的に使った方がいい気がしてきました。
機械制御を目的とした製作なら、Pythonで試作をしてC/C++で本命を書くのがいいかもしれません。
PythonもC/C++も作法が違うだけで本質的には同じですし。
てなわけで、PythonのライブラリをC言語で書くことを勉強するのではなく、RaspberryPiをC/C++で開発する勉強をすることにします。
手始めに何十年も前に買ったANSI-Cの教科書を読み直しましょうか。Art-NetエンジンをC/C++で書くことを当面の目標にしましょう。これはPythonベースでほぼ完成していますからね。
#Python
2022年9月 この範囲を時系列順で読む この範囲をファイルに出力する
電源の投入を遅らせる方法は「オン・ディレイ」と呼ばれる方法だそうです。
「QC Connect」

簡単な回路ですが、トランジスタの電気特性の裏をかいたような動作なので分かりにくいかも。肝は、トランジスタのベース端子の飽和電圧です。回路図にある2N2222も汎用品のレジェンド2SC1815もそうですが、ベースに一定以上の電圧(飽和電圧)が印加されないと通電しません。ダイオードの親戚ですから考えてみれば当然です。抵抗20kΩとコンデンサ1uFで構成される時定数回路においてコンデンサの電圧が0.6vになるまでの待ち時間をディレイタイムとしているのです。
主目的は通電直後のノイズ除去です。GPIOがHレベルを0.5~1.0秒以上維持した場合にのみリレーがONになるなら、通電直後の意図しない信号やノイズを排除出来るハズです。
回路図の20kΩと1uFの時定数は0.02秒(20msec)ですから、概算なら電圧比を掛けて2.4msecです。33kΩと22uFだと時定数は0.726秒ですから、電圧比を掛けて132msec。もっと欲しい気もするけどこんなもん?コンデンサを表面実装の小型品にするために10uFを上限とするなら68k~100kΩかな?
リレーはフリーホイールダイオードと共に回路図のR2の位置に配置です。
ただ、時定数のコンデンサを小さくするとR1の抵抗値が大きくなりベース電流が少なくなってリレーをドライブする電流が不足するので、トランジスタはGRグレードをダーリントン接続にした方がいいのかな?
この辺りのバランスはトランジスタの増幅率と部品のサイズで考えてみましょう。
#電子工作
「QC Connect」

簡単な回路ですが、トランジスタの電気特性の裏をかいたような動作なので分かりにくいかも。肝は、トランジスタのベース端子の飽和電圧です。回路図にある2N2222も汎用品のレジェンド2SC1815もそうですが、ベースに一定以上の電圧(飽和電圧)が印加されないと通電しません。ダイオードの親戚ですから考えてみれば当然です。抵抗20kΩとコンデンサ1uFで構成される時定数回路においてコンデンサの電圧が0.6vになるまでの待ち時間をディレイタイムとしているのです。
主目的は通電直後のノイズ除去です。GPIOがHレベルを0.5~1.0秒以上維持した場合にのみリレーがONになるなら、通電直後の意図しない信号やノイズを排除出来るハズです。
回路図の20kΩと1uFの時定数は0.02秒(20msec)ですから、概算なら電圧比を掛けて2.4msecです。33kΩと22uFだと時定数は0.726秒ですから、電圧比を掛けて132msec。もっと欲しい気もするけどこんなもん?コンデンサを表面実装の小型品にするために10uFを上限とするなら68k~100kΩかな?
リレーはフリーホイールダイオードと共に回路図のR2の位置に配置です。
ただ、時定数のコンデンサを小さくするとR1の抵抗値が大きくなりベース電流が少なくなってリレーをドライブする電流が不足するので、トランジスタはGRグレードをダーリントン接続にした方がいいのかな?
この辺りのバランスはトランジスタの増幅率と部品のサイズで考えてみましょう。
#電子工作
このところ現場続きで先の現場の準備もままならないところですが、気分転換で少しづつやってます。
GPIOに繋げたテスト用のLEDを目視した範囲なので確実とは言えませんが、act_ledはカーネルの動作中を表す信号として使えそうです。
pwr_ledとact_ledの挙動ですが、通電直後(再起動では一度終了した時)はデフォルト設定に戻っており電源パイロットとSDカードのアクセスランプとなっていますが、カーネルが起動して各種ドライバが読み込まれる前にcmdline.txtに書かれた設定がされます。GPIOも通電直後は初期化されており、Hi-ZかGNDになっているようでHは出力しません。
つまり、act_ledをdefault-onにしてGPIOにオーバーライトすればカーネルが起動している時に点灯するLED、すなわちカーネルが起動していることを表す信号となるようです。
電源が入った直後は端子の状態は不安定ですからワンショットが出るかもしれませんけどね。
ならば、この信号を受けてUSBポートの電源を入り切りするようにすればいい。
GPIOの信号を抵抗とコンデンサの時定数回路で受けて起動時ノイズの除去と遅延(0.5秒前後)を与え、シュミットトリガを通してヒステリンス特性とし、トランジスタを介してリレーを動かします。
USBポートの電源は、ケースからの出力にキーストーンモジュールを使っていますので、バラシてケーブルを割り込ませます。
懸念は、このオフ時間でUSBハブが再起動リセットされるかです。3-4秒はあるので行けると思いますが、確実なリセットになるかは試さないとわかりません。
#RaspberryPi
GPIOに繋げたテスト用のLEDを目視した範囲なので確実とは言えませんが、act_ledはカーネルの動作中を表す信号として使えそうです。
pwr_ledとact_ledの挙動ですが、通電直後(再起動では一度終了した時)はデフォルト設定に戻っており電源パイロットとSDカードのアクセスランプとなっていますが、カーネルが起動して各種ドライバが読み込まれる前にcmdline.txtに書かれた設定がされます。GPIOも通電直後は初期化されており、Hi-ZかGNDになっているようでHは出力しません。
つまり、act_ledをdefault-onにしてGPIOにオーバーライトすればカーネルが起動している時に点灯するLED、すなわちカーネルが起動していることを表す信号となるようです。
電源が入った直後は端子の状態は不安定ですからワンショットが出るかもしれませんけどね。
ならば、この信号を受けてUSBポートの電源を入り切りするようにすればいい。
GPIOの信号を抵抗とコンデンサの時定数回路で受けて起動時ノイズの除去と遅延(0.5秒前後)を与え、シュミットトリガを通してヒステリンス特性とし、トランジスタを介してリレーを動かします。
USBポートの電源は、ケースからの出力にキーストーンモジュールを使っていますので、バラシてケーブルを割り込ませます。
懸念は、このオフ時間でUSBハブが再起動リセットされるかです。3-4秒はあるので行けると思いますが、確実なリセットになるかは試さないとわかりません。
#RaspberryPi