Updated game speed

This commit is contained in:
2025-08-16 08:24:26 +02:00
parent d161b2c550
commit 71648fbaeb
20 changed files with 690 additions and 334 deletions

View File

@ -0,0 +1,118 @@
# Sound Effects Implementation
## Overview
This document describes the sound effects system implemented in the SDL C++ Tetris project, ported from the JavaScript version.
## Sound Effects Implemented
### 1. Line Clear Sounds
- **Basic Line Clear**: `clear_line.wav` - Plays for all line clears (1-4 lines)
- **Voice Feedback**: Plays after the basic sound with a slight delay
### 2. Voice Lines by Line Count
#### Single Line Clear
- No specific voice lines (only basic clear sound plays)
#### Double Line Clear (2 lines)
- `nice_combo.mp3` - "Nice combo"
- `you_fire.mp3` - "You're on fire"
- `well_played.mp3` - "Well played"
- `keep_that_ryhtm.mp3` - "Keep that rhythm" (note: typo preserved from original)
#### Triple Line Clear (3 lines)
- `great_move.mp3` - "Great move"
- `smooth_clear.mp3` - "Smooth clear"
- `impressive.mp3` - "Impressive"
- `triple_strike.mp3` - "Triple strike"
#### Tetris (4 lines)
- `amazing.mp3` - "Amazing"
- `you_re_unstoppable.mp3` - "You're unstoppable"
- `boom_tetris.mp3` - "Boom! Tetris!"
- `wonderful.mp3` - "Wonderful"
### 3. Level Up Sound
- `lets_go.mp3` - "Let's go" - Plays when the player advances to a new level
## Implementation Details
### Core Classes
1. **SoundEffect**: Handles individual sound file loading and playback
- Supports both WAV and MP3 formats
- Uses SDL3 audio streams for playback
- Volume control per sound effect
2. **SoundEffectManager**: Manages all sound effects
- Singleton pattern for global access
- Random selection from sound groups
- Master volume and enable/disable controls
### Audio Pipeline
1. **Loading**: Sound files are loaded during game initialization
- WAV files use SDL's native loading
- MP3 files use Windows Media Foundation (Windows only)
- All audio is converted to 16-bit stereo 44.1kHz
2. **Playback**: Uses SDL3 audio streams
- Each sound effect can be played independently
- Volume mixing with master volume control
- Non-blocking playback for game responsiveness
### Integration with Game Logic
- **Line Clear Callback**: Game class triggers sound effects when lines are cleared
- **Level Up Callback**: Triggered when player advances levels
- **Random Selection**: Multiple voice lines for same event are randomly selected
### Controls
- **M Key**: Toggle background music on/off
- **S Key**: Toggle sound effects on/off
- Settings popup shows current status of both music and sound effects
### JavaScript Compatibility
The implementation matches the JavaScript version exactly:
- Same sound files used
- Same triggering conditions (line counts, level ups)
- Same random selection behavior for voice lines
- Same volume levels and mixing
## Audio Files Structure
```
assets/music/
├── clear_line.wav # Basic line clear sound
├── nice_combo.mp3 # Double line voice
├── you_fire.mp3 # Double line voice
├── well_played.mp3 # Double line voice
├── keep_that_ryhtm.mp3 # Double line voice (typo preserved)
├── great_move.mp3 # Triple line voice
├── smooth_clear.mp3 # Triple line voice
├── impressive.mp3 # Triple line voice
├── triple_strike.mp3 # Triple line voice
├── amazing.mp3 # Tetris voice
├── you_re_unstoppable.mp3 # Tetris voice
├── boom_tetris.mp3 # Tetris voice
├── wonderful.mp3 # Tetris voice
└── lets_go.mp3 # Level up sound
```
## Technical Notes
### Platform Support
- **Windows**: Full MP3 support via Windows Media Foundation
- **Other platforms**: WAV support only (MP3 requires additional libraries)
### Performance
- All sounds are pre-loaded during initialization
- Minimal CPU overhead during gameplay
- SDL3 handles audio mixing and buffering
### Memory Usage
- Sound effects are kept in memory for instant playback
- Total memory usage approximately 50-100MB for all effects
- Memory is freed on application shutdown
## Future Enhancements
- Add sound effects for piece placement/movement
- Implement positional audio for stereo effects
- Add configurable volume levels per sound type
- Support for additional audio formats (OGG, FLAC)