https://github.com/gh6141/QtMp3Srt.git
OpenAIのwhisperで音声認識処理すると.srtというファイルができますが。これと音声ファイル(mp3)を一緒のフォルダに置いて使えるようにしてみました。ちょうど、映画の字幕のような感じで表示できます。-smallのオプションで、処理したものだと、たまに認識が間違って、若干ずれることもありますが、日本語以外等でいろいろ使えそうです。
https://github.com/gh6141/QtMp3Srt.git
OpenAIのwhisperで音声認識処理すると.srtというファイルができますが。これと音声ファイル(mp3)を一緒のフォルダに置いて使えるようにしてみました。ちょうど、映画の字幕のような感じで表示できます。-smallのオプションで、処理したものだと、たまに認識が間違って、若干ずれることもありますが、日本語以外等でいろいろ使えそうです。
ewp32-c3を表示用に使ってみた、センサーからのデータを蓄積しているraspiからWIFIで読み出すようにした。
EEPROMで、どの番号まで再生したか、不揮発メモリに記録できるようにした。フォルダは01のみとした。以前のフォルダ番号用スイッチを制御用(1回タッチで番号を進める、2回タッチで番号を減らす)とし、ファイル番号用スイッチは、1回目の連続タッチで10の位、2回目の連続タッチで1の位を指定して入力できるようにした。(ただし、10未満は、1回目のタッチを10回タッチすると0になるようにした。)
dfPlayer、しかもPIC利用だとやはり、かなり制限があって、コーディングも難しかった。
最近は、音声認識が、無料でしかもローカル実行で正確に認識できるのには驚きました。コマンドラインで実行できるので、アプリの中で活用できてとても便利だと思います。
バッチファイルです。途中のパスを通すところは、ffmpegのあるパスです。
radio2text.bat
--output_format srt で時間付き字幕Qtでは、行数が多くなると最下行へのスクロールが難しい仕様?のようです。
実際のWigetの行サイズとかもあり、すべてを反映して正確なスクロール量を割り出すのが難しいという問題もある?ちょうど、エクセルなどで印刷イメージと編集画面で微妙にずれたりするのと同じ困難さかもしれませんが。
こういうときは、泥臭い方法で、実際に繰り返し試しながらスクロール量を割り出すしかないのかもしれません。その旨、ChatGPTに伝えたところ、以下のコードを作ってくれました。なんとか、うまくいきました。
WebGLで縦列駐車のシミュレーションできるようにしてみた。実車の運転前に、シミュレーションでコツをつかんでおくと役立つかもしれません。
https://github.com/gh6141/Parking.git(source code)
https://gh6141.github.io/WebGL-Parking/(シミュレーション)
釣り竿アンテナ(カーボン)に銅箔テープを貼ったものをアンテナとして使っていましたが、接続部がどうしても接触不良起こしやすく、SWRも安定しにくくなってきたので、試しに金属クリップを使ったら比較的調子がよくなり59+レポートもらえるようになりました。境目よりなるべくぎりぎり上のほうをはさむとうまくいくようです。
文庫本で関数解析が読めるということで購入してみました。早速、壁にぶつかりましたが。
P40 定理2.2で、(x,y)=||(x+y)/2||^2-||(x-y)/2||^2+i||(x+iy)/2||^2-i||(x-iy)/2||^2の定義で(x,y)=(y,x)の共役 が言えるのかどうか? ||x+y||^2+||x-y||^2=2||x||^2+2||y||^2を使うとうまくできるようです。
注意が必要なのは、(x,y)=||(x+y)/2||^2-||(x-y)/2||^2+i||(x+iy)/2||^2-i||(x-iy)/2||^2の共役をとるとき、|| ||のなかにあるiの符号は変えてはいけないということ?うっかりけてしまいそうですが、外側のiは符号変えてもいいですが、ここがたぶん注意点?
基本的なことを忘れていて思い出すの時間はかかりましたが、以前作りかけていたものを少しだけ手を加えてみました。文字式の計算を動物キャラクタで、できないか、試しに作ってみたものです。導入等に使えないかと。 使う機会もないので、まだ中途半端の状態ですが。同類項=同じ種類の動物を重ねて計算します。+ーゼロだと爆発して消えるようにしています。
https://github.com/gh6141/WebGL_MathBoxSrc2.git(code)
https://gh6141.github.io/WebGL_mathBox/(WebGL)
こういうゲームでも誰か作ってくれれば、文字式や方程式の抽象概念も多少は理解促進の助けになるのでないかと思っていますが。
キャパシティのカウントに、温度影響などあれば、補正の可能性もあるかと思い、温度等もロギングすることにしてみた。ついでも、気圧、湿度も計測できるセンサが安く入手できたのでつないでみた。ロギングはbottleサーバで行い、PCから確認できるようにした。esp32のコードもそれに合わせて書き換えた。
補足:容量カウントのピンはGPIO4からノイズが少なめのGPIO12に変更した。また、容量カウントは、WIFIやBME280の起動前に行い、ノイズの影響を除くようにコードを修正。シリアル通信も同様の理由で削除(2025.12.5)(ChatGPTのよると、GPIO12,GPIO33,GPIO32,GPIO13,GPIO15の順でノイズが少ないらしい)
よく使いそうな機能なので、ChatGPTといろいろやりとりしながら、BugFixして完成したものです。グリッド内のボタンをDrag&Dropで動かせるので、対応関係の設定などに利用すると便利そうです。
DraggableButton.h
DraggableGridWidget.h
DraggableGridWidget.cpp
mainwindow内のダイアログ起動コード
ChatGPTに聞いてみたところ、modelを切り替えながら処理する場合どうするか、だいぶ複雑にはなる。あまり見慣れないコードだけど、これで動くようになる。(家計簿で、口座間移動処理データを同時に2つ削除するときのslotの部分)
Qtで、最近ほとんど使ってなかったポインタや参照をC++で久しぶりに使うことになったが、ほとんど忘れていた。少し復習してみた。
家計簿、スケジューラ、日記は、これまで.Net使った自作アプリを使ってきたが、今後Linuxでも使えるようにするため、すべてQtで作り変えることにした。スケジューラと日記はほぼ完成する。日記は、SQlite保存なので、暗号化したテキストで保存することにした。.NETに比べると復号が入っても検索処理も圧倒的に早くなっている。(.NETだと遅すぎて暗号処理を諦めていたけれど、Qtはその点心配はないようだ。)
昨今は、C++に変わり、Rustあたりが速度を要求されるアプリに使われつつあるということだけれど、QtでC++も悪くないように思う。
CMakeList.txtに以下3行追加必要
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Sql)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Sql)
target_link_libraries(QtDiary PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql)
error: Your local changes to the following files would be overwritten by merge: CMakeLists.txt.user Please commit your changes or stash them before you merge. Aborting
この場合、git stash > git pull > git stash pop を試してみる
CMakeLists.txt.user は通常 IDE のユーザー固有設定ファイルなので、プロジェクトによってはバージョン管理に含めないこともあるとか(.gitignore に追加したほうがいい)
スマホ側設定:「設定 → 開発者向けオプション」を有効化→ 「ビルド番号」を7回タップして出ます。「USBデバッグ」をオンにする システムの開発者向けオプションの設定で
(C:\Users\<ユーザー名>\AppData\Local\Android\Sdk\platform-tools\adb.exeのパスも通しておく必要あり、コントロールパネルあたりから) |
マルチプラットフォーム言語のため、デプロイ方法は少し手間がかかる。
mingwの形式でビルドした場合
Release ビルドの exe があるディレクトリに移動して、
cd C:\Users\****\kjog\build\Desktop_Qt_6_9_3_MinGW_64_bit-Release
windeployqt.exe のフルパスを指定して実行する必要がある。
"C:\Qt\6.9.3\mingw_64\bin\windeployqt.exe" kjog.exe
以前つくったタイマーのコード修正してみた。すでにPICを基板に半田づけしてしまったが、PicKITに合わせてコネクタをつけてPICにエナメル線で配線しなんとか、書き込みできるようにしてみた。コードを少し変更して、時間ずれも調整してみた。1割ほど時間が短いので、11/10をかけてみた。だいぶ正確になる。
静電気測定ということで、PICのCPSを内臓クロックで使ってみたが、温度の影響のためか、変動が大きい気がしたので、12MHzのXtalを使ってみた。ヤフオクで、10pfコンデンサと一緒に購入。
C#とは、コントロール(Widget)の配置の仕方が違うので少しとまどいました。
別ウインドウに表示はしやすいのですが、メインウインドウ内に配置するには、レイアウトの指定が必要なようです。
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
table = new KakeiboTable(); // 親は addWidget() で設定されるので不要
ui->centralwidget->layout()->addWidget(table);
}
上記コードだけでは、エラーになります。centralwidgetにテーブルビューを配置したい場合は、cetnralwidgetをオブジェクトインスペクタで選択したら、メニュー>フォームエディタから、レイアウトの方法を指定する必要がありました。ここらへんは、Qt独特のところで慣れが必要なところかもしれません。
github経由で、winでもlinuxでもコードを開発できるようにするには
Flatpakでインストールした場合、サンドボックス化されているため、ショートカットを自分で作成することになるようです。
Flatpak ショートカット作成の基本フロー:
①flatpak listでApplication ID を確認 例: io.qt.QtCreator
②#!/bin/bash
flatpak run io.qt.QtCreator を作成し、実行権限不可
③デスクトップショートカット作成ならば .desktop ファイルの Exec= にスクリプトや flatpak run <アプリID> を指定
Exec=flatpak run io.qt.QtCreator
手軽にAMラジオをIC-705で聞けないか、フェライトバーアンテナを試してみた。今、入手が難しくなっているらしいけれど、ヤフオクでラジオから取り外したと思われるものをたまたま見つけて290円で落札させていただいた。1次側が670uHほどだったので、共振周波数から容量を計算すると中波なら40pF前後を並列につなぐ必要がある。たまたま半固定の小型バリコンがあったので、2個並列でつないで、2次側を無線機のアンテナ側につなぐ。窓のそばで位置やバリコンを調整すると、59+20dBと、十分な感度。意外とフェライトバーアンテナのゲインは高いようだ。
i5-520Mは第一世代で、Win11も23H2までは、SSD化や4GBメモリで騙しだましつかってきましたが、さすがに25H2は、かなり無理がありそうだったので、諦めてLinuxを試すことに。ところが、標準インストールだとなかなかうまくいきません。しばらくして、原因がつかめました。
・BIOSでUSBメモリ選択では、読み取れずUSB HDD選択で読み取れました。(DVDでは遅すぎて無理があります。USBメモリを使いましたが、なぜかUSB HDDを選択しないとだめでした。)
・標準インストールだと最近のLinuxはほとんどGPTのため、うまくいきません。事前にMBR(msdos)に変更が必要です。ここが一番のネックのようです。
Linux Mint ,MX Linuxあたりに候補をしぼりましたが、最終的にMint xfceにしてみました。Windowsと配置が似ていて使いやすい感じがします。注意点としてはGPartedであらかじめ、MBRのパーティション(/,swap./home等)を作っておき、Mintのインストーラでは、新規インストールせずに、カスタマイズのほうを選択して、マウント処理とブート領域設定していきます。途中、警告らしきメッセージも出ますが、無視して進めたところ、うまくいきました。第一世代のCPUは想定していないようですが、しばらくは、PCを無駄にせず、動画視聴等に活用できそうです。
ノートA573などの第3世代でも、工夫次第でぎりぎり25H2が入るようです。一回目起動しなくなったので、なんとかならないかとChatGPTの助けを借りて、うまくいきました。
H97M-PLUS i5-4460 も使っていますが、こちらも同様な方法でうまくいきました。
Bios(F2キー断続押しで起動するとOk)セキュアブートをoffとするといいようです。そのためには、A573のBIOSでは一時的に管理者パスワード入れないと編集できないようでした。
18MHzバンドで久しぶりDXが開けていた。ゼヤ(Asiatic Russia)の局長さんとFT8で交信できた。5Wの室内アンテナで届いたので、コンディションがよかったようだ。
FT8でオンエアしている局の密度をみると、やはり、欧州、日本、北米が目立っているのがわかる。
型の変換を細かく追って、整合性を確認はしてみましたが、けっこう込み入っていて、それに気を取られると全体の構造がわかりにくいので、おおまかにとらえることも大事かと思いました。runSalesTという関数が、再帰を使って、レシピを読み取っていく構造になっているようです。
その際、ポイントが :>>=という関数のようです。 (ひとつの命令):>>= (それに続く残りの命令) この残りの命令である右辺がkとなっていて、 これが次のrunSalesTへ再帰で渡される構造になっているようです。そして、次のrunSalesTで、また先頭の(ひとつの命令)が取り出され、それに応じて枝分かれした処理が行われ、...これを繰り返していく。
ちょうど、リストを順に処理していく再帰と同じ構造のようです。func( [a:k])=(何らかの処理 func(k)) の形。
簡単なoperational使ったDSLのコードをChatGPTに頼んで作ってもらいました。
sample.hs