キーを打つと心地よい音が鳴る、Windows 常駐型のタイピング・サウンドアプリ。 タイプライターのように打鍵ごとに音を鳴らし、Enter で行頭復帰のベルを鳴らします。
タイプ内容(どのキーを押したか)は一切扱いません。扱うのは「キーが押された」という事実と、その大まかな分類(通常キー / 復帰キーなど)だけです。
- タイプライターモード — 打鍵ごとに打鍵音、Enter で復帰ベル。
- ポータブル — インストール不要。ランタイム同梱の self-contained ビルドで、フォルダごとコピーすれば動きます(管理者権限・開発者モード不要)。
- 常駐 & 軽量 — システムトレイに常駐。不要な重量級アセンブリ(ML / WinForms 等)はビルド時に除去済み。
- 既定オーディオデバイス追従 — 出力デバイスの切り替えに追従します。
- プライバシー — キーの内容は記録も送信もしません。ネットワーク通信はありません。
最新リリース から zip を取得し、展開して TypingSound.exe をダブルクリックするだけです。フォルダごと移動・コピーしても動作します。
ランディングページ: https://P4suta.github.io/typing-sound/
このプロジェクトの最優先目標は 抽象化の美しさ です。プラットフォーム非依存のドメインロジック(TypingSound.Core)と、Windows 固有の実装(TypingSound.Platform / TypingSound.App)を厳密に分離しています。
TypingSound.Core ドメイン層。OS にもオーディオ実装にも依存しない純粋ロジック。
├─ Abstractions/ IAudioEngine / ISoundClip / ITimerFactory / IRandomSource ... 境界インターフェース
├─ Triggers/ 軸A「いつ鳴らすか」 EveryKeyTrigger / DebounceTrigger
├─ Selectors/ 軸B「どのクリップを鳴らすか」 Fixed / Random / ShuffleQueue / Typewriter
├─ Playback/ 軸C「どう鳴らすか」 Monophonic / Polyphonic
├─ Modes/ 3 軸を束ねる SoundModePipeline と各モード
└─ TypingSoundEngine 司令塔。キー押下を起動中モードへ流し、モード切替を担う
TypingSound.Platform Core の境界インターフェースを Windows 実装で満たすアダプタ層。
├─ Audio/ NAudio ベースの IAudioEngine / ISoundBank 実装
└─ Interop/ 低レベルキーボードフック(P/Invoke)
TypingSound.App WinUI 3 シェル。トレイ常駐 UI、DI 配線、診断/ロギング。
TypingSound.Launcher ポータブル配布の入口 exe(self-contained ランチャー)。
TypingSound.Core.Tests Core 層の xUnit ユニットテスト(プロパティテスト含む)。
音の鳴り方を直交する 3 つの軸に分解し、SoundModePipeline が配線します。新しい鳴らし方は、軸の実装を差し替えるだけで合成できます。
| 軸 | 役割 | 実装例 |
|---|---|---|
| Trigger | いつ鳴らすか | EveryKeyTrigger, DebounceTrigger |
| Selector | どのクリップを鳴らすか | FixedSelector, RandomSelector, ShuffleQueueSelector, TypewriterSelector |
| Playback | どう鳴らすか(声部管理) | MonophonicPolicy, PolyphonicPolicy |
キー押下 ─▶ Trigger ──(発火)──▶ Selector ──(クリップ)──▶ Playback ─▶ 発音
Core は実時間タイマーも乱数もオーディオ出力も抽象越しにしか触らないため、テストではすべてフェイクに差し替えて決定的に検証できます。
mise install # mise.toml に従い dotnet SDK と just を導入just build # App を Debug ビルド(x64)
just build-all # ソリューション全体(テスト/ランチャー含む)をビルド
just test # Core のユニットテスト
just run # ビルドして起動
just publish # App を Release publish(ポータブル一式 / 既定 x64)
just dist # 配布レイアウト dist/TypingSound/ を作成(入口 exe + app/)
just clean # ビルド成果物と dist を削除.NET SDK は mise 管理のため素の PATH からは見えません。
just経由(内部でmise exec -- dotnet)で呼んでください。 WinUI 本体は x64 固定でビルドします(詳細はjustfile冒頭のコメント参照)。
- 超厳格な品質ゲート — 警告はエラー扱い(
TreatWarningsAsErrors)、アナライザ最大(latest-all)、StyleCop / Roslynator、EnforceCodeStyleInBuild。抑制ではなく根本対処を原則とします(Directory.Build.props/.editorconfig)。 - 観測可能性 — Serilog によるログとグローバル例外ハンドラを備え、境界で握りつぶさず記録します。
- 打鍵音 / ベル音(
TypingSound.App/Assets/Sounds/*.wav): Mixkit(Mixkit Free License) - アプリアイコン: 本プロジェクトのオリジナル
ソースコードは MIT License です。同梱のサウンドアセットは Mixkit のライセンス条項に従います(詳細は LICENSE 参照)。