Skip to content

Commit 467f83a

Browse files
Dynamic Music Generator Script Added
1 parent 0941df0 commit 467f83a

File tree

3 files changed

+243
-0
lines changed

3 files changed

+243
-0
lines changed

Dynamic Music Generator/README.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Dynamic Music Generator Script
2+
3+
The Dynamic Music Generator is a Python script designed to enhance the audio experience in games or applications by dynamically changing background music based on in-game events. This creates an immersive environment where the music adapts to the ongoing gameplay, adding to the overall player experience.
4+
5+
## Prerequisites
6+
7+
Before running the script, ensure you have the following:
8+
9+
- Python installed
10+
- Pygame library installed (`pip install pygame`)
11+
- Audio files for music elements (e.g., `element1.wav`, `element2.wav`) present in the same directory as the script
12+
13+
## Usage
14+
15+
1. Clone or download the script to your local machine.
16+
2. Place your audio files (music elements) in the same directory as the script.
17+
3. Run the script using the command: `python dynamic_music_generator.py`
18+
19+
The script will simulate in-game events and dynamically change the background music according to the event-music mappings defined in the script.
20+
21+
## Configuration
22+
23+
- Modify the `music_elements` list to include the filenames of your music elements.
24+
- Customize the `event_music_mapping` dictionary to associate events with specific music elements. You can add more events and mappings as needed.
25+
26+
## Notes
27+
28+
- This script is a basic implementation and can be further extended and refined to suit your specific requirements.
29+
- Make sure to handle any licensing and rights associated with the audio files you use.
30+
- Adjust the simulated delays and logic as per your game's pace and context.
31+
- Remember that real-world implementation might require integration with your game's logic and audio management system.
32+
33+
## Acknowledgments
34+
35+
This script was inspired by the idea of creating dynamic and adaptive audio experiences for games and interactive applications.
36+
37+
## Contributing
38+
39+
If you have any ideas, improvements, or bug fixes, feel free to open an issue or submit a pull request. We appreciate your contributions!
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
import pygame
2+
import random
3+
import time
4+
5+
# Initialize pygame and mixer
6+
pygame.init()
7+
pygame.mixer.init()
8+
9+
# Define musical elements
10+
music_elements = [
11+
"element1.wav",
12+
"element2.wav",
13+
"element3.wav",
14+
"element4.wav",
15+
"element5.wav",
16+
"element6.wav",
17+
"element7.wav",
18+
"element8.wav",
19+
"element9.wav",
20+
"element10.wav",
21+
"element11.wav",
22+
"element12.wav",
23+
"element13.wav",
24+
"element14.wav",
25+
"element15.wav",
26+
"element16.wav",
27+
"element17.wav",
28+
"element18.wav",
29+
"element19.wav",
30+
"element20.wav",
31+
"element21.wav",
32+
"element22.wav",
33+
"element23.wav",
34+
"element24.wav",
35+
"element25.wav",
36+
"element26.wav",
37+
"element27.wav",
38+
"element28.wav",
39+
"element29.wav",
40+
"element30.wav",
41+
"element31.wav",
42+
"element32.wav",
43+
"element33.wav",
44+
"element34.wav",
45+
"element35.wav",
46+
"element36.wav",
47+
"element37.wav",
48+
"element38.wav",
49+
"element39.wav",
50+
"element40.wav",
51+
"element41.wav",
52+
"element42.wav",
53+
"element43.wav",
54+
"element44.wav",
55+
"element45.wav",
56+
"element46.wav",
57+
"element47.wav",
58+
"element48.wav",
59+
"element49.wav",
60+
"element50.wav",
61+
"element51.wav",
62+
"element52.wav",
63+
"element53.wav",
64+
"element54.wav",
65+
"element55.wav",
66+
"element56.wav",
67+
"element57.wav",
68+
"element58.wav",
69+
"element59.wav",
70+
"element60.wav",
71+
"element61.wav",
72+
"element62.wav",
73+
"element63.wav",
74+
"element64.wav",
75+
"element65.wav",
76+
"element66.wav",
77+
"element67.wav",
78+
"element68.wav",
79+
"element69.wav",
80+
"element70.wav",
81+
"element71.wav",
82+
"element72.wav",
83+
"element73.wav",
84+
"element74.wav",
85+
"element75.wav",
86+
"element76.wav",
87+
"element77.wav",
88+
"element78.wav",
89+
"element79.wav",
90+
"element80.wav",
91+
"element81.wav",
92+
"element82.wav",
93+
"element83.wav",
94+
"element84.wav",
95+
"element85.wav",
96+
"element86.wav",
97+
"element87.wav",
98+
"element88.wav",
99+
"element89.wav",
100+
"element90.wav",
101+
"element91.wav",
102+
"element92.wav",
103+
"element93.wav",
104+
"element94.wav",
105+
"element95.wav",
106+
"element96.wav",
107+
"element97.wav",
108+
"element98.wav",
109+
"element99.wav",
110+
"element100.wav"
111+
]
112+
113+
# Load the music elements
114+
loaded_elements = [pygame.mixer.Sound(element) for element in music_elements]
115+
116+
# Play the initial music element
117+
current_element = random.choice(loaded_elements)
118+
current_element.play()
119+
120+
event_music_mapping = {
121+
"event1": ["element1.wav", "element2.wav"],
122+
"event2": ["element3.wav", "element4.wav"],
123+
"event3": ["element5.wav", "element6.wav"],
124+
"event4": ["element7.wav", "element8.wav"],
125+
"event5": ["element9.wav", "element10.wav"],
126+
"event6": ["element11.wav", "element12.wav"],
127+
"event7": ["element13.wav", "element14.wav"],
128+
"event8": ["element15.wav", "element16.wav"],
129+
"event9": ["element17.wav", "element18.wav"],
130+
"event10": ["element19.wav", "element20.wav"],
131+
"event11": ["element21.wav", "element22.wav"],
132+
"event12": ["element23.wav", "element24.wav"],
133+
"event13": ["element25.wav", "element26.wav"],
134+
"event14": ["element27.wav", "element28.wav"],
135+
"event15": ["element29.wav", "element30.wav"],
136+
"event16": ["element31.wav", "element32.wav"],
137+
"event17": ["element33.wav", "element34.wav"],
138+
"event18": ["element35.wav", "element36.wav"],
139+
"event19": ["element37.wav", "element38.wav"],
140+
"event20": ["element39.wav", "element40.wav"],
141+
"event21": ["element41.wav", "element42.wav"],
142+
"event22": ["element43.wav", "element44.wav"],
143+
"event23": ["element45.wav", "element46.wav"],
144+
"event24": ["element47.wav", "element48.wav"],
145+
"event25": ["element49.wav", "element50.wav"],
146+
"event26": ["element51.wav", "element52.wav"],
147+
"event27": ["element53.wav", "element54.wav"],
148+
"event28": ["element55.wav", "element56.wav"],
149+
"event29": ["element57.wav", "element58.wav"],
150+
"event30": ["element59.wav", "element60.wav"],
151+
"event31": ["element61.wav", "element62.wav"],
152+
"event32": ["element63.wav", "element64.wav"],
153+
"event33": ["element65.wav", "element66.wav"],
154+
"event34": ["element67.wav", "element68.wav"],
155+
"event35": ["element69.wav", "element70.wav"],
156+
"event36": ["element71.wav", "element72.wav"],
157+
"event37": ["element73.wav", "element74.wav"],
158+
"event38": ["element75.wav", "element76.wav"],
159+
"event39": ["element77.wav", "element78.wav"],
160+
"event40": ["element79.wav", "element80.wav"],
161+
"event41": ["element81.wav", "element82.wav"],
162+
"event42": ["element83.wav", "element84.wav"],
163+
"event43": ["element85.wav", "element86.wav"],
164+
"event44": ["element87.wav", "element88.wav"],
165+
"event45": ["element89.wav", "element90.wav"],
166+
"event46": ["element91.wav", "element92.wav"],
167+
"event47": ["element93.wav", "element94.wav"],
168+
"event48": ["element95.wav", "element96.wav"],
169+
"event49": ["element97.wav", "element98.wav"],
170+
"event50": ["element99.wav", "element100.wav"],
171+
}
172+
173+
# Simulated in-game events
174+
def simulate_game_events():
175+
while True:
176+
yield random.choice(list(event_music_mapping.keys()))
177+
178+
# Main loop
179+
def main():
180+
events = simulate_game_events()
181+
182+
for event in events:
183+
# Handle the in-game event and update the music
184+
if event in event_music_mapping:
185+
event_music = event_music_mapping[event]
186+
new_element = random.choice(event_music)
187+
else:
188+
new_element = random.choice(music_elements)
189+
190+
if new_element != current_element:
191+
current_element.stop()
192+
current_element = pygame.mixer.Sound(new_element)
193+
current_element.play()
194+
195+
# Simulated delay between events
196+
time.sleep(random.uniform(5, 15))
197+
198+
if __name__ == "__main__":
199+
try:
200+
main()
201+
finally:
202+
pygame.quit()
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
pygame
2+
random

0 commit comments

Comments
 (0)