86 lines
3.2 KiB
Python
86 lines
3.2 KiB
Python
"""checked with raylib-python-cffi 5.5.0.2
|
|
raylib [audio] example - Playing sound multiple times
|
|
Example complexity rating: [★★☆☆] 2/4
|
|
Example originally created with raylib 4.6, last time updated with raylib 4.6
|
|
Example contributed by Jeffery Myers (@JeffM2501) and reviewed by Ramon Santamaria (@raysan5)
|
|
Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
|
|
BSD-like license that allows static linking with closed source software
|
|
Copyright (c) 2023-2025 Jeffery Myers (@JeffM2501)
|
|
|
|
This source has been converted from C raylib examples to Python.
|
|
"""
|
|
|
|
from typing import List
|
|
|
|
import pyray as rl
|
|
from pathlib import Path
|
|
|
|
# Get the directory where this script is located
|
|
THIS_DIR = Path(__file__).resolve().parent
|
|
|
|
MAX_SOUNDS = 10
|
|
sound_array: List[rl.Sound] = []
|
|
current_sound = 0
|
|
|
|
# Initialization
|
|
# --------------------------------------------------------------------------------------
|
|
screen_width = 800
|
|
screen_height = 450
|
|
|
|
rl.init_window(
|
|
screen_width, screen_height, "raylib [audio] example - playing sound multiple times"
|
|
)
|
|
|
|
rl.init_audio_device() # Initialize audio device
|
|
|
|
# Load the sound list
|
|
sound_array.append(
|
|
rl.load_sound(str(THIS_DIR / "resources/sound.wav"))
|
|
) # Load WAV audio file into the first slot as the 'source' sound
|
|
# this sound owns the sample data
|
|
for i in range(1, MAX_SOUNDS):
|
|
sound_array.append(
|
|
rl.load_sound_alias(sound_array[0])
|
|
) # Load an alias of the sound into slots 1-9
|
|
# These do not own the sound data, but can be played
|
|
current_sound = 0 # Set the sound list to the start
|
|
|
|
rl.set_target_fps(60) # Set our game to run at 60 frames-per-second
|
|
# --------------------------------------------------------------------------------------
|
|
|
|
# Main game loop
|
|
while not rl.window_should_close(): # Detect window close button or ESC key
|
|
# Update
|
|
# ----------------------------------------------------------------------------------
|
|
if rl.is_key_pressed(rl.KeyboardKey.KEY_SPACE):
|
|
rl.play_sound(sound_array[current_sound]) # Play the next open sound slot
|
|
current_sound += 1 # Increment the sound slot
|
|
if (
|
|
current_sound >= MAX_SOUNDS
|
|
): # If the sound slot is out of bounds, go back to 0
|
|
current_sound = 0
|
|
|
|
# Note: a better way would be to look at the list for the first sound that is not playing and use that slot
|
|
# ----------------------------------------------------------------------------------
|
|
|
|
# Draw
|
|
# ----------------------------------------------------------------------------------
|
|
rl.begin_drawing()
|
|
|
|
rl.clear_background(rl.RAYWHITE)
|
|
|
|
rl.draw_text("Press SPACE to PLAY a WAV sound!", 200, 180, 20, rl.LIGHTGRAY)
|
|
|
|
rl.end_drawing()
|
|
# ----------------------------------------------------------------------------------
|
|
|
|
# De-Initialization
|
|
# --------------------------------------------------------------------------------------
|
|
for i in range(1, MAX_SOUNDS):
|
|
rl.unload_sound_alias(sound_array[i]) # Unload sound aliases
|
|
rl.unload_sound(sound_array[0]) # Unload source sound data
|
|
|
|
rl.close_audio_device() # Close audio device
|
|
|
|
rl.close_window() # Close window and OpenGL context
|
|
# --------------------------------------------------------------------------------------
|