Whistle Synthは、ホイッスルをリアルタイムでシンセサイザーの音に変換するmacOSアプリケーションです。ユーザーは外部マイクまたはヘッドセット(有線ヘッドホン推奨、レイテンシ最小化のため)に向かってホイッスルを吹き、選択したシンセ音色で対応する音を聞くことができます。このアプリは、Macの内蔵マイクとスピーカーを同時に使用しないことで、ハウリングを防止しています。

このプロジェクトは数年前にコマンドラインツールとして始まりましたが、AIであるClaudeの支援による最近の大規模な改修で大きな進歩を遂げました。カウフマンはClaudeにレイテンシの削減を依頼し、これはマイクをヘッドホンに向けてラウンドトリップ時間を測定し、オーディオコールバックAPIで実験することを含んでいました。この取り組みにより、オーディオのラウンドトリップレイテンシが約80 msからわずか5 msに削減され、楽器として実用的な応答性が得られました。またClaudeは、ピッチ検出と合成を分離するようにコードをリファクタリングし、以前のバージョンを悩ませていたスタッター(音切れ)を解消しました。

音色開発も重点領域の一つでした。Claudeが多数のベース音をプロトタイピングし、ピッチが上昇しても知覚上のオクターブを一定に保つためにハーモニックミックスをシフトする「オクターブレスベース」音色が生まれました。トレブル域では、ドローバー型ハモンドオルガン音色を採用しています。回転するレスリースピーカーが持続音に生命を吹き込むためで、これはより単純な波形では達成が難しい特性です。App Storeの説明によると、本アプリは12種類の音色を提供しています:Bass、Sub Bass、Octaveless、Reese、808、Pluck、FM、FM Sub、Grind、Square、Drawbar、Drawbar Hi、さらに入力レベルとゲート制御用のPassthroughです。

Whistle Synthのコンパクトな演奏タブ
音色選択を備えた小さな演奏タブwww.jefftk.com

この画像は、記事の12種類の音色(Bass、Sub Bass、Octaveless、Reese、808、Pluck、FM、FM Sub、Grind、Square、Drawbar、Drawbar Hi、Passthrough)のリストと音色開発のセクションに対応しています。

追加の演奏機能として、「5度下げ」オプションがあり、全ての音色を純正律の5度分シフトさせます(Dを吹くとGとして鳴ります)。サステインラッチはホイッスルを止めた後も音を保持し、Mキーで瞬時にミュートできます。ボイスエディタはパルス幅、スペクトル傾斜、レゾナンスなどのパラメータを公開しており、ノブを調整することで合成を学習できます。

Whistle Synthの展開された演奏インターフェース
全ての制御オプションを表示する拡大された演奏タブwww.jefftk.com

このタブは、記事で説明されている「5度下げ」オプション、サステインラッチ、Mキーによる即時ミュート、調整可能なボイスパラメータなどの追加演奏機能を示しています。

AI支援はコードにとどまりません。Geminiが初期のアプリアイコンを生成し、Claudeがそれを複数サイズのコード生成アイコンへと洗練させました。Mac App Storeへの掲載にはデベロッパーメンバーシップと本人確認が必要でした。Appleが当初カウフマンの姓を「Kaufhan」と誤読しましたが、Appleサポートがこれを修正しました。Claudeはスクリーンショットやデモ動画の準備を含む申請プロセス全体でカウフマンをガイドしました。

Mac App Storeの掲載ページにあるWhistle Synthのアイコン
Whistle SynthがMac App Storeの検索結果に表示されている様子www.jefftk.com

記事ではアプリのApp Storeリリース、Appleによるカウフマンの姓の「Kaufhan」への誤読とAppleサポートによる修正について説明しており、この画像はその掲載ページを視覚的に示しています。

内部では、Macアプリは書き直されたエンジン(zeros2.c)を使用し、pitch.c、synth.c、engine.cに分割されています。PortAudioからCoreAudioへの移行とステレオ出力の提供が行われています。ソースコードはGitHubで公開されており、ゼロクロッシングベースのピッチ検出器がPitchHint構造体をシンセサイザーに供給し、シンセサイザーはマイク入力を直接読み取らない設計になっています。

プライバシーは核心的な理念です:アプリは音声をローカルで処理し、データを収集せず、ネットワーク通信を行いません。これはApp Storeのプライバシー欄にも明記されています。