1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

アプリ作成プロンプトの作成

1
Posted at

このスマートフォンアプリをAIで作成する方法のシリーズは、Mobile App with AI Meetup Tokyo で話したことを基にして、最終的にはアプリリリースにもっていきたいという思惑になります。

Mobile App with AI Meetup Tokyo
発表スライド

iOSに浮気

当初は Android 用に作ろうと思っていたのですが、色々思案した結果、iOS で作成してみることにしました。普段よく使ってる端末も iOS なので、どちらかといえば、こちらの方が本筋な気もします。なので、浮気ではなく、本気ですw

プロンプトも再作成

Android 用にはアプリ作成プロンプトを用意していたのですが、iOS ということで作り直しです。
試した結果では、Claude が一番いい感じのプロンプトを作成してくれるので、Claude にお任せです。

プロンプト作成プロンプト

意味不明ですが、そのままの意味です。

スマホアプリをAIを使用して作成したいので、仕様書プロンプトを作成して
・iOSアプリ
・De-esserのアプリを作成
・音質にあまり影響がないアルゴリズムを作成する
・音源を読み込んで、De-eeserした音源をダウンロードできる
・処理前後の音を再生できるUIにする

プロンプト作成(Claude)

では、プロンプトを使って、プロンプトを作成します。
使ったのは、Claude Opus 4.5 です。

# iOS De-esser アプリ開発仕様書

## 概要
音声ファイルの歯擦音(sibilance)を自然に低減するiOS向けDe-esserアプリを開発してください。

## 技術要件

### プラットフォーム
- iOS 16.0以上
- Swift / SwiftUI
- AVFoundation / Accelerate フレームワーク使用

### De-esser アルゴリズム仕様

#### 処理方式
周波数選択型ダイナミックEQアプローチを採用し、音質への影響を最小限に抑える

#### 処理フロー
1. 入力信号をFFTで周波数領域に変換
2. サイドチェイン用にターゲット周波数帯域(4kHz〜10kHz)をバンドパスフィルタで抽出
3. 抽出した帯域のRMSレベルを検出
4. スレッショルドを超えた場合のみ、該当帯域にソフトニーコンプレッションを適用
5. アタック/リリースはプログラムディペンデントで自動調整
6. ウェットドライミックスで原音とブレンド

#### パラメータ
| パラメータ | 範囲 | デフォルト | 説明 |
|-----------|------|------------|------|
| Frequency | 2kHz - 12kHz | 6kHz | ターゲット中心周波数 |
| Range | 0dB - 12dB | 6dB | 最大リダクション量 |
| Threshold | -40dB - 0dB | -20dB | 動作開始レベル |
| Smoothness | 0% - 100% | 50% | 処理の滑らかさ(Q幅に影響) |

### 対応フォーマット
- 入力: WAV, AIFF, M4A, MP3, CAF
- 出力: WAV (24bit/44.1kHz または元のサンプルレート維持)
- 最大ファイルサイズ: 500MB

## UI/UX 設計

### 画面構成

#### メイン画面
```
┌─────────────────────────────┐
│  [≡]    De-esser Pro   [?] │
├─────────────────────────────┤
│                             │
│    ┌───────────────────┐    │
│    │   波形表示エリア   │    │
│    │  (処理前: 青)     │    │
│    │  (処理後: オレンジ) │    │
│    └───────────────────────┘    │
│                             │
│    ◀──────●──────▶ 00:00    │
│         再生位置            │
│                             │
│   [Original] advancement [Processed]   │
│      ◀ ▶        ■         ◀ ▶       │
│     再生ボタン              再生ボタン │
│                             │
├─────────────────────────────┤
│  Frequency    [====●===]    │
│  Range        [==●======]   │
│  Threshold    [=====●===]   │
│  Smoothness   [===●=====]   │
├─────────────────────────────┤
│                             │
│  Reduction Meter: ████░░ -4dB│
│                             │
├─────────────────────────────┤
│  [ファイルを選択]  [エクスポート] │
└─────────────────────────────┘
```

### 機能詳細

#### ファイル読み込み
- ファイルアプリから選択(Document Picker)
- ドラッグ&ドロップ対応
- 読み込み時にプログレス表示

#### 波形表示
- 処理前後の波形を重ねて表示
- ピンチでズームイン/アウト
- スワイプでスクロール
- 現在再生位置をインジケーター表示

#### 再生機能
- Original / Processed の独立再生ボタン
- A/B比較用のトグルスイッチ(リアルタイム切り替え)
- ループ再生機能
- 再生位置のシークバー

#### パラメータ調整
- スライダーでリアルタイム調整
- 数値をタップで直接入力可能
- プリセット保存/読み込み機能

#### エクスポート
- 処理後ファイルをカメラロールまたはファイルアプリに保存
- 共有シートから他アプリへ転送可能
- ファイル名は「元ファイル名_deessed」形式

## 非機能要件

### パフォーマンス
- 処理時間: 音源長の1/4以下(リアルタイムの4倍速以上)
- メモリ使用量: 500MB以下
- バックグラウンド処理対応

### アクセシビリティ
- VoiceOver対応
- Dynamic Type対応
- ダークモード対応

### ローカライゼーション
- 日本語/英語対応

## プロジェクト構成
```
DeesserApp/
├── App/
│   └── DeesserApp.swift
├── Views/
│   ├── MainView.swift
│   ├── WaveformView.swift
│   ├── ControlsView.swift
│   └── Components/
├── ViewModels/
│   └── AudioProcessorViewModel.swift
├── Models/
│   ├── AudioFile.swift
│   └── DeesserParameters.swift
├── Services/
│   ├── AudioEngine.swift
│   ├── DeesserProcessor.swift
│   ├── FileManager.swift
│   └── WaveformGenerator.swift
└── Resources/
    └── Presets/
```

## 実装優先順位
1. 音声ファイル読み込み/再生機能
2. De-esser DSPアルゴリズム実装
3. リアルタイムパラメータ調整
4. 波形表示
5. エクスポート機能
6. UI/UXの洗練
7. プリセット機能

プロンプト作成(ChatGPT)

ついでなので、他のAIでもやってみます。
ChatGPT 5.1 Thinking High でやってみたら、無料版とは違い、結構詳細に出てきました。

あなたは、プロフェッショナルなiOSエンジニア兼、デジタルオーディオ処理エンジニアです。  
これから指定する要件に基づいて、以下を順番に出力してください。

1. アプリの概要・コンセプト  
2. 機能仕様書(画面仕様・機能仕様)  
3. 非機能要件(パフォーマンス・オフライン動作・プライバシーなど)  
4. アーキテクチャ設計(使用フレームワーク、主要クラス構成)  
5. De-esserアルゴリズムの仕様と実装方針  
6. 実装例(Swift / SwiftUI ベースのコード。最低限動くサンプルプロジェクト構成)  

---

## 1. アプリ概要

- プラットフォーム: iOS アプリ(iOS 16 以降を想定)
- アプリ種別: オフラインで動作する De-esser(歯擦音抑制)処理アプリ
- 想定ユーザー:
  - ポッドキャスター、ナレーター、YouTuber など音声コンテンツ制作者
  - ボーカル録音を行うミュージシャン
- コンセプト:
  - 「音質劣化を極力抑えつつ、ボーカルのサ行・タ行などの刺さる歯擦音だけを自然に抑える」  
  - シンプルで直感的な UI で、初心者でも扱いやすいこと

アプリ名は仮で「SoftSibilance」とし、コードやコメント内だけで使用してください。(後から変更可能な設計にしてください)

---

## 2. 機能仕様

### 2-1. コア機能

1. **音声ファイルの読み込み**
   - iOS の「ファイル」アプリからのインポート
   - 共有シートからの受け取り(他アプリからの「共有」で本アプリを選択)
   - 対応フォーマット:
     - WAV(16bit/24bit, 44.1kHz〜48kHz 程度)
     - M4A(AAC)
   - 読み込んだ音源はアプリ内の一時フォルダに保存して処理する

2. **De-esser 処理**
   - オフライン処理(リアルタイム・ストリーミングではなく、ファイル単位で処理)
   - 音質への影響を最小限に抑えるアルゴリズム設計とすること
     - 全帯域コンプレッションではなく、**限定された高域帯域のみをターゲットとしたダイナミック EQ / マルチバンドコンプレッション** を採用
     - 典型的な歯擦音帯域: 4kHz〜10kHz を中心に処理
   - ユーザーが調整可能なパラメータ(最低限):
     - 「スレッショルド」: 歯擦音がどのレベルから抑制されるか
     - 「強さ(リダクション量)」: 最大減衰量
     - 「ターゲット帯域」: 中心周波数(例: 4kHz〜10kHz の範囲で可変)
   - 初期プリセットは「自然で透明な処理」を重視する設定にすること

3. **処理後音源の書き出し・ダウンロード**
   - 処理した音源をファイルとしてエクスポート
   - エクスポート形式:
     - WAV(44.1kHz / 16bit または元ファイルのフォーマットを維持する)
   - エクスポート後のアクション:
     - 共有シートで他アプリに送信(ファイルアプリに保存、クラウド、他DAWアプリなど)
     - 「このデバイスに保存」相当の操作ができる UI を提供

4. **処理前後の比較再生(A/B 比較)**
   - 「オリジナル」と「De-esser 後」を切り替えながら再生できる UI
   - 再生位置は共通で、切り替えても同じ位置から続けて聴ける
   - シンプルな再生コントロール:
     - 再生 / 一時停止
     - 巻き戻し / 少し戻る(例: 5秒)
     - シークバー(進行状況の表示 & タップで移動)
   - オリジナル / 処理後の切り替えトグルボタン(A/B)

### 2-2. 画面仕様(UI)

1. **メイン画面**
   - 構成要素:
     - 上部: 選択中ファイル名と基本情報(サンプリングレート、チャンネル数など簡易表示)
     - 中央: 波形表示(簡易でよい。時間軸に沿った振幅表示)
       - オリジナル or 処理後を切り替えて反映できると望ましいが、実装が重ければオリジナルのみでもよい
     - 下部: 再生コントロール
       - 再生/停止ボタン
       - シークバー
       - A/B 切り替えトグル(「Original / Processed」)
     - さらに下部: De-esser パラメータコントロール
       - スレッショルド(スライダー)
       - 強さ(スライダー)
       - ターゲット帯域(中心周波数のスライダー)
       - 必要なら「Q(帯域幅)」もスライダーで追加可能
     - 最下部:
       - 「ファイルを読み込む」ボタン
       - 「処理して書き出す」ボタン

   - デザイン要件:
     - SwiftUI を利用
     - シンプル & モダン(Apple 純正アプリに近い見た目)
     - ダークモード対応

2. **ファイル選択 / インポート画面**
   - UIDocumentPicker または SwiftUI の DocumentPicker を利用
   - 対応フォーマット以外は選択不可、または選択時にエラーダイアログ表示

3. **書き出し確認ダイアログ**
   - 「ファイル名の入力」
   - エクスポート開始→完了時のトースト or アラート

---

## 3. 非機能要件

- オフラインで完結(サーバーサイドの処理や外部APIを使わない)
- 処理時間:
  - 音声の長さと同程度〜2倍程度以内に処理が完了することを目標
- メモリ使用量:
  - 一般的な iPhone(例: iPhone 12 相当)で数十分のモノラル音声を扱っても落ちないこと
- プライバシー:
  - 音声ファイルはデバイス外に送信しない設計であることを明記

---

## 4. アーキテクチャ設計

以下を明示してください。

1. 使用技術・フレームワーク
   - 言語: Swift
   - UI: SwiftUI
   - オーディオ処理:
     - AVFoundation(AVAudioFile, AVAudioEngine, AVAudioPCMBuffer など)
     - 必要に応じて vDSP など Accelerate フレームワークでの信号処理

2. レイヤー構造(例)
   - `AudioFileManager`: ファイルの読み込み・書き出しを担当
   - `DeesserProcessor`: De-esser アルゴリズムを実装
   - `PlaybackManager`: 再生制御(オリジナル / 処理後の切り替え)
   - `MainViewModel`: SwiftUI とオーディオ処理層の仲介(状態管理)

3. データフロー
   - ファイル読み込み → PCM バッファ取得 → De-esser処理 → 処理後バッファ → 書き出し / 再生

---

## 5. De-esser アルゴリズム仕様

「音質にあまり影響がない」ことを重視したアルゴリズムとして、以下の方針をとってください。

1. 基本方針
   - 帯域制限されたダイナミック EQ(もしくは 2-band マルチバンドコンプレッサ)
   - 流れ:
     1. 入力信号から高域成分(例: 4kHz〜10kHz)をバンドパス / ハイシェルフで抽出
     2. 抽出信号のレベルを検出(エンベロープフォロー)
     3. 検出レベルがスレッショルドを超えたときだけ、元のフルバンド信号の同帯域を減衰
   - 全体のトーンが変わらないよう、高域を常に削るのではなく「歯擦音が大きいときだけ」減衰する

2. 具体仕様(例として提示)
   - サンプリングレート: 入力に合わせる(必要なら内部で 44.1kHz に統一)
   - 帯域:
     - 中心周波数: デフォルト 6kHz、ユーザー調整 4〜10kHz
     - Q値: デフォルト 3〜5 程度(やや狭め)
   - レベル検出:
     - RMS or 平滑した絶対値
     - アタックタイム: 1〜5ms 程度
     - リリースタイム: 50〜200ms 程度
   - ゲインリダクション:
     - スレッショルド(dB)
     - 比率(例: 2:1〜6:1)
     - 最大減衰量を「強さ」パラメータと関連付ける

3. 実装上の注意
   - 高度な最適化ではなく、まずは分かりやすく正しい処理を優先
   - オフライン処理のため、1サンプルずつではなくブロック単位(フレーム単位)で計算してもよい

このアルゴリズムの擬似コードと、その後の Swift 実装例(クラス or 構造体)を提示してください。

---

## 6. 実装例(コード出力の指示)

以下を満たす最低限動作するサンプルコードを Swift で提示してください。

1. プロジェクト構成(Xcode)
   - `SoftSibilanceApp`(SwiftUI App エントリ)
   - `ContentView`(メイン画面)
   - `AudioFileManager.swift`
   - `DeesserProcessor.swift`
   - `PlaybackManager.swift`
   - `MainViewModel.swift`

2. 主な要件
   - `ContentView`:
     - ファイル読み込みボタン(DocumentPicker を呼び出す)
     - 再生 UI(再生/一時停止、シークバー)
     - A/B 切り替えトグル
     - スライダーで De-esser パラメータ調整
     - 「処理して書き出す」ボタン
   - `MainViewModel`:
     - 現在の音声ファイル情報、再生状態、パラメータ状態を `@Published` プロパティで管理
   - `AudioFileManager`:
     - 音声ファイルの読み込み(URL から AVAudioFile)
     - 処理後ファイルの書き出し(WAV)
   - `DeesserProcessor`:
     - 入力バッファを受け取り、処理後バッファを返すメソッド
   - `PlaybackManager`:
     - AVAudioEngine or AVAudioPlayerNode を使った再生制御
     - オリジナル/処理後の切り替え

3. コードスタイル
   - 重要な部分には日本語コメントを丁寧に付けてください。
   - 実行に必要な import 文をすべて含めてください。
   - 実際に Xcode にコピペしてビルドできるレベルを目指してください(細かいエラーは多少あってもよいが、極力少なく)。

---

以上の要件に基づいて、

1. まずテキストでの仕様書(概要〜詳細仕様)を整理して提示  
2. 次にアーキテクチャ説明  
3. 最後にサンプル実装コード

の順で出力してください。

プロンプト作成(Gemini)

Gemini 3 pro ですが、出力は比較的シンプルですね。

# 役割
あなたは世界トップクラスのiOSエンジニアであり、デジタル信号処理(DSP)の専門家です。
Swift、SwiftUI、AVFoundationを熟知しており、音質を維持しながら特定の周波数帯域を処理する高度なオーディオアプリを構築できます。

# プロジェクト概要
iPhone向けの「高音質De-esser(ディエッサー)アプリ」のMVP(Minimum Viable Product)を作成してください。
このアプリは、録音された音声ファイルから、不快な歯擦音(サ行、シュ、チなどの音)を低減し、かつ全体の音質への悪影響を最小限に抑えることを目的としています。

# 技術スタック
- 言語: Swift 5+
- UIフレームワーク: SwiftUI
- 音声処理フレームワーク: AVFoundation (AVAudioEngine, AVAudioPCMBuffer)

# 機能要件

## 1. ファイル読み込み機能
- ユーザーがiOSの「ファイル」アプリから音声ファイル(mp3, wav, m4a等)を選択・インポートできる。
- `UIDocumentPickerViewController` (SwiftUIでのラッパー) を使用すること。

## 2. De-esser処理(重要:アルゴリズム要件)
- **目的**: 音質への悪影響(全体がこもるなど)を避けるため、静的なローパスフィルタではなく、**ダイナミック処理(周波数依存のコンプレッション)**に近いロジックを実装すること。
- **仕様**:
  - ターゲット周波数帯域:主に4kHz〜10kHz付近の歯擦音成分。
  - しきい値(Threshold)を超えた場合のみ、その帯域のゲインを下げる処理、またはマルチバンドコンプレッサー的な挙動をAVAudioEngineを用いて実装する。
  - 処理パラメータ(強度など)は、今回は固定値または簡易的なスライダー1つで調整可能とする。

## 3. 比較・再生UI
- 画面上に以下のコントロールを配置する。
  - 「オリジナル音声を再生」ボタン
  - 「処理後(De-esser適用)の音声を再生」ボタン
  - 再生/一時停止のトグル。
  - 現在の再生位置を示すスライダー。
- ユーザーが処理前後の違いを聴き比べやすいように、再生位置を同期させる、または即座に切り替えられるUXが望ましい。

## 4. 書き出し・保存機能
- 処理された音声をファイル(wavまたはm4a)として書き出す。
- iOSのシェアシート(`UIActivityViewController`)またはファイル保存ダイアログを表示し、ユーザーが保存先を選べるようにする。

# UIデザイン要件
- モダンでクリーンなSwiftUIデザイン。
- 画面上部に波形(Waveform)のプレビューがあると尚良い(実装が複雑すぎる場合は省略可だが、プレースホルダーは置くこと)。
- 操作フロー:ファイル選択 -> 解析/処理 -> 試聴 -> 保存。

# 出力成果物
以下のコードを提供してください。
1. `AudioProcessor.swift`: AVFoundationを使用した音声処理ロジックの中核クラス。
2. `ContentView.swift`: UIおよびViewModelを含むメイン画面。
3. `DocumentPicker.swift`: ファイル選択用のヘルパー。
4. `Info.plist`に必要な設定があれば、そのキーと値の説明。

# 注意点
- 音声処理は非同期で行い、UIをブロックしないこと。
- エラーハンドリング(ファイルが読み込めない、形式が非対応など)を含めること。
- 実装は1つのファイルにまとめず、機能ごとに適切に分離して提示してください。

プロンプト作成(Grok)

最後に何かと話題の Grok も試してみました。
思った以上にシンプルなものが出てきました。
これだけだと、振れ幅が広そうな気はします。

あなたは経験豊富なiOSアプリ開発者で、オーディオ処理の専門家です。以下の要件に基づいて、De-esserアプリの詳細な仕様書を作成してください。仕様書は、Markdown形式で構造化し、以下のセクションを含めてください:アプリ概要、機能要件、UI/UX設計、アルゴリズム詳細、技術スタック、開発フロー、潜在的な課題と解決策。

要件:
- アプリのプラットフォーム:iOS(SwiftまたはSwiftUIを使用して開発)。
- アプリの主な目的:De-esser機能を提供するアプリ。De-esserとは、音声ファイル内の歯擦音(S音やSH音などの高周波の刺々しい音)を抑える処理です。
- アルゴリズム:AIを活用したDe-esserアルゴリズムを作成。音質全体にあまり影響を与えないよう設計(例: 機械学習モデルを使って高周波成分のみを検知・減衰し、他の周波数帯を維持)。具体的なアルゴリズムの提案を含め、Core MLやTensorFlow Liteなどのフレームワークを活用。処理は効率的で、モバイルデバイス上でリアルタイムまたは高速に実行可能。
- 機能:
  - ユーザーがデバイスから音源ファイル(MP3、WAVなど)を読み込める。
  - 読み込んだ音源に対してDe-esser処理を実行し、処理済み音源をダウンロード可能(デバイスに保存または共有)。
  - UIで処理前のオリジナル音源と処理後の音源を再生・比較可能(例: 再生ボタン、波形表示、スライダーでパラメータ調整)。
- UI/UX:シンプルで直感的なインターフェース。ホーム画面で音源選択、処理ボタン、再生エリアを配置。アクセシビリティを考慮し、ダークモード対応。
- その他の考慮点:プライバシー(音源データをサーバーに送信せず、ローカル処理)、パフォーマンス(低スペックデバイス対応)、エラーハンドリング(無効なファイル形式時の警告)。

仕様書は詳細で実用的で、初心者開発者がこれを基にアプリを作成できるようにしてください。コードスニペットの例も適宜追加。

まとめ

さて、今日は、色々なAIでプロンプト作成をしてみましたが、Claude と ChatGPT のプロンプトは良さそうな感じですね。時間があれば、両方試していきたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?