プログラミング
fopen系の関数を使うと警告が出る プロジェクトのプロパティ→「C/C++」→「プリプロセッサ」で、 「プリプロセッサの定義」に ;_CRT_SECURE_NO_WARNINGS を追加 ソースファイルが UTF-8 だと挙動不審 プロジェクトのプロパティ→「C/C++」→「コマンドライン」…
前回の記事のつづき ESP32ではesp_dspライブラリが利用できるが、ARMではCMSIS-DSPライブラリが利用できる。 使い方 #include <arm_math.h> arm_rfft_fast_instance_f32 S; arm_status status = arm_rfft_fast_init_f32(&S, nfft); arm_rfft_fast_f32(&S, data, data, 0)</arm_math.h>…
謎のコード ESP32の音声処理のプログラムに次のようなコードがあった。 dsps_fft4r_fc32(data, nfft / 2); dsps_bit_rev4r_fc32(data, nfft / 2); dsps_cplx2real_fc32(data, nfft / 2); dataは音声のサンプル列つまり実数の配列であり、nfft はFFTサイズで…
C++で実装。ただし、音声データは符号付き16ビットPCMとし、ひとまず計算にはfloat型を用いて処理の重さも考慮しないものとします。 ノイズ抑制 (Noise Suppression) 一般的には、窓関数→FFT→ノイズ推定→減算処理→IFFT→重ね合わせ しかしやってみるとなかな…
Webアプリ版の形四アプリをリリースしました。ブラウザ上でプレイできます。 アプリの名前は WebKC としました。 形四とは? 「形四(けいし)」とは、白黒4つのコマで正方形をつくるボードゲームです。 詳しくは下記のWebサイトを参照してください。 「形…
いよいよWebアプリ版の形四アプリを作っていきます。 基本設計メモ 仕様はすでにある C#版アプリ(KCSharp) と同等とする。 画面表示、UI、ファイル入力の処理は JavaScript で記述する。 局面データ、思考エンジン等の内部ロジックは Rust で記述して WebAss…
C#版の形四アプリがひとまずリリースできたので、次はWebアプリ版を作りたいと思います。Webアプリ版はJavaScriptとRustで作成します。画面表示やUIなどはJavaScriptで、思考エンジンなど内部のロジックはRustで記述します。いずれもC#のソースを移植する形…
無駄なメモリ消費を低減 画面を更新するたびに無駄にBitmapオブジェクトを生成してメモリ使用量が増大していたのを、最初に生成したBitmapオブジェクトを使い回すように修正しました。 アルゴリズムの最適化 無駄に同じ計算を繰り返している箇所のメモ化や、…
UIの機能追加とバグ修正 本家の「形四96番勝負」とほぼ同等となるように機能を追加しました。 具体的には「戻る」/「進む」ボタンの追加と、大パンチ/大ピンチの表示、および96番勝負のデータです。 KCSharp ver 0.6 機能追加 戻る/進む ボタンを追加 大パン…
(1) 分析したい範囲の始めと終わりにブレークポイントをはる。 (2) デバッグ実行を開始する。 (3) 始めのブレークポイントで一時停止。 (4) 「診断ツール」の「記録の開始」をクリックしてから実行を再開する。 (5) 終わりのブレークポイントで一時停止。 (6…
ビットボード これまで盤面の状態を表現するのに5×5の2次元配列を使ってきましたが、ビット演算で扱うように変更します。石の有無を1ビットで表せば彼我の石の位置は各々25ビットの整数で表現できます。実際にはUInt32型の変数を2個使うことになります。局面…
using System; using System.Runtime.InteropServices; [StructLayout(LayoutKind.Explicit)] public struct Point { [FieldOffset(0)] public byte x; [FieldOffset(1)] public byte y; [FieldOffset(0)] public UInt16 raw; } class Program { public stat…
classは参照型だけどstructは値型だということに注意。classはnewしないと実体が無いが、structはnewなしで実体を持つ。代入すると、classでは参照がコピーされるので同一の実体を指すが、structでは値がコピーされるので別々の実体となる。 using System; c…
「オメーの読みは『浅い』んだよ。手当たり次第に読んでくからムダ読みが多い。読みの量は多いが、そのほとんどがゴミだ」 (白鳥 士郎 『りゅうおうのおしごと!』 5巻) アルファ・ベータ法 読みの探索アリゴリズムをミニマックス法からアルファ・ベータ法…
評価関数の改良を試みましたが、残念ながらあまり勝率は変わりませんでした。 本家の「形四96番勝負」アプリと手動で対戦させて評価するため、96番勝負のうち1番から10番の初期配置を選択できるようにしました。勝率はほぼ互角ですが、本家のほうが思考が高…
アルゴリズムを改良していく前に、いったんソースを整理し、アプリの機能と内部構造をきちんと整えました。 所要時間は5時間ほど。 KCSharp ver 0.2 機能追加 決まり手のハイライト表示 石の選び直しを可能に うろうろ禁止ルールチェック リファクタリング R…
例として、v0.2 というリリースを作成する。 ローカルのリポジトリにタグを付けてプッシュ git tag -a v0.2 -m 'version 0.2' git push origin v0.2 GitHubでリリースを作成 リポジトリの画面の右側にある tags をクリック。 v0.2 というタグができている。 …
形四とは? 「形四(けいし)」とは、白黒4つのコマで正方形をつくるボードゲームです。 詳しくは下記のWebサイトを参照してください。 C#で形四アプリを作る C#のWindowsフォームアプリで形四のアプリを作成します。 開発環境はVisual Studio 2026です。 …
pip install yt-dlpfrom yt_dlp import YoutubeDL # URLを指定してダウンロード yt_opts = YoutubeDL({'format': 'mp4'}) yt_opts.download('https://www.youtube.com/watch?v=D_YvV9idDmU')
Python で mido ライブラリを用いる。インストール pip install midoスクリプト import mido # 対象のMIDIファイル input_file = 'input.mid' output_file = 'output2.txt' # MIDIファイルを読み込む midi = mido.MidiFile(input_file) # UTF-8でテキストフ…
参照の追加 「参照の追加」→「アセンブリ」で下記の参照を追加する。 System.Windows.Forms System.Drawing ソース using System; using System.Windows; using System.Windows.Media; using System.Windows.Forms; namespace DualMonitor2 { public partial…
MediaElementを使う。【参照】 C#のFormアプリで動画再生の速度を制御 - 滴了庵日録 MainWindow.xaml <Window x:Class="MoviePlayer2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Video Speed Control" Height="350" Width="525"> <Grid> </grid></window>
Windows Media Playerを使う。 Windows Media PlayerのCOMコンポーネントを追加 ツールボックスウィンドウで右クリックして「アイテムの選択」を選択 「COMコンポーネント」タブで「Windows Media Player」にチェック ツールボックスに追加された「Windows M…
using System; using System.Drawing; using System.Windows.Forms; namespace DualMonitor { public partial class Form1 : Form { public Form1() { InitializeComponent(); const int MONITOR1 = 0; const int MONITOR2 = 1; if(Screen.AllScreens.Length …
基本の書き方 cmake_minimum_required(VERSION 3.13) project(hoge_project CXX) add_executable(hoge hoge.cpp piyo.cpp) cmake_minimum_required : CMakeの最小要求バージョンを指定 project : プロジェクト名と使用言語を指定 (CXXはC++) add_executable …
C++でJSONを扱いたいとき、以前は picojson を使っていた。 近ごろは nlohmann-json が良いらしい。(しらんけど) (ファイルサイズはpicojsonのほうが圧倒的に小さい。というか、nlohmann-jsonはクソデカい。) ヘッダオンリー picojson もそうだが、nlohmann-…
C言語のプログラムで矢印キーの入力を受けるにはどうすればよいか? Windowsの場合 _getch() でキー入力を受け取ると、矢印キーなどは以下のような値になる。 キー 値 キー 値 ↑ 0xE0, 0x48(H) Home 0xE0, 0x47(G) ↓ 0xE0, 0x50(P) End 0xE0, 0x4F(O) → 0xE0…
下記のようなマクロを使用してログ出力のレベルを制御する。 さらに細かく、FATAL(致命的なエラー)、ERROR(エラー)、WARN(警告)、INFO(情報)、DEBUG(デバッグ情報)、TRACE(トレース情報)のように分けてもよい。 // デバッグ出力 #define DEBUG_LOG_LEVEL 2 #…
やりたいこと WindowsのC言語では kbhit() と getch() を使ってキーボード入力を即時に取得できる。 LinuxのC言語ではこれらの関数は用意されておらず、キーボード入力は1行ごとにバッファされ、Enterキーが入力されるまで取得できない。 Linuxでも kbhit() …
VirtualBoxのUbuntuのC/C++で、USB接続のゲームパッド/ジョイスティックを扱いたい。 ホストOS: Windows 10 ゲストOS: Ubuntu 20.04LTS まずWindowsで動作確認 「コントロールパネル」→「デバイスとプリンター」でゲームパッドを選択し、右クリックで「ゲー…