なんかやったっけ。わからん。
土曜日は昼過ぎに歯医者行ってついでに買い物に出掛けた。ちまちま工具とか買っといたりしたけど、帰ってからやっぱこれも欲しかったなというのを見つけたりした。木目フィニッシュほしい。 夜に30MFのオプションパチ組みしたくらい。なぜかやけに時間かかった。
日曜日は昼過ぎに起きて、ごはん食べて30MFのファイターパチ組みして寝たくらい。 そんなに時間はかからんかったけどもアーマー2種とファイターオプションも組んだのでトータルではけっこうかかったか。 終わったら寝た。
30MFはイベントやってるのでいい感じの組んで上げたいけども、他にもいろいろやりたいことあるし平日は働いてるだけで終わるしで時間がないなあ。
なんもやってない。そうかな?そうかも。
木曜日は休みにしてちょっと買い物行ってた。塗料買ったくらいだけども。 池袋で巨大ロボットの群像とかなんとかのやってたのも気になったけど、事前情報的に微妙かなー?と思ってスルーしちゃった。
金色塗料として水性ホビーカラーのスーパーファインゴールドを試してみたがおやおやいい色じゃないですか。粒子感が少ないながらも結構派手で金色!て感じ。 隠蔽力もそこそこあって使いやすい。表札はもうこれでいいやで吹いちゃった。 お値段は通常の水性ホビーカラーの倍はするものの実売だと1本400円はしないのでまあ高いってほどではないかな。 ファレホのメタルカラーは値上げされてもう1100円以上するのでびっくりしちゃった。まあこっちは32mlとか入ってるので値段的には同じくらいだけども。 ファレホのメタルカラーは金色が緑っぽいのしかないので赤っぽい派手な金で水性で使いやすいものとして水性ホビーカラーのスーパーファインゴールドはいい感じだ。 水性ホビーカラーちょっと臭いのが気になるところだが……。
三連休はなんもせず終わった。土曜日はピアキャス見てたら俺もなんかゲームやりてえなって昼頃からルルアのアトリエ始めたら一日終わってた。日曜日は遅くに起きてぼけっとしてたら夕方頃に眠くなって、ちょっと仮眠して起きたら朝4時。寝直したら12時。20時間くらい寝てた。月曜日は諦めてちょっとゲームやって終わった。なんもしてないね。
年始は本読んでたくらいで終わった。まあ本読んだだけよかったでしょう。
夏頃出た30MFをやっと組み始めた。リーベルパラディンはちょっと前だけど、ローザンホーリーナイトは今年のプラモ初め。 どっちもパチ組みですけど。
30MFかっこいいねえ。でかくてがっしりした体型ってだけでかっこいいわ。結構自由に動くわりに作りはシンプルで簡単に作れるし、素体状態でもべつにスカスカとかいうわけでもないのがすごい。 素体では肩あたりはちょっと隙間あるなーと感じますが。
でかいといっても実際30MSのファル=ファリーナと比べると頭半分くらいの違いだったので、今度出る30MSのセスティエと同じくらい……?セスティエでけえな。 まあ太さもあるんででかいと感じるんでしょう。
クラスアップアーマーは一通り買ってあるんだけども、リーベルホーリーナイトは金色トゲトゲでいやこれはどうなのよと思ったのでリーベルパラディンに。 グレーなのでいささか地味な感じもありますが、白は派手めなのでこのくらいが落ち着いてていいかもね。かっこいい。
ローザンナイトはあとから組んだので、同じパラディンもなんだしホーリーナイトにするかと。こっちもトゲトゲしいのはどうなのよと組む前は思ったけど組んだらかっこいいねえ。 ローザン帝国側は色も暗めなので攻撃的なシルエットで派手にするのいいですね。角とかのデザイン付きがちだし。 悪っぽい(悪ではない)と言われてたけど悪というよりはオラついた感じすかね。設定的には過酷な土地にあるっぽいのでそりゃオラつきもするわ。
まだファイターがやっと出てきたところで(組んでないし)組み替えて遊ぶのはまだちょっと悩ましいなというところあるけども、これきっと普通に色塗るだけでだいぶ楽しそうで困る。細かく塗り分けて傷とかつけて汚したりしたら絶対かっこいいじゃないですかー!時間いくらあっても足りねーよ!
30MM使ってモンスター的なのも作りたいね。夢が広がるねえ。時間ないねえ。
BUSTER DOLLの色塗りをするのにいきなり塗るわけにもいかんのでどこをどんな色にするか検討したい。 今までは写真を線画抽出して頑張って塗ってたんだけど、おおまかにパーツ単位にで簡単に塗り分けできるようなツールがあるとうれしいなあと思ってた。
画像のセグメンテーションてのを使えばできるぽいねというのは調べてあったんだが、もうちょい具体的に調べてみたところSegment Anythingでだいたい欲しいのができそうな雰囲気。 デモサイトで試してみたところこんな感じになった。
写真上でパーツにマウスカーソルを当てるとだいたいいい感じにハイライトしてくれてるのがわかる。 あと自動でパーツ分けさせると次のようになった。
多少気になるところはあるけどおおむね欲しい感じで分けられてるしこれがボタン一発ですぐ出てくるのはすごい。 なおSAM2てのが出てるようだが、そちらのデモはビデオしか対応してないようなのですぐには試せなかった。 ただONNXに変換とかもできそうもないしSAMで十分な感じもあるんで2の必要はないかな。
このデモサイトだけだとちょっと物足りないが、ONNXにモデルの書き出しもできるようなので自分でアプリ作るのもなんとかなりそう。 とはいえアプリに仕立てるとなるとまあまあ手間はかかるしそんな時間ないんだけども……。
おおむねなんもしてない……かも?
27日で仕事納めだったんだがそこまでは普通に働いてた。納会やってる隣で普通に働いてたりしたんだがさすがにやる気が削がれるのと疲れによって19時で帰ったりはしたが。 土曜日はちょっと買い物に出掛けて余計なもの買ったり年末年始で読みたい本を図書館で借りてきたり。28日が図書館最終日だったので。 そのあと18時からメガミの配信あるんでそれを見ながら自分も配信してパラディンをパチ組みしてた。
29日は部屋掃除とかしたかったんだが疲れが爆発して動けん。めちゃくちゃ寝て暗くなりかけたころに起きはしたんだがなんか頭いてえ……。 熱とかはないし他はちょっと気分悪いくらいなのでそんなにやばそうではないが、かといって動けもしないのでふとんで転がっていた。
30日は本来なら朝から帰省する予定だったがまだ頭いたいしあんまり眠れてもないしで無理無理。まあ長引きそうな感じはしないので31日に延期しましょう。 新幹線の変更しようとしたら早い時間は埋まってるが夕方以降は余裕だったので31日夜に変更しといた。 昼過ぎには起き上がって動けるれるくらいにはなってたので軽く家事はしてて、夜にはまだ少し怪しいところはあるものの元気だったのでタンクをパチ組みしてた。
31日はもうだいたい元気になってたのでちょっと片付けてたけどさすがに時間なかったね。片付けはそこそこに準備して出発、今新幹線乗ってるところ。 18時くらいに東京発のに乗ったんだが平日より人少ないんじゃねえのってくらい空いてたわ。 頭痛はかすかにというくらいだけどおなかの調子が怪しいのは気になる。夏に痛くなったのと同じところがちょっと痛いんだが、これどうしようもねえんだよなあ。
話はかわって表札、というかドアに貼ってある部屋番号のシールが剥がれちゃったんだけど、なんか似たようなの売ってるのが見つからなかったのでアクリルの数字を買ってきて自作することにした。 で金色塗ろうとしてミッションモデルズペイントのMMC-003ゴールドを使ってみようと試してみたんだがちょっと思ったのと違うな……。
MMCのクロームはピカピカになる的なのが書いてあったんで金もそうなんだろうと思ったらだいぶ粒子がでかいギラギラした金だった。粒子がでかいせいもあってか隠蔽力は低くて何度も吹かないとだいぶ暗い。下地は黒のところに吹いたけど黄色とかもっと明るい色の方がいいかも。写真だとだいぶ暗いけど肉眼だともうちょっとマシ。 一本1800円とかするだいぶお高い塗料だったんだけども、つかいどころは難しいなあ。そんなにギラギラな金が欲しいことあんまないし、隠蔽力低かったり低圧で薄く何度も吹けとか指定があってめんどくさいしなにより高い。ギラつかせるなら他の金の上にVGゴールドとかの方がお手軽かな。
少なくとも表札にこの色使う気は起きねえな。もうちょい落ち着いたのにしたい。 水性ホビーカラーのスーパーファインゴールドもよさそうなので買ってきてみたがまだ試せていない。 ファレホメタルカラーのゴールドはお手軽なんだけど緑っぽいのしかないんだよなあ。これの赤っぽいのもあれば嬉しいんだけども。 しかし筆塗りアクリジョンのアンティークゴールドを適当に筆塗りするだけでもいいんじゃねえのという考えが出てきてしまった。うーんそれはそうかも。 まあスーパーファインゴールド様子見てから考えますかね。年内には作りたかったが迷ってたら時間なかったね。
メガミの年末の配信見ながらなんか組むか~ということでせっかくなので積んであったBUSTER DOLLパラディンを組んで、そのあとパラディン組んだからタンクも年内に組んどくか~ということでタンクも組んだ。まだパチ組み。
パラディンはパーツの封入ミスがあってノーパン。 気付いた時はまじかよやる気失せた~と思ったんだが、パンツは全然無くても作れるのに気付いたので普通に進めることができた。 覗き込まないと見えないし、覗き込んだだけで単に関節構造見えるだけだもんね……。 ただガンナーの時もネクタイが入ってないってミスあってBUSTER DOLLは封入ミス多いよ~。 いろいろ使い回せるようにランナーを細かく分けた弊害でしょうね。
ガンナー・ナイトはちょっと物足りない感じでしたが上位のこいつらはフル装備でいい感じですね。 パラディンの頭の角はでかすぎてなんとかならんかという感じあるけどもなんとかならんですかね。簡単に加工していい感じになるならも考えようか。 ちょっと色は好みじゃないところあるんで塗り変えたいところ。年明けたら色塗りやっていきましょうかね。
今年はBUSTER DOLLで始まりBUSTER DOLLで終わりだな~と思ってたんだが、あらためて確認したら年初は3月くらいまで皇巫レガリアの色塗りなどしてましたね。BUSTER DOLL作り始めたの4月だったわ。あらそうでしたか。そもそも発売が1月とかだったわ。
土曜日に新型コロナワクチンを打ってしばらく副反応で死んでた。いやそんなにしんどくはなかったが。
10月だかに予約したワクチン接種が7日だったので打ってきた。 集団接種とかじゃなくて普通に病院でなので問診とか待つのに時間かかったが、それでも1時間はかからなかったのでよかったか。16000円はでかいが。
打ってから副反応でしんどくなるかと思ったが、土曜日は結構元気で夜中までデカール貼りやってたりしてた。 日曜は全身軽い関節痛みたいな感じでだるい。頭痛とかはなくてよかったが夕方くらいまでふとんから動けず、動いてからはごはん食べてあとゲームやってたくらいで終わった。 月曜は疲れてるけどももう痛いとかもないしなーで会社行ったらなんだかだるくて全然仕事集中できなーい。 今日はどうだろうね。眠いし疲れてるけどまあ気分は悪くないので働けるんじゃないでしょうか。
ゲームはもうずっとやってたリディ&スールのアトリエDXをやっと終わらせた。 たまーにしかやらんのでプレイ時間は大したことないのにもう年単位でやってた気がする。 普通のエンディングはだいぶ前に見てたんだが、攻略見ながらトゥルーエンドくらい見とくべと思ったら条件となってるキャライベントが全然発生しなくて困っていた。 友好度もそんな低くもないんだけどなーと思いつつ倒せねえクソボスで死にまくってたりしたが、適当にアイテムを作ってみてたら急にイベントが発生するようになった。 アイテム作成種類数が発生条件にあったのか?使わなさそうなアイテムは作ってなかったし、それでも錬金レベルはカンストしてたから作るモチベーションなかったもんなあ。 あとはもうサクサク進んですぐ終わったわ。
ゲームとしては普通感ありましたね。そんなめんどくさいこともないけども特に強い部分もない感じ。 絵の中マップと外マップがあるのいいかもと思ったけど、外マップはほぼストーリーに関係ないのが残念だった。 外マップは移動に時間かかるけど中マップは一瞬で行けるのもあってあんまり外マップ行く気起きないなと。 まあ時間制限あってないようなものなので気にする必要もないんですけど、バトルミックス用のアイテムは絵の中でしか手に入らないから余計に絵の中でいいじゃんと。 なんかもっと差別化されてたらうれしかったですね。 フィリスがクソデカマップを延々歩かされるという良くも悪くも尖ってたのに比べるとごくごく普通という印象だ。
あとPS5のアーケードスティックを買った。今までのはPS4用でPS5のゲームではなぜだか使わせてもらえないんだが1、STGの移植なんかが出てきてるのでアーケードスティックは欲しいなあと。 しかしPS5用のはクソデカイ&高いのばっかりでちっちゃくて安いのはHORIのミニのしかない。 HORIのちっこいのはタッチパッドボタンが無いんだが、STGの移植物はタッチパッドボタンを使うのが多くて無いと結構不便。 今まで使ってたやつもタッチパッドボタン無くて不便に感じていたのでどうせ買うならそこをなんとか解決したいねえ。
でまあAccessコントローラー買うかどうかなどいろいろ検討してたんだが、PS5のアクセシビリティ設定に2つのコントローラーを同時に一人分として使うのがあるのに気付いた。PS5対応コントローラーのみではあるがこれならミニアーケードスティックとDualSenseを同時に使えるってわけで、じゃあボタン足りない問題は解決じゃん。ということでHORIのミニアーケードスティックを買って解決した。お値段も7000円と昨今のコントローラーとしてはまだ安い方なので助かった。 スティックとかボタンがしょぼいのは覚悟の上だったので最悪基板ひっぺがして今まで使ってたもうちょいマシなやつに付けかえようかとも考えていたが、いざ触ってみるとそこまで悪くもなさそうなのでしばらく使ってみよう。なんかボタンが重くてやけにストローク深いのはすこし気になるが、STGなんでそんなボタンの反応速度が~とかいう感じでもないので良いでしょう。重いのは疲れるかもだけど。 ただ一番の問題はゲームやってる時間そんなに無いよねっていう。
おそらくカジュアルなハードウェアチートみたいなの対策だろうが、そんなんで善良な一般ユーザーが割りを食うのは悲しい。 ↩
まだ咳が出る。もう少しで治りそうで治らん。ぐぬぬぬ。
土日もなんもできんかったなあ。いやなんかやったような気もする。CD取り込みとか。
nodejsでReazonSpeechで文字起こしができるのは確認できてたのでunacastに入れたい。
とりあえず一番こわいのはElectronで動くunacastでsherpa-onnx-nodeが読み込めるかだが、やってみたらすんなり読み込めたっぽい。じゃああとは組み込んでみよう。
マイクはレンダラープロセスで入力してバックエンドにPCMデータを送りたいが、マイク入力からPCMデータを取得するのが意外と大変。WebAudioてので取得するんだがScriptNodeてのを使おうとするとそれはDepricatedだからやめとけとめちゃくちゃ言われる。しかし代替手段がWorkerなので古いElectronで動くかわからんぞ。ということでまあどうせ古いしブラウザで動かすわけじゃないしScriptNode使おう。
入力はなんとかできたのでバックエンド側にそのまま渡して音声認識させる。認識させる部分は以前やったサンプルと同じ。やってみると一瞬「あ」とかなんとかは認識されるんだがそれっきりになってしまう。なんでだー?
入力のデータがおかしそうなのでじゃあサンプリング周波数が違う?getUserMediaの時に16kHzを指定してるんだが、これはヒントでしかないので結局デバイスの自然なサンプリング周波数を返してきてしまい48kHzになっている。絶対16kHzにしろやと指定もできるんだが、そんなデバイスねえよと怒られてしまう。役に立たねえな。これ別途ダウンサンプルしないといけないか。
でダウンサンプルの方法を探したんだが簡単にはなさそうだ。JavaScriptで書く方法もあるがそれなりのデータ量なのでちょっと不安。sherpa-onnx自体には周波数変換してくれる機能があるがVADにはその機能がなぜか付いてなくて、周波数変換単体の機能もあるがnodejs向けのライブラリには公開されていない。残念すぎる。
いろいろ探してたらWebAudioのOfflineAudioContextを使って変換する方法が見つかった。48kHzのPCMを受け取ってOfflineAudioContextで16kHzにレンダリングするとのこと。うーん、まあ確かにできそうだけどもオーバーヘッド大丈夫?遅くない? まあとりあえずやってみるかで試してみたが特に気になることもなく動いた。ほんとにいいんかという気もしなくはないが、今のところ問題なく動くしこれでいいか。 で、無事音声認識も行われるようになった。
あとはexe作るまでは普通にいったんだが全然起動しない。なんか拡張がパスにないぞと言われる。これのdllがどうやって入ってきたのかよくわかってないが勝手にコピってくれたりするわけじゃないのか。必要そうなdllだのをコピってきたらウィンドウは出たんだが、なぜかすぐ落ちてしまう。こっちはなんもログ出てこないのでわからんなあ。 ひとまずはexe無しでも手元で動かす分には問題ないのでしばらく使ってみよう。
で、日曜の夜に一度使ってみたんだが、音声認識はバッチリだった。今まで使ってたAzureの有料Speech to textより精度良く感じるくらい。まあAzureのはリアルタイム音声認識な一方で今回のReazonSpeechはしゃべったフレーズだけ切り出してあとから音声認識させると方式が違うので直接比較してよいものでもないんだろう。しかし配信時にしゃべったログを表示させておきたいという程度のリアルタイム性であれば十分だった。
しかしexe化以外は上手くいったんだと思ってたものの、なぜかVOICEVOXが読み込めなくなっていた。読み上げにVOICEVOX Coreを使ってるので同じプロセスにdllを読み込んでるんだが、それが読み込めないとかで読み上げができなくなっていた。 なんだろなーと思ったが、そういやVOICEVOXもONNX Runtime使ってるんだった。おそらくsherpa-onnxが使うONNX Runtimeと競合して読み込み失敗してんだなこりゃ。困ったね~。 ひとまず読み上げは他の使うことで回避したけどどうしたもんだろう。
VOICEVOXはCoreを直接読み込むんじゃなくて別プロセスのEngineを呼び出す方法もある。しかしこれだと毎度別にVOICEVOXを起動しとかないといけないのでめんどくさいねえ。 sherpa-onnxの方を別プロセスにする手もあるんだが、その実行ファイルどこでどうやってビルドするのめんどくさい。 あとはsherpa-onnxは今回使ってたsherpa-onnx-nodeの他にWASM版のsherpa-onnxというのがある。これはおそらくCPUで1スレッドしか使えないかわりに全部WASMになってるのでバイナリとか考えずに使えるのではなかろうか。 今もどっちにしろCPUしか使えてないしCPUで十分足りてるし、バイナリの問題がなくなるならexe化しても自然に動くはず。 ただ問題はnodejsの18以上が必要とのことで、今使ってる古いnodejsおよびElectronをアップグレードしないといけない。うーんつらい。
でもほんと古いnodejsとElectronを使い続けるのつらすぎるし普通にアップグレードはした方がいいよなあ。やるか~。そのうち。
まだ咳が出る。もう少しで治りそうってところまではやっと来たが、また寒くなってきたので気をつけないと。
土日はまだ鼻水も咳も出てたので家でおとなしくしてた。あとやけに眠いのでひたすら寝てた。日曜にさすがに何もしないのはなということで洗濯と買い物だけはしてきたが。
M3のCD取り込みがまだ出来てない。取り込んだCDはそのままケースに入れとくと大変なのでファイルに入れ直してるんだけども、ファイルを切らしていて休日は出掛けるのもおっくうな体調だし平日は店開いてる時間に帰らないしでいつまでも取り込みできず。日曜にやっと買ってきたんだけど時間が遅かったのでそのまますぐ寝た。 まあ全然急ぎの作業ではないんですけどね。
bootstrapを2から5にバージョンアップしたんだがマークアップも直さないといけないのでつらい。
めんどくさいのでこういう時こそGitHub Copilot Chatにやってもらおう!ということでこのbootstrap2用のHTMLコードをbootstrap5用に直してください、て言ったらやってくれた。すげえ! 完璧ではないもののだめなところだけ直していけばよさそうね。
と思ったのも束の間、100行ちょいくらいのファイルは問題なくやってくれたんだが、より長いファイルになったら100行ちょっとくらいで長すぎなので打ち切りましたと諦めてしまった。そんな~。 じゃあ続きを出力してくださいと言ったら、プログラミング関連の質問しか受け付けませんとつれないお返事。文脈あんま保持してくれんのか? 130行目以降を変換してくださいと言ったら上手くいく場合もあったが、やっぱり長いファイルだと全然だめだ。 何を言っても最初から同じ出力をしてくるようになったり(しかも同じところで打ち切られる)、全然関係ない捏造コードを自信満々で出してきたりと不安定すぎる。 なんとか細切れにしたコードを渡していけばできるのかもしれないがめんどくせえ! 手で変換するのめんどくさいなあと思って任せたいのに、なんでAIをなだめすかして細切れのコード片をあっちこっちコピーしまくるとかめんどくさい作業せねばならんのだ。 しかも完璧に変換してくれるわけでもないのにさ。 はいはいわかったもういいよ俺が手でやるよ。
ところでbootstrap5ではもう既に標準のアイコンが含まれなくなっており、パッケージとしては別にbootstrap iconsというのが配布されているようだ。 しかしこいつはnugetのパッケージになくてちょっと困った。bootstrap本体をパッケージにするならこれもないと困らん? なんかBlazor用とかのASP.NETから使うパッケージみたいなのは結構あるけどそういうのでなく普通にリソースだけ欲しいんだが。
ASP.NET Coreプロジェクトではクライアント用のパッケージ管理にLibManというのが使えるようになっているようだけど、これ使った方がいいのかなあ? ドキュメント見る感じビルド時にリストアしてくれる機能はべつにASP.NET Coreでなくても使えそう。試しにやってみるとそれっぽく動いてくれたぞ。 ただ設定ファイルの書き方がよくわからん。なんかJSON Schemaを見ろとは書かれているがスキーマ見てもどんな形にすればいいかはわかっても値の意味がわからないだろがい! オープンソースではあるのでコードを見ながら設定ファイルを書いてみるもののfileMappingsて書いたら設定ファイルバージョン3.0じゃないと使えないよって言われるし、設定ファイルバージョン3.0て書いたらバージョン1.0しか対応してないよって言われる……? どうもLibManの配布されてるバイナリは2022年で止まっていて、新しい機能は使えないみたい。なにこれほんとに使って今後も大丈夫なやつ?やめとくか。
LibManでも結局CDNから落としてくるならそもそもCDNへのリンクそのまま書いちゃえばいいかもう。 オフラインでも最低限表示できるようにと必要なリソースはローカルに含めるようにしていたんだが、常識的にはインターネット使えないCDNにつながらない環境でPeerCastStation動かしたいことって無いもんね。 ということで諸々一気に解決させた。 sassとかでカスタマイズしたいよ~とかなると話は変わってくるんだが、そういうことする気は今のところないしね。
あとはせっせとマークアップ直し。さすがに2から5だと機能も整理されたり追加されたり、そのまま置き換えるだけじゃなくてより良く書き直すのもできるしやっぱ手で直すのは必要だわな。JavaScriptのAPI変更もあるのでそういうところはどうしても直さないと動かん。
まだちょっとかかりそう。でも今月中にはだいたい終わるかな。
寒くなったせいか早速風邪引いた。
木曜日に喉痛くなったなと思ったら夜にはふとんにもぐって暖房つけてても寒気がひどくて一睡もできない状況に。 金曜日はさすがに休みにして土日もほぼ寝転んでいた。寒気はすぐ落ち着いたが喉の痛みがなかなか治らず。
月曜は喉の痛みも落ち着いてきたしまあまあ大丈夫そうになったので出社したが、夕方あたりから結構元気になったのと引き換えに今度は鼻水と痰が絡んで咳が出るようになっちゃった。 今日休みにしたんだが(プラモの予約戦争があるため)、おとなしくしててもなかなかよくなりませんね。
しかし風邪引いて寝てたかと思いきや意外と作業が進んでる不思議。さすがにプラモ作りはしてないがプログラムが進む。 あったかくして座ってるだけだから少しくらい体調悪くてもいけるんだよね。仕事は無駄に出社させられるからきついんだが。
なおプラモ戦争は30MMと30MFがすんなり予約完了。30MSはオプションの一部だけ予約できたが、フロートユニットとエイダーコスチュームと素体2体は予約できず。キャンセル待ちと抽選に賭けよう。素体はまあいいんだけどオプションは買えないやつはほんと買いづらいから予約できてほしいんだけどな~。 コスチュームはエイダーだけなんで買えねんだ思ったけど、そっかドスケベピンクナース服だから人気なのか……。
PeerCastStationは大幅な整理が時間かかりそうなので、それを終わらせる前に.NET8に移行しようかと。 .NET6もサポート切れちゃうしね。
.NET8への移行自体は特になんも難しいところなく6.0を8.0に置き換えるだけ。まあそんな変なことやってませんし。 ただついでにいろいろ古いのを更新してしまいたい。
インストーラーがWiX3なのを4に移行してビルドしやすくしたい……と調べたらもう5が出てた。4はいつまでも出なかったのに5は早いな。まあ3→4程大きな変更はなさそうだ。 移行は大変そうに思えたがVisualStudioの拡張入れて変換をポチっとしたらそれで済んでしまった。なんか結構めんどくさいことやってたような気がしたんだが?と中身みてみたら、いつだかに整理してそんなめんどくさいことはない形式になってたようだ。それはよかった。 最終的には再確認したいが。
jQueryが古いとかなんとかめちゃくちゃ文句言われてるのもなんとかしたい。nugetパッケージで入れてるのを軒並み更新してみるが、そういやこいつらってどこにどう入ってくるんだっけ? パッケージの中身を見るとなんかContentとかScriptsてフォルダに物が入ってるっぽいけど、なんかそれっぽいの元からリポジトリにコピって追加してあるんだよな。何をどうしたんだ昔の俺は。 あとbootstrapも最新のパッケージを入れたらSolution Explorer上ではwwwrootってのが見えてその中にぶちこまれてるようになったんだが、ビルドしてもコピーされるわけでもなく、こいつらをどう扱えばいいのかさっぱりわからん。なんだこれ……?
いろいろ調べたんだが、ビルド時に勝手にコピーされるようにするにはnuspec内でこのファイルはコピーすると指定しないといけないようだ。 だがnuspecはパッケージ作る側が書くもので、使おうとしているbootstrapではコピーされる指定はない。使う側では手遅れ。むむむ。
試しにSolution Explorer上で見えるwwwroot内のファイルをプロパティページからコピーするように指定してみたら、csprojの方にはそのファイルのローカルキャッシュへのパスが書かれちゃった。確かにそこにファイルあるのかもしれないが、そんなところ参照されても困るぞ……。
なんとかならんかドキュメント見てたらPackageReference
にGeneratePathProperty
てのがあって、これを使うとパッケージのローカルキャッシュへのパスが取得できるようになるらしい。うわ、以前見た覚えがあるけど何に使うんだろう?と思ってたけどこれじゃん!!
実際にどんな展開されるかはobj/~.csproj.g.nuget.props
を見てねということなので見てみると、確かにローカルキャッシュのトップレベルへのパスが入っている。
あとnuspecのcontentFiles
指定から生成された各ファイル項目もここに展開されていて、wwwroot内のパスを指定したLinkも書かれていた。
なるほどSolution Explorerから見える謎はここにあったのか。
謎が解けたらあとはやることは簡単っすね。ということでちょちょっと書いて解決した。
<ItemGroup>
<PackageReference Include="bootstrap" Version="5.3.3" GeneratePathProperty="true"/>
<PackageReference Include="jQuery" Version="3.7.1" GeneratePathProperty="true"/>
<PackageReference Include="knockoutjs" Version="3.5.1" GeneratePathProperty="true"/>
<Content Update="$(Pkgbootstrap)/contentFiles/any/any/wwwroot/**/*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="$(PkgjQuery)/Content/Scripts/jquery-*.min.js">
<Link>wwwroot/js/%(Filename)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="$(Pkgknockoutjs)/Content/Scripts/knockout*.js">
<Link>wwwroot/js/%(Filename)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
GeneratePathProperty
をtrue
にするとPkgパッケージ名
というプロパティが生えてきてインストール先の絶対パスが入っている。
bootstrapはnuspecにcontentFiles
指定があるためobj/~.csproj.g.nuget.props
にContent
が生成されているのでコピー指定だけ書き換える時はUpdate
属性を使う。
jQuery
とknockoutjs
はcontentFiles
指定がないのでobj/~.csproj.g.nuget.props
には何も書かれていない。そのためContent
にはInclude
属性を使う。あとbootstrap
と同じくwwwroot内に入れちゃお、と思ってLink
メタデータを作っておいた。
これでビルド時に必要なファイルがコピーされるようになってくれたわ。
パッケージの更新はできたが、bootstrapは2だか3だかから5に上げたので当然マークアップもめちゃくちゃ変わってて表示がボロボロ。これ直すのがまた大変そうだ。
まああと表示がちゃんとなればひとまずバージョンアップは完了かな。ヘルプのビルドにJekyll使ってるのもnugetで導入できるなんかにしたいけども、キリがないのでそれはまた今度にしよう。
配信時にAzure Speech Serviceで音声認識して字幕生成的なことをやってるんだが、Azure Speech Serviceは結構お金かかってしまって困る1。 月3000円以上かかっちゃってるのでなんとかしたい。
オフラインで音声認識するのにWindowsの機能が使えればいいんだが昔の物は精度がアレだし比較的最近のだとアプリがフォアグラウンドじゃないと動作してくれない。 Windows 11だとライブキャプションという機能が最近あるのでこれが使えればいいんだが、今のところ外から触れるAPIとしては用意されていない。 ただ中身はAzure Speech Serviceのオフライン認識用モデルを使ってるようでそれを触るにはアクセスキーが必要なんだが、なんとライブキャプションの実装あたりのDLLを覗いてみたらキーが普通にぶっこ抜けちゃって試してみたら動いちゃった。 ただまあ一人で試すならこれでいいけども、他人にこれ使いなとは言えないよな……。 あとSpeech Serviceのオフライン認識用のモデルの認証方法は最新版では変更されてたので使えなくなると思われます。簡単にぶっこ抜けるキーではさすがにね。
なんかオフラインで使えてelectronから呼べるのがあったらいいよねということで調べる。 ただAIでとかなるとだいたいPython前提でアプリに組み込むのがなかなか難しくて見つからないねえ……。
一つ見つけたのはVoskてので、これが簡単に導入できそうなのでいろいろいじってた。 Voksはnodejs用のパッケージもあるんだが、ただunacastはelectronなうえにバージョンも古いのでなかなか簡単には導入できず。 途中まで試して思ったよりめんどくせえぞとなっているところで、組み込む前にまずVoskのデモを試してみたら普通に精度悪くて使えねえなこりゃとなった。 まあ50MBのモデルですもんね……。
引き続き調べてたらReazonSpeechのk2てやつがsherpa-onnxといういろんな環境から呼び出せるライブラリ向けのモデルなようだ。ReazonSpeechなら日本語特化だし期待できそうでint8のはサイズも大きくなくて使いやすそう。次これ試してみよう。
unacastにいきなりぶち込もうとすると面倒なことになるのはわかってたのでまず単体で試してみよう。 sherpa-onnxの公式にマイクから入力して音声認識するサンプルもあるのでそれにReazonSpeechのモデルを渡してみる。
sherpa-onnxはいろんなモデルが使えたりするしReazonSpeechもなんかいろんなファイルがぽろっとあってどこに何を指定すればいいのかわからなかったが、そもそもReazonSpeech公式のPythonライブラリがsherpa-onnxを使ってたのでそこを参考にファイルを指定。 あとはすんなり動くはず……って動かねえな。なんかメタデータが無いぞみたいなエラー出されるけど、調べたらそいつはオフライン用のモデルでオンライン(リアルタイム)認識には使えねえぞ、ってことらしい。使えないのかよ!
この場合、音声のしゃべってる部分を切り出してオフライン認識させるのが正道なようだ。でも音声のしゃべってる部分を切り出すのってそう簡単じゃねえぞ……。
と思ったらsherpa-onnxに普通にそのサンプルあるじゃねえか!sherpa-onnxはSilero VADてのを使ってしゃべってる部分を切り出す機能が入ってたようだ。VADって付いてるサンプルあるのは知ってたけどVADてなんだろなと思ってた。Voice Activity Detectorの略だったわ。
今度はオンライン認識じゃなくて、マイク入力でVADしてオフライン認識というサンプルを試したら比較的すんなり動いてくれた。 コードもわかりやすい。 ただいくつか問題があるなあ。
一つは長々としゃべってるとマイク入力のバッファがオーバーフローしたとかで落ちちゃう。まあこれは処理が間に合ってないだけだろう。 マイク入力の設定のところでエラー時に終了しない設定にしたら解決した。
もう一つがよくわからなくて、なんかしゃべり始めがいくらか無視されちゃうんだよね。これはVADが悪いのかなあといろいろパラメータいじってみたが改善せず、そもそもVAD結果を書き出したファイルを聞いてみたら過不足なくしゃべったところだけばっちり切り出されていた。じゃあReazonSpeechの方か~。
しばらくいじってみたが全然わからなくて、ReazonSpeechの公式ライブラリの方で渡してるパラメータを確認してみたがパラメータは同じだった。 ……が、よく見るとなんか音声の頭に0.9秒の空白をくっつける処理やってんじゃん!こんなの必要なのか!現象からしてもばっちりこれじゃんねえ。
0.9秒の空白くっつけるのはまあ簡単で16kHzでサンプリングしてるので16000*0.9
個の0を頭にくっつけて渡してやるだけだ。やってみたら問題なく認識してくれるようになった。やったー!
試した感じは結構精度よくて速度もそんな遅い感じはない。 リアルタイムではないので瞬時にとはいかないし途中経過とかも出ないものの、しゃべったのをログとして出しておきたいだけなので問題ないだろう。 CPUモードで実行してるのにCPU使用率も全然上がらん。メモリは500MB以上食ってるから結構使ってるけど今のPCならまあ厳しいってこともないでしょう。
int8とfp32のモデルがあるので試してみたがint8のでも十分精度良いと感じた。 decoderだけfp32の使うとモデルのサイズはそれほどかわらず精度よくなるからバランス良いかもって感じ。 まあ一回ダウンロードするのが300MB多いか少ないかって程度なんでfp32でもいいのかもだけど。
あとはElectronで動かせるかな~とかマイク入力自分で処理するのめんどくさいな~2というのをやっていかないといけない。 それはそれで大変そうなのでまた今度ね。そのままだとどんどんお金かかるから早めにやっておきたいが。
そういやsherpa-onnxはバックエンドにONNX Runtime使っているということなのでGPUを使うこともできるだろうと調べてみた。DirectMLを指定すると使ってくれそうなので指定してみたが、バイナリがDirectMLを使わない設定でビルドされているようでCPUにフォールバックされちゃった。 まあCPU処理でも全然負荷なかったからGPU処理にする意味全然ないか。むしろVRAMいっぱい持っていかれて困る方があるかもしれない。
三連休は休んだ気がする。
なんもせずに休もうと決めていたので土曜日はなんもせずにごろごろしていた。 日曜はさすがになんかしたいなあと思ってプラモパチ組み。 月曜は土日にやらなきゃいけなかったこと全てを終わらせるために動いた。 とはいえ実際考えたらちょっとした家事と賃貸更新の書類書きくらいだったが。
仕事がちょっと落ち着いた時期に入ってるので趣味のプログラムが書ける気持ちになっている。働いてる時間的にはそこまで大きくは変わってないっぽいが……?
積んであったHG YF-29 デュランダル(マックス機) フルパックセットをさくっと組もうかと。
結構ボリュームあるけど言うてHGだしな~と組み始めたが結局6時間くらいかかったか。まあボリューム的には適正くらいかも。 いつも作ってるのはV.F.G.なのでファイター形態から組むが、HGはバトロイド形態から組むのがちょっと新鮮だ。 正確にはV.F.G.は女の子から組むんだが。
組んでる間はV.F.G.より一回り小さいかな?とか言ってたんだが、ファイター形態にしたらべつに小さくは感じないしあとで比べたらほぼ同じだった。気持ち小さいかも?くらい。 たぶんバトロイド形態は女の子ない分あきらかに小さいのでその辺りの印象だろう。 特に脚がV.F.G.だと女の子の脚が入る関係上エンジン部分が外に出るようになるので、そこが大きく見えるんだな。
別売の水転写デカールも買ってあったので土曜はひとまずシールは貼らずパチ組みだけしたが、日曜にはスミ入れとデカールで代替できない部分のシール貼りもした。
写真はスーパーパック外した状態で。シールで満足できるかなあと心配はあったが、薄いのもあって意外と気にならない。V.F.G.のシールもこれだけ薄ければ……。 ただガウォーク・ファイター形態での頭とか、尾翼だとか立体的な形状に貼るシールはさすがに厳しいものがある。尾翼はまあまだなんとかなるけど頭はちょっと無理あるな。 あと水転写デカールみたいに置いてから位置合わせとかできないので貼るの難しいよ~。
ただまあ色塗る気までは起きないのでシールで済ませておきますけどね。あと結構な数貼りはしたけどまだまだあちこち色が足りなくて気になるところがちらほら。 気にはなるけど塗装しないと決めた以上は見なかったことにしよう。積みが多くて時間かけてらんねえんだ。もしかしたらごく一部筆塗りするかもだけど。
スミ入れはさくっとリアルタッチマーカーでやったけどやっぱこれ便利だな。スミ入れ筆ペンを買ったので使おうとしてみたがニュートラルグレーを試しに入れてみたら思ったより明るくてこれじゃねえなになってめんどくさくて諦めた。一度色を決めてしまえば楽なのかもしんないけど何本も用意しとくのめんどくせえなやっぱ!
ガンダムマーカーの流し込みスミ入れペンもどうかなーと気になったが、他の塗料の上から使えませんとなっていて躊躇われる。 アクリジョンの上からなら大丈夫じゃない?という気もするがどうなんですかね。一本買って試してみるか~。
まああと普通にタミヤのスミ入れ塗料買えばいいじゃないというのもあるが、あれ四角い瓶だから色沢山欲しいとなると嵩張るんだよねえ。 もうクレオスのウェザリングカラー結構持ってるし。ウェザリングカラーは流し込みはできねえし。