Atreus：音でわかる、レイヤー切替

## はじめに：直感的な操作を、音でデザインする

Atreusキーボード。その洗練されたデザインと、自由度の高いキーマップが、クリエイティブな作業を加速させます。

しかし、レイヤーを多用する中で、「今、どのレイヤーにいるのか？」という、一瞬の迷いが生じることも。特に、QukeyやTap Danceなど、キーの振る舞いが複雑になるほど、その重要性は増します。

この記事では、Atreusのレイヤー操作を、聴覚的なフィードバックによって格段に向上させる方法を紹介します。洗練されたタイピング体験を、音でデザインしましょう。

![img](https://shop.keyboard.io/cdn/shop/files/B02-A7_00007_fullres_e4a81404-49b6-449e-9403-5388f47e0f91.jpg?v=1713988697&width=990)

**この記事でできること：**
Atreusキーボードのレイヤー切替を、効果音によって「耳で」確認する。

**対象読者：**
-   Atreusキーボードユーザー
-   キーボードカスタマイズに興味がある方
-   ファームウェア編集、コマンドライン操作に抵抗がない、あるいは少し経験のある方



## メカニズム：Atreus、macOS、そして「音」のシナジー

今回の実現には、Atreusキーボード、macOS、そして「音」という、3つの要素が不可欠です。

1.  **Atreusファームウェア**: レイヤー変更のタイミングで、macOSに「F24」というキーコードを送信します。
2.  **Karabiner-Elements**: macOS上でF24キーイベントを検知し、設定された効果音を再生します。
3.  **効果音ファイル**: レイヤー切替を知らせる、あなただけのサウンド。

この連携により、物理的なキー操作と聴覚的なフィードバックがシームレスに融合します。

## 実装ステップ：五感を刺激する、操作性の追求

### 1. Atreusファームウェア：キーボードの心臓部に、一工夫

Atreusのファームウェアを覗いてみましょう。F24キー送信の仕組みを理解することが鍵です。

**目的：** レイヤーキー操作時に、F24キーコードを送信する。

**`Atreus.ino` に見る、その仕組み：**

1.  **マクロの定義 (`enum { MACRO_... }`)**:
    まず、特別な動作をさせるための「マクロ」に名前が付けられています。今回の主役はこれらです。
    ```c++
    // for macro
    enum {
      // ... (他のマクロ定義) ...
      MACRO_NUMPAD_WITH_F24, // Wキー長押しでNUMPADレイヤー + F24送信
      MACRO_LCTRL_WITH_F24,  // Aキー長押しでLCTRL + F24送信
    };
    ```

2.  **マクロの具体的な動作 (`macroAction(...)` 関数)**:
    次に、これらのマクロが実際に何をするかが `macroAction` 関数の中に書かれています。F24キーを送る核心部分です。
    ```c++
    const macro_t *macroAction(uint8_t macro_id, KeyEvent &event) {
      if (keyToggledOn(event.state)) { // キーが押された瞬間
        switch (macro_id) {
        // ... (他のマクロケース) ...
        case MACRO_NUMPAD_WITH_F24:
          // Numpadレイヤーに入り(D(Numpad))、F24キーを一瞬押す(T(F24))
          Macros.play(MACRO(D(Numpad), T(F24)));
          break;
        case MACRO_LCTRL_WITH_F24:
          // F24キーを一瞬押し(T(F24))、その後LCTRLキーを押した状態にする(D(LeftControl))
          Macros.play(MACRO(T(F24), D(LeftControl)));
          break;
        // ... (他のマクロケース) ...
        }
      }
      return MACRO_NONE;
    }
    ```
    -   `D(Key)` はキーを押したままにする (Down) 状態にします。
    -   `T(Key)` はキーを一瞬だけ押す (Tap) 動作をします。

3.  **キーへの割り当て (`QUKEYS(...)` in `setup()` 関数)**:
    最後に、これらのマクロが、どのキーの長押し（Qukey機能）で発動するかが `setup()` 関数内の `QUKEYS` で定義されています。
    ```c++
    void setup() {
      QUKEYS(
        // Wキー (ベースレイヤーの座標(0,1)) を長押しすると MACRO_NUMPAD_WITH_F24 を実行
        kaleidoscope::plugin::Qukey(0, KeyAddr(0, 1), M(MACRO_NUMPAD_WITH_F24)),
        // Aキー (ベースレイヤーの座標(1,0)) を長押しすると MACRO_LCTRL_WITH_F24 を実行
        kaleidoscope::plugin::Qukey(0, KeyAddr(1, 0), M(MACRO_LCTRL_WITH_F24)),
        // ... (他のQukey設定) ...
      )
      // ... (他のsetup処理) ...
      Kaleidoscope.setup();
    }
    ```
    `M(MACRO_...)` によって、定義したマクロが物理的なキー操作（この場合はQukeyによる長押し）に結び付けられています。

**カスタマイズする場合：**
もしご自身のAtreusファームウェアで他のキーに同様の機能を実装したい、あるいは既存のF24送信動作を変更したい場合は、この構造を参考にします。新しいマクロを `enum` に追加し、`macroAction` でその動作を記述、そして `QUKEYS` やキーマップ (`KEYMAPS` マクロ内) で適切なキーに割り当てる、という流れになります。

ファームウェアを編集・確認したら、ビルドしてAtreusキーボードに書き込みます。

:::note
F24キーは、macOSでは一般的に使用されないキーコードです。システムへの影響を最小限に抑えつつ、目的を達成できます。
:::

### 2. Karabiner-Elements：macOSのインタープリター

macOS側では、Karabiner-Elementsを使用して、F24キーイベントをトリガーに、効果音を再生する設定を行います。

**目的：** F24キーの入力で、効果音を再生する。

**設定ファイル：**
Complex Modificationsに、以下のルールを追加します。

```json
{
  "title": "Layer switch beep (Atreus F24 Feedback)",
  "rules": [
    {
      "description": "Play sound on F24 (Atreus layer switch)",
      "manipulators": [
        {
          "type": "basic",
          "from": { "key_code": "f24" },
          "to": [ { "shell_command": "afplay /path/to/効果音.aiff" } ]
        }
      ]
    }
  ]
}
```

**設定項目：**
-   `"from": { "key_code": "f24" }`: F24キーが押されたことを検知します。
-   `"shell_command": "afplay /パス/トゥ/効果音.aiff"`: 指定されたパスにある効果音ファイルを、macOS標準の`afplay`コマンドで再生します。

:::note
`/path/to/効果音.aiff` は、使用する効果音ファイルのパスに置き換えてください。
:::

### 3. 効果音：パーソナルな空間を、サウンドで演出

効果音は、あなたの個性を表現する要素です。

**作成方法（例：ffmpeg）：**
動画ファイル (`input.mov`) から、特定の区間（例: 0.2秒）を切り出し、音量を調整してAIFFファイルを作成します。

```bash
ffmpeg -ss 0 -to 0.20 -i input.mov -vn -acodec pcm_s16le -ar 44100 -ac 1 -filter:a "volume=3.0" output.aiff
```

-   `-ss 0 -to 0.20`: 開始0秒から0.20秒の区間を抽出。
-   `-vn`: ビデオは不要。
-   `-acodec pcm_s16le -ar 44100 -ac 1`: 音声形式、サンプリングレート、モノラルを指定。
-   `-filter:a "volume=3.0"`: 音量を調整（3倍に）。

洗練された、あなただけのサウンドで、タイピング体験を豊かにしてください。

## 検証：確かな手応えを、その手に

1.  **EventViewer**: Karabiner-ElementsのEventViewerで、F24キーの入力が正しく認識されていることを確認します。
2.  **afplayテスト**: ターミナルから`afplay /パス/トゥ/効果音.aiff`を実行し、効果音が正常に再生されることを確認します。
3.  **実機テスト**: 実際にAtreusキーボードでレイヤー操作を行い、期待通りのタイミングで効果音が再生されることを確認します。

## まとめ：音のフィードバックが、新しい可能性を拓く

Atreusキーボードのレイヤー操作に、聴覚フィードバックを取り入れることで、より直感的で洗練されたタイピング体験を実現できます。

今回の手法は、Atreusに限らず、同様のカスタマイズが可能なキーボードに応用できます。

ぜひ、あなただけのサウンドで、Atreusの世界をさらに深く探求してください。

### 環境

- MacBook Pro (14-inch, 2021)
- macOS 15.4.1（Sonoma）
- Karabiner-Elements version 15.3.0
- Kaleidscope v1.99.8-684-g74e39638