リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: BeatCraft ドラムマシン
ステップごとのピッチシフト(音程)編集機能の追加
## 1. 目的
各ステップに個別のピッチオフセットを設定できるようにし、同じ音色でもメロディアスなパーカッションフレーズや音程感のあるフィルを表現できるようにする。特にHipHopのスネアピッチ変化やEDMのトム連打など、単調になりがちなビートに表情を加えることが目的。
## 2. 具体的な仕様
### 2-1. UI配置
- 既存のベロシティ編集モードと同様に、シーケンサーグリッド上部に「編集モード切替ボタン」を追加する。
- ボタン: `[ベロシティ]` `[ピッチ]` のトグルボタン2択(デフォルト: ベロシティ)
- PC: グリッド左上エリアに横並びで配置
- スマホ: グリッド上部に横幅100%で2分割配置(最低44px高)
### 2-2. ピッチ編集モードの動作
- ピッチモード選択中、ステップセルの**右クリック(PC)またはロングタップ(スマホ 500ms)**でピッチ選択ポップアップを表示。
- 通常の左クリック/タップはON/OFF切替のまま変えない(既存機能保持)
- ポップアップ内容: ピッチオフセットを7段階から選択
- `-3` / `-2` / `-1` / `0(デフォルト)` / `+1` / `+2` / `+3`(半音単位)
- 選択後ポップアップを閉じ、セルに小さなバッジ(例: 「+2」「-1」)を表示
- デフォルト(0)はバッジ非表示
### 2-3. 音声への反映
- Web Audio API の再生時、各ステップの音源ノード生成時に `playbackRate` または OscillatorNode の `frequency` にピッチオフセットを反映する。
- 半音1つ = 周波数比 `2^(1/12) ≈ 1.0595` を乗算/除算
- 例: +2半音 → `playbackRate *= 2^(2/12)` (BufferSourceNode使用トラック)
- OscillatorベースのトラックはHz値に直接係数を乗算
- ピッチ0のステップは既存の再生ロジックを一切変更しない
### 2-4. データ保存・URLシェアとの整合
- 既存のパターンデータ構造に `pitchMap` フィールドを追加(各トラック×ステップの整数値 -3〜+3、デフォルト0)
- 0のみの場合は `pitchMap` を省略してデータサイズを最小化
- URLシェア用Base64エンコードはこの拡張データを含めてエンコード(旧URLは `pitchMap` 欠損=全0として読み込み、後方互換を保つ)
- LocalStorageへの保存も同様に拡張
### 2-5. プリセットビートへの影響
- 既存15プリセットは `pitchMap` を持たない(全0)ため動作変化なし
## 3. 既存機能との整合(壊さない点)
- ベロシティ編集モードはデフォルトのままで、ピッチモードは明示的に切り替えた時のみ有効
- ステップON/OFFの左クリック/タップ動作は両モード共通で変更なし
- ピッチ=0のステップは従来と完全に同一の音源処理パスを通る
- 旧フォーマットのURL・保存データはそのまま読み込み可能(後方互換)
- スマホのロングタップ実装は既存タップイベントと競合しないよう `touchstart` → タイマー管理 → `touchend` でキャンセルする標準的な実装とする
各ステップに個別のピッチオフセットを設定できるようにし、同じ音色でもメロディアスなパーカッションフレーズや音程感のあるフィルを表現できるようにする。特にHipHopのスネアピッチ変化やEDMのトム連打など、単調になりがちなビートに表情を加えることが目的。
## 2. 具体的な仕様
### 2-1. UI配置
- 既存のベロシティ編集モードと同様に、シーケンサーグリッド上部に「編集モード切替ボタン」を追加する。
- ボタン: `[ベロシティ]` `[ピッチ]` のトグルボタン2択(デフォルト: ベロシティ)
- PC: グリッド左上エリアに横並びで配置
- スマホ: グリッド上部に横幅100%で2分割配置(最低44px高)
### 2-2. ピッチ編集モードの動作
- ピッチモード選択中、ステップセルの**右クリック(PC)またはロングタップ(スマホ 500ms)**でピッチ選択ポップアップを表示。
- 通常の左クリック/タップはON/OFF切替のまま変えない(既存機能保持)
- ポップアップ内容: ピッチオフセットを7段階から選択
- `-3` / `-2` / `-1` / `0(デフォルト)` / `+1` / `+2` / `+3`(半音単位)
- 選択後ポップアップを閉じ、セルに小さなバッジ(例: 「+2」「-1」)を表示
- デフォルト(0)はバッジ非表示
### 2-3. 音声への反映
- Web Audio API の再生時、各ステップの音源ノード生成時に `playbackRate` または OscillatorNode の `frequency` にピッチオフセットを反映する。
- 半音1つ = 周波数比 `2^(1/12) ≈ 1.0595` を乗算/除算
- 例: +2半音 → `playbackRate *= 2^(2/12)` (BufferSourceNode使用トラック)
- OscillatorベースのトラックはHz値に直接係数を乗算
- ピッチ0のステップは既存の再生ロジックを一切変更しない
### 2-4. データ保存・URLシェアとの整合
- 既存のパターンデータ構造に `pitchMap` フィールドを追加(各トラック×ステップの整数値 -3〜+3、デフォルト0)
- 0のみの場合は `pitchMap` を省略してデータサイズを最小化
- URLシェア用Base64エンコードはこの拡張データを含めてエンコード(旧URLは `pitchMap` 欠損=全0として読み込み、後方互換を保つ)
- LocalStorageへの保存も同様に拡張
### 2-5. プリセットビートへの影響
- 既存15プリセットは `pitchMap` を持たない(全0)ため動作変化なし
## 3. 既存機能との整合(壊さない点)
- ベロシティ編集モードはデフォルトのままで、ピッチモードは明示的に切り替えた時のみ有効
- ステップON/OFFの左クリック/タップ動作は両モード共通で変更なし
- ピッチ=0のステップは従来と完全に同一の音源処理パスを通る
- 旧フォーマットのURL・保存データはそのまま読み込み可能(後方互換)
- スマホのロングタップ実装は既存タップイベントと競合しないよう `touchstart` → タイマー管理 → `touchend` でキャンセルする標準的な実装とする
💬 返信 (3)
🛠 開発を開始しました (機能追加 (beatcraft))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「BeatCraft ドラムマシン」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=beatcraft
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/beatcraft/
ご利用ありがとうございます!
ご要望いただいた「BeatCraft ドラムマシン」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=beatcraft
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/beatcraft/
ご利用ありがとうございます!
Echo
Iris