win31-audio-design について
win31-audio-designは、Webやモバイルの画面に1990年代初頭のWindows風サウンドを加えるデザイナー向けのスキルです。レトロ音の特徴、CCライセンス音源、プログラム生成、モバイルの触覚連携を扱い、Microsoftの原音を複製しない方針を示します。
主な機能
- 01レトロサウンドの設計指針
- 02CCライセンス音源の紹介
- 03Web Audioによる生成例
- 04モバイル音声と触覚の連携
- 05音量基準とユーザー設定
活用シーン
- 01Win31風アプリへの効果音追加
- 02レトロゲーム画面の音選び
- 03モバイルの操作音と触覚の連携
- 04システム音のライセンス対応代替制作
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ curiositech/ some_claude_skills --skill win31-audio-designインストール後、Claude Code で/win31-audio-designを入力して読み込まれたか確認します。
同梱ファイル.claude-plugin/plugin.json
詳細
Win31 オーディオデザイン:心地よいレトロサウンドの語彙
最新のウェブアプリやモバイルアプリ向けに、本格的な Windows 3.1 時代のサウンド体験を生み出す専門家です。90年代初頭のコンピューティングならではの心地よいローファイな魅力を捉えながら、クラシックなサウンドの語彙を再現する CC ライセンスの代替音源に焦点を当てます。
使用する場面
次の場合に使用します:
- オーディオフィードバックが必要な Win31 テーマのウェブアプリ
- 90年代のデスクトップサウンドを取り入れたレトロゲームのインターフェース
- 心地よいマイクロインタラクションサウンドを取り入れたいモバイルアプリ
- 現代的なフラットなサウンドをビンテージの 8 ビット風に変換する場合
- 初期の Windows を懐かしく思い起こさせるサウンドパレットの作成
次の場合には使用しないでください:
- 現代的なフラット/マテリアルデザインのサウンド設計 → sound-engineer
- 音声合成 → voice-audio-engineer
- 作曲 → DAW ツール
- 映画のサウンドデザイン → リニアオーディオのワークフロー
Windows 3.1 のサウンドの語彙
オリジナルのサウンド(著作権で保護されています - 使用しないでください)
| ファイル | 特徴 | 長さ | 用途 |
|---|---|---|---|
| CHIMES.WAV | 幻想的な鐘の音 | 約1.5秒 | システム通知 |
| CHORD.WAV | 長三和音の解決感 | 約1.2秒 | タスク完了 |
| DING.WAV | 単発の鐘の音 | 約0.5秒 | 注意喚起/警告 |
| TADA.WAV | 勝利を告げるファンファーレ | 約2秒 | 起動/大きな成功 |
| RINGIN.WAV | 上昇音 | 約0.3秒 | モーダルを開く |
| RINGOUT.WAV | 下降音 | 約0.2秒 | モーダルを閉じる |
法的警告:これらのサウンドは Microsoft の著作権で保護されています。作成するのはインスピレーションを得た代替音源であり、決して複製ではありません。
サウンドの特徴(心地よさの理由)
| 品質 | Win31 サウンドの特性 |
|---|---|
| サンプルレート | 11kHz~22kHz(ローファイならではの魅力) |
| ビット深度 | 8ビット(量子化による温かみ) |
| 周波数範囲 | 400Hz~4kHz(サブベースなし、耳当たりの柔らかな高音) |
| エンベロープ | アタックは速く、ディケイは中程度、サステインなし |
| リバーブ | ドライ、または短いルームリバーブ(大聖堂のような響きはなし) |
| 特徴 | 明るく、プラスチックのようで、陽気 |
Win31 の「Ding」の公式
┌─────────────────────────────────────────────────────┐
│ Attack: 5-10ms │ Pure sine starts BRIGHT │
│ Peak: ~880Hz (A5) │ Classic 8-bit "bleep" │
│ Decay: 200-400ms │ Natural damping feel │
│ Overtones: 2nd+3rd│ Bell-like shimmer │
│ Processing: 8-bit │ Adds warmth via quantization │
└─────────────────────────────────────────────────────┘
CC ライセンスのサウンド素材
おすすめの素材元
| 素材元 | ライセンス | 最適な用途 |
|---|---|---|
| Dominik Braun's 107 Retro Sounds | CC BY 4.0 | UI のピッ、ビープ音、ポジティブなフィードバック |
| LittleRobotSoundFactory (Freesound) | CC0/CC BY | 8 ビットゲームのサウンド |
| OpenGameArt 512 SFX | CC0 | 幅広くそろったレトロ音源ライブラリ |
| Gritty Retro UI (Exechamp) | CC0 | UI に特化したクリック音やトーン |
クレジット表記のテンプレート
Audio: [Sound Name] by [Creator] from [Source]
Licensed under [CC BY 4.0 / CC0]
https://[source-url]
Win31 アプリ向けサウンドパレット
インタラクションサウンド
| 操作 | サウンドの特徴 | 長さ | 周波数 |
|---|---|---|---|
| ボタンクリック | 柔らかなプラスチックの「ティッ」 | 20~40ms | 800~1200Hz |
| ボタンを離す | 控えめな「トッ」 | 15~30ms | 600~900Hz |
| 切り替えオン | 上昇するチャープ音 | 80~120ms | 600→1200Hz |
| 切り替えオフ | 下降するチャープ音 | 80~120ms | 1200→600Hz |
| ウィンドウを開く | 上昇するアルペジオ | 150~250ms | C4-E4-G4 |
| ウィンドウを閉じる | 下降するアルペジオ | 100~200ms | G4-E4-C4 |
| エラー | 低いブザー音+下降音 | 300~500ms | 200~400Hz |
| 成功 | 明るいディン音+きらめき | 200~400ms | 880Hz + 倍音 |
| 通知 | 2音のチャイム | 400~600ms | 660Hz、880Hz |
システムサウンド
| イベント | サウンドの特徴 | 長さ |
|---|---|---|
| 起動 | 勝利を告げる和音の解決感 | 1.5~2.5秒 |
| シャットダウン | 穏やかな下降フレーズ | 1~2秒 |
| 重大なエラー | 耳障りな2連ブザー音 | 400~600ms |
| タスク完了 | 心地よい「ダ・ディン!」 | 300~500ms |
| ナビゲーション | 柔らかなスッという音+余韻 | 100~200ms |
Web Audio の実装
基本的なサウンドプレーヤー
// Win31-style sound manager for web
class Win31SoundManager {
private audioContext: AudioContext | null = null;
private sounds: Map<string, AudioBuffer> = new Map();
constructor() {
// Lazy init on first user interaction (browser policy)
}
private getContext(): AudioContext {
if (!this.audioContext) {
this.audioContext = new AudioContext({ sampleRate: 22050 }); // Lo-fi!
}
return this.audioContext;
}
async loadSound(name: string, url: string) {
const response = await fetch(url);
const arrayBuffer = await response.arrayBuffer();
const audioBuffer = await this.getContext().decodeAudioData(arrayBuffer);
this.sounds.set(name, audioBuffer);
}
play(name: string, volume = 0.5) {
const buffer = this.sounds.get(name);
if (!buffer) return;
const ctx = this.getContext();
const source = ctx.createBufferSource();
const gain = ctx.createGain();
source.buffer = buffer;
gain.gain.value = volume;
source.connect(gain);
gain.connect(ctx.destination);
source.start(0);
}
// Procedural 8-bit "ding"
playDing(frequency = 880) {
const ctx = this.getContext();
const osc = ctx.createOscillator();
const gain = ctx.createGain();
osc.type = 'triangle'; // Softer than sine, more 8-bit
osc.frequency.setValueAtTime(frequency, ctx.currentTime);
// Fast attack, medium decay
gain.gain.setValueAtTime(0.3, ctx.currentTime);
gain.gain.exponentialRampToValueAtTime(0.001, ctx.currentTime + 0.4);
osc.connect(gain);
gain.connect(ctx.destination);
osc.start(ctx.currentTime);
osc.stop(ctx.currentTime + 0.4);
}
}
export const win31Sounds = new Win31SoundManager();
合成レトロサウンド
// Generate Win31-style sounds procedurally
function createChime(ctx: AudioContext, baseFreq = 660): AudioBufferSourceNode {
const duration = 1.5;
const sampleRate = ctx.sampleRate;
const buffer = ctx.createBuffer(1, duration * sampleRate, sampleRate);
const data = buffer.getChannelData(0);
// Two-tone chime (like CHIMES.WAV character)
for (let i = 0; i < data.length; i++) {
const t = i / sampleRate;
const env = Math.exp(-t * 3); // Decay envelope
// Two harmonically related tones
const tone1 = Math.sin(2 * Math.PI * baseFreq * t);
const tone2 = Math.sin(2 * Math.PI * baseFreq * 1.5 * t) * 0.5;
data[i] = (tone1 + tone2) * env * 0.3;
}
// 8-bit quantization for authentic lo-fi
for (let i = 0; i < data.length; i++) {
data[i] = Math.round(data[i] * 127) / 127;
}
const source = ctx.createBufferSource();
source.buffer = buffer;
return source;
}
モバイルのハプティクスとの連携
iOS の触覚フィードバックとサウンドの組み合わせ
| サウンドイベント | 触覚の種類 | 強度 |
|---|---|---|
| ボタンのクリック | .light | 0.5 |
| トグルスイッチ | .medium | 0.6 |
| エラー音 | .heavy | 0.9 |
| 成功音 | .selection | 0.4 |
| ウィンドウを開く | .soft | 0.3 |
React Native の実装
import * as Haptics from 'expo-haptics';
async function playWithHaptic(soundName: string, hapticType: Haptics.ImpactFeedbackStyle) {
// Fire both simultaneously
await Promise.all([
win31Sounds.play(soundName),
Haptics.impactAsync(hapticType),
]);
}
// Usage
await playWithHaptic('click', Haptics.ImpactFeedbackStyle.Light);
await playWithHaptic('error', Haptics.ImpactFeedbackStyle.Heavy);
アンチパターン
アンチパターン:高音質のサンプル
どのようなものか:48kHz、24ビットのクリアなオーディオ なぜ不適切か:現代的すぎて、レトロな魅力が失われます 代わりに:22kHz にダウンサンプリングし、8ビット量子化を適用します
アンチパターン:長いリバーブの余韻
どのようなものか:大聖堂で響くようなサウンド なぜ不適切か:Win31 のサウンドはドライか、短いルームリバーブでした 代わりに:リバーブを使わないか、減衰時間を<100msにします
アンチパターン:サブベース
どのようなものか:100Hz 未満の深い低音 なぜ不適切か:90年代の PC スピーカーではサブベースを再生できませんでした 代わりに:200Hz 未満をすべてカットします
アンチパターン:Microsoft のサウンドをコピーする
どのようなものか:CHIMES.WAV や TADA.WAV をそのまま使用する なぜ不適切か:著作権侵害になります 代わりに:CC ライセンスの音源を使って、雰囲気を参考にした代替音を作成します
アンチパターン:サウンドが多すぎる
どのようなものか:あらゆるマイクロインタラクションで音が鳴る なぜ不適切か:煩わしく、疲れるようになります 代わりに:主要な操作だけにサウンドを使い、オーディオのオン/オフを切り替えられるようにします
サウンドレベルのガイドライン
| カテゴリー | レベル | 備考 |
|---|---|---|
| UI フィードバック | -24 to -18 dB | 控えめで、決して邪魔にならない |
| 通知 | -18 to -12 dB | 注意を引くが、大きすぎない |
| エラー | -15 to -9 dB | 気づきやすいが、不快ではない |
| システムサウンド | -12 to -6 dB | 重要なイベント(起動/終了) |
必ず用意するもの:
- サウンドの全体切り替え(オン/オフ)
- 音量スライダー(0-100%)
- システムのサイレントモードを尊重する
実装の簡易チェックリスト
- Win31SoundManager クラスを作成する
- CC ライセンスのベースサウンドを読み込む
- プロシージャルな代替音(ディン、チャイム)を追加する
- モバイル向けの触覚フィードバックとの組み合わせを実装する
- サウンドの全体切り替えを追加する
- Win31 のビジュアルテーマでテストする
- CC サウンドの帰属表示を追加する
- サンプルレートを確認する(最大 22kHz)
連携先
- windows-3-1-web-designer - Win31 のビジュアルとオーディオを組み合わせた体験
- sound-engineer - 必要に応じた高度な空間オーディオ
- mobile-ux-optimizer - タッチ、触覚フィードバック、オーディオの連携
- pwa-expert - オフラインでのサウンドキャッシュ
核心となるポイント:Win31 のサウンドが心地よかったのは、シンプルだったからです。短く明るいローファイな音が、気を散らすことなくすぐにフィードバックを返していました。8ビット量子化と限られた周波数特性が、耳障りさではなく温かみを加えていました。コピーではなく、CC ライセンスの代替音源でその精神を再現しましょう。
忘れないでください:必ずサウンドの切り替えを用意してください。ユーザーの同意なくサウンドを再生してはいけません。モバイルではオーディオと触覚フィードバックを組み合わせると、満足度を最大限に高められます。