win31-audio-design
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseWin31 Audio Design: Satisfying Retro Sound Vocabulary
Win31 音效设计:令人愉悦的复古音效体系
Expert in creating authentic Windows 3.1 era sound experiences for modern web and mobile applications. Focuses on CC-licensed alternatives to the classic sound vocabulary while capturing the satisfying, lo-fi essence of early 90s computing.
专注于为现代网页和移动应用打造原汁原味的Windows 3.1时代音效体验。在捕捉90年代早期计算机那种令人满足的低保真质感的同时,使用CC授权的音效替代经典的版权音效。
When to Use
适用场景
Use for:
- Win31-themed web applications needing audio feedback
- Retro game interfaces with 90s desktop sounds
- Mobile apps wanting satisfying micro-interaction sounds
- Converting modern flat sounds to vintage 8-bit aesthetic
- Creating sound palettes that evoke early Windows nostalgia
Do NOT use for:
- Modern flat/material sound design → sound-engineer
- Voice synthesis → voice-audio-engineer
- Music composition → DAW tools
- Film sound design → Linear audio workflows
适用情况:
- 需要音频反馈的Win31主题网页应用
- 带有90年代桌面音效的复古游戏界面
- 想要添加令人愉悦的微交互音效的移动应用
- 将现代扁平化音效转换为复古8位风格
- 打造能唤起早期Windows怀旧感的音效库
不适用情况:
- 现代扁平化/材质化音效设计 → 请联系sound-engineer
- 语音合成 → 请联系voice-audio-engineer
- 音乐创作 → 使用DAW工具
- 影视音效设计 → 线性音频工作流
Windows 3.1 Sound Vocabulary
Windows 3.1 音效体系
The Original Sounds (Copyrighted - DO NOT USE)
原版音效(受版权保护 - 禁止使用)
| File | Character | Duration | Function |
|---|---|---|---|
| CHIMES.WAV | Ethereal bells | ~1.5s | System notifications |
| CHORD.WAV | Major chord resolve | ~1.2s | Task completion |
| DING.WAV | Single bell strike | ~0.5s | Attention/alert |
| TADA.WAV | Triumphant fanfare | ~2s | Startup/major success |
| RINGIN.WAV | Rising tone | ~0.3s | Modal open |
| RINGOUT.WAV | Falling tone | ~0.2s | Modal close |
Legal Warning: These sounds are copyrighted by Microsoft. We create INSPIRED alternatives, never copies.
| 文件 | 音效特征 | 时长 | 用途 |
|---|---|---|---|
| CHIMES.WAV | 空灵钟声 | ~1.5秒 | 系统通知 |
| CHORD.WAV | 大三和弦收尾 | ~1.2秒 | 任务完成 |
| DING.WAV | 单声钟鸣 | ~0.5秒 | 提醒/警告 |
| TADA.WAV | 胜利号角 | ~2秒 | 启动/重大成功提示 |
| RINGIN.WAV | 升调音效 | ~0.3秒 | 模态窗口打开 |
| RINGOUT.WAV | 降调音效 | ~0.2秒 | 模态窗口关闭 |
法律警告:这些音效受微软版权保护。我们仅创作启发自原版的替代音效,绝不直接复制。
Sound Characteristics (What Made Them Satisfying)
音效特征(为何它们令人愉悦)
| Quality | Win31 Sound Profile |
|---|---|
| Sample Rate | 11kHz-22kHz (lo-fi charm) |
| Bit Depth | 8-bit (quantization warmth) |
| Frequency Range | 400Hz-4kHz (no sub-bass, gentle highs) |
| Envelope | Fast attack, medium decay, no sustain |
| Reverb | Dry or short room (no cathedral halls) |
| Character | Bright, plasticky, cheerful |
| 音质维度 | Win31 音效配置 |
|---|---|
| 采样率 | 11kHz-22kHz(低保真魅力) |
| 位深度 | 8-bit(量化带来的温暖感) |
| 频率范围 | 400Hz-4kHz(无低音,高频柔和) |
| 包络 | 快起音、中等衰减、无延音 |
| 混响 | 干声或短房间混响(无大教堂混响) |
| 整体风格 | 明亮、塑料质感、欢快 |
The Win31 "Ding" Formula
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 │
└─────────────────────────────────────────────────────┘┌─────────────────────────────────────────────────────┐
│ 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-Licensed Sound Resources
CC授权音效资源
Recommended Sources
推荐来源
| Source | License | Best For |
|---|---|---|
| Dominik Braun's 107 Retro Sounds | CC BY 4.0 | UI blips, beeps, positive feedback |
| LittleRobotSoundFactory (Freesound) | CC0/CC BY | 8-bit game sounds |
| OpenGameArt 512 SFX | CC0 | Comprehensive retro library |
| Gritty Retro UI (Exechamp) | CC0 | UI-specific clicks and tones |
| 来源 | 授权协议 | 最佳用途 |
|---|---|---|
| Dominik Braun's 107 Retro Sounds | CC BY 4.0 | UI提示音、哔声、正向反馈音效 |
| LittleRobotSoundFactory (Freesound) | CC0/CC BY | 8-bit游戏音效 |
| OpenGameArt 512 SFX | CC0 | 全面的复古音效库 |
| Gritty Retro UI (Exechamp) | CC0 | UI专用点击音和提示音 |
Attribution Template
署名模板
Audio: [Sound Name] by [Creator] from [Source]
Licensed under [CC BY 4.0 / CC0]
https://[source-url]Audio: [Sound Name] by [Creator] from [Source]
Licensed under [CC BY 4.0 / CC0]
https://[source-url]Sound Palette for Win31 Apps
Win31 应用音效库
Interaction Sounds
交互音效
| Action | Sound Character | Duration | Frequency |
|---|---|---|---|
| Button click | Soft plastic "tik" | 20-40ms | 800-1200Hz |
| Button release | Subtle "tok" | 15-30ms | 600-900Hz |
| Toggle on | Rising chirp | 80-120ms | 600→1200Hz |
| Toggle off | Falling chirp | 80-120ms | 1200→600Hz |
| Window open | Ascending arpeggio | 150-250ms | C4-E4-G4 |
| Window close | Descending arpeggio | 100-200ms | G4-E4-C4 |
| Error | Low buzz + descending | 300-500ms | 200-400Hz |
| Success | Bright ding + shimmer | 200-400ms | 880Hz + harmonics |
| Notification | Double chime | 400-600ms | 660Hz, 880Hz |
| 操作 | 音效特征 | 时长 | 频率 |
|---|---|---|---|
| 按钮点击 | 柔和塑料质感的“tik”声 | 20-40毫秒 | 800-1200Hz |
| 按钮释放 | 轻微的“tok”声 | 15-30毫秒 | 600-900Hz |
| 开关开启 | 升调啁啾声 | 80-120毫秒 | 600→1200Hz |
| 开关关闭 | 降调啁啾声 | 80-120毫秒 | 1200→600Hz |
| 窗口打开 | 上行琶音 | 150-250毫秒 | C4-E4-G4 |
| 窗口关闭 | 下行琶音 | 100-200毫秒 | G4-E4-C4 |
| 错误提示 | 低频嗡鸣+降调 | 300-500毫秒 | 200-400Hz |
| 成功提示 | 明亮叮声+泛音 | 200-400毫秒 | 880Hz + 和声 |
| 通知提示 | 双音钟鸣 | 400-600毫秒 | 660Hz, 880Hz |
System Sounds
系统音效
| Event | Sound Character | Duration |
|---|---|---|
| Startup | Triumphant chord resolve | 1.5-2.5s |
| Shutdown | Gentle descending phrase | 1-2s |
| Critical error | Harsh double-buzz | 400-600ms |
| Task complete | Satisfying "da-ding!" | 300-500ms |
| Navigation | Soft whoosh + settle | 100-200ms |
| 事件 | 音效特征 | 时长 |
|---|---|---|
| 启动 | 胜利和弦收尾 | 1.5-2.5秒 |
| 关机 | 柔和下行乐句 | 1-2秒 |
| 严重错误 | 刺耳双嗡鸣 | 400-600毫秒 |
| 任务完成 | 令人愉悦的“da-ding!”声 | 300-500毫秒 |
| 导航操作 | 柔和呼啸+收尾声 | 100-200毫秒 |
Web Audio Implementation
Web Audio 实现
Basic Sound Player
基础音效播放器
typescript
// 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();typescript
// 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();Synthesized Retro Sounds
合成复古音效
typescript
// 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;
}typescript
// 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;
}Mobile Haptic Coordination
移动设备触觉反馈协同
iOS Haptic-Sound Pairing
iOS 触觉-音效配对
| Sound Event | Haptic Type | Intensity |
|---|---|---|
| Button click | | 0.5 |
| Toggle switch | | 0.6 |
| Error buzz | | 0.9 |
| Success ding | | 0.4 |
| Window open | | 0.3 |
| 音效事件 | 触觉类型 | 强度 |
|---|---|---|
| 按钮点击 | | 0.5 |
| 开关切换 | | 0.6 |
| 错误嗡鸣 | | 0.9 |
| 成功叮声 | | 0.4 |
| 窗口打开 | | 0.3 |
React Native Implementation
React Native 实现
typescript
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);typescript
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);Anti-Patterns
常见误区
Anti-Pattern: High-Fidelity Samples
误区:高保真采样
What it looks like: 48kHz, 24-bit crystal-clear audio
Why wrong: Sounds too modern, loses retro charm
Instead: Downsample to 22kHz, apply 8-bit quantization
表现:48kHz、24-bit的超清音频
问题:过于现代,失去复古魅力
正确做法:降采样至22kHz,应用8-bit量化
Anti-Pattern: Long Reverb Tails
误区:长混响尾音
What it looks like: Sounds echoing in a cathedral
Why wrong: Win31 sounds were DRY or short room
Instead: No reverb or <100ms decay
表现:音效带有大教堂般的回声
问题:Win31音效为干声或短房间混响
正确做法:无混响或混响衰减<100毫秒
Anti-Pattern: Sub-Bass
误区:低音音效
What it looks like: Deep rumbling under 100Hz
Why wrong: 90s PC speakers couldn't reproduce sub-bass
Instead: Cut everything below 200Hz
表现:包含100Hz以下的低沉轰鸣
问题:90年代PC音箱无法还原低音
正确做法:切除200Hz以下的所有频率
Anti-Pattern: Copying Microsoft Sounds
误区:直接使用微软音效
What it looks like: Using actual CHIMES.WAV or TADA.WAV
Why wrong: Copyright infringement
Instead: Create inspired alternatives with CC-licensed sources
表现:使用原版CHIMES.WAV或TADA.WAV
问题:侵犯版权
正确做法:使用CC授权资源创作启发自原版的替代音效
Anti-Pattern: Too Many Sounds
误区:音效过多
What it looks like: Every micro-interaction makes noise
Why wrong: Becomes annoying, fatiguing
Instead: Sounds for primary actions only, user toggle for audio
表现:每一个微交互都发出声音
问题:变得烦人、容易引起疲劳
正确做法:仅为核心操作添加音效,提供用户开关选项
Sound Level Guidelines
音量标准指南
| Category | Level | Notes |
|---|---|---|
| UI feedback | -24 to -18 dB | Subtle, never intrusive |
| Notifications | -18 to -12 dB | Attention-getting but not loud |
| Errors | -15 to -9 dB | Noticeable but not jarring |
| System sounds | -12 to -6 dB | Major events (startup/shutdown) |
Always provide:
- Global sound toggle (on/off)
- Volume slider (0-100%)
- Respect system silent mode
| 类别 | 音量 | 说明 |
|---|---|---|
| UI反馈 | -24 至 -18 dB | 轻微,绝不突兀 |
| 通知提示 | -18 至 -12 dB | 吸引注意但不过于响亮 |
| 错误提示 | -15 至 -9 dB | 明显但不刺耳 |
| 系统音效 | -12 至 -6 dB | 重大事件(启动/关机) |
必须提供:
- 全局音效开关(开/关)
- 音量滑块(0-100%)
- 尊重系统静音模式
Quick Implementation Checklist
快速实施检查清单
- Create Win31SoundManager class
- Load CC-licensed base sounds
- Add procedural fallbacks (ding, chime)
- Implement haptic pairing for mobile
- Add global sound toggle
- Test with Win31 visual theme
- Add attribution for CC sounds
- Verify sample rates (22kHz max)
- 创建Win31SoundManager类
- 加载CC授权基础音效
- 添加程序化备选音效(叮声、钟鸣声)
- 实现移动设备触觉配对
- 添加全局音效开关
- 结合Win31视觉主题测试
- 添加CC音效署名
- 验证采样率(最高22kHz)
Integrates With
可集成工具
- windows-3-1-web-designer - Visual + audio Win31 experience
- sound-engineer - Advanced spatial audio if needed
- mobile-ux-optimizer - Touch + haptic + audio coordination
- pwa-expert - Offline sound caching
Core insight: Win31 sounds were satisfying because they were SIMPLE—short, bright, lo-fi tones that gave immediate feedback without being distracting. The 8-bit quantization and limited frequency response added warmth, not harshness. Capture that spirit with CC-licensed alternatives, never copies.
Remember: Always include a sound toggle. Never play sounds without user consent. Pair audio with haptics on mobile for maximum satisfaction.
- windows-3-1-web-designer - 视觉+音频的Win31完整体验
- sound-engineer - 如需高级空间音频支持
- mobile-ux-optimizer - 触摸+触觉+音频协同优化
- pwa-expert - 离线音效缓存
核心见解:Win31音效令人愉悦的原因在于其简洁性——短促、明亮的低保真音调,能立即提供反馈且不会分散注意力。8-bit量化和有限的频率响应带来了温暖感,而非刺耳感。请使用CC授权的替代音效捕捉这种精髓,绝不直接复制原版。
注意:务必提供音效开关。绝不在未经用户同意的情况下播放音效。在移动设备上结合触觉反馈以获得最佳体验。