101 lines
3.7 KiB
Python
101 lines
3.7 KiB
Python
"""checked with raylib-python-cffi 5.5.0.2
|
|
raylib [audio] example - Music playing (streaming)
|
|
Example complexity rating: [★☆☆☆] 1/4
|
|
Example originally created with raylib 1.3, last time updated with raylib 4.0
|
|
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) 2015-2025 Ramon Santamaria (@raysan5)
|
|
|
|
This source has been converted from C raylib examples to Python.
|
|
"""
|
|
|
|
import pyray as rl
|
|
from pathlib import Path
|
|
|
|
THIS_DIR = Path(__file__).resolve().parent
|
|
|
|
|
|
# ------------------------------------------------------------------------------------
|
|
# Program main entry point
|
|
# ------------------------------------------------------------------------------------
|
|
def main():
|
|
# Initialization
|
|
# --------------------------------------------------------------------------------------
|
|
screen_width = 800
|
|
screen_height = 450
|
|
|
|
rl.init_window(
|
|
screen_width,
|
|
screen_height,
|
|
"raylib [audio] example - music playing (streaming)",
|
|
)
|
|
|
|
rl.init_audio_device() # Initialize audio device
|
|
|
|
music = rl.load_music_stream(str(THIS_DIR / "resources/country.mp3"))
|
|
|
|
rl.play_music_stream(music)
|
|
|
|
time_played = 0.0 # Time played normalized [0.0f..1.0f]
|
|
pause = False # Music playing paused
|
|
|
|
rl.set_target_fps(30) # Set our game to run at 30 frames-per-second
|
|
# --------------------------------------------------------------------------------------
|
|
|
|
# Main game loop
|
|
while not rl.window_should_close(): # Detect window close button or ESC key
|
|
# Update
|
|
# ----------------------------------------------------------------------------------
|
|
rl.update_music_stream(music) # Update music buffer with new stream data
|
|
|
|
# Restart music playing (stop and play)
|
|
if rl.is_key_pressed(rl.KEY_SPACE):
|
|
rl.stop_music_stream(music)
|
|
rl.play_music_stream(music)
|
|
|
|
# Pause/Resume music playing
|
|
if rl.is_key_pressed(rl.KEY_P):
|
|
pause = not pause
|
|
|
|
if pause:
|
|
rl.pause_music_stream(music)
|
|
else:
|
|
rl.resume_music_stream(music)
|
|
|
|
# Get normalized time played for current music stream
|
|
time_played = rl.get_music_time_played(music) / rl.get_music_time_length(music)
|
|
|
|
if time_played > 1.0:
|
|
time_played = 1.0 # Make sure time played is no longer than music
|
|
# ----------------------------------------------------------------------------------
|
|
|
|
# Draw
|
|
# ----------------------------------------------------------------------------------
|
|
rl.begin_drawing()
|
|
|
|
rl.clear_background(rl.RAYWHITE)
|
|
|
|
rl.draw_text("MUSIC SHOULD BE PLAYING!", 255, 150, 20, rl.LIGHTGRAY)
|
|
|
|
rl.draw_rectangle(200, 200, 400, 12, rl.LIGHTGRAY)
|
|
rl.draw_rectangle(200, 200, int(time_played * 400.0), 12, rl.MAROON)
|
|
rl.draw_rectangle_lines(200, 200, 400, 12, rl.GRAY)
|
|
|
|
rl.draw_text("PRESS SPACE TO RESTART MUSIC", 215, 250, 20, rl.LIGHTGRAY)
|
|
rl.draw_text("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, rl.LIGHTGRAY)
|
|
|
|
rl.end_drawing()
|
|
# ----------------------------------------------------------------------------------
|
|
|
|
# De-Initialization
|
|
# --------------------------------------------------------------------------------------
|
|
rl.unload_music_stream(music) # Unload music stream buffers from RAM
|
|
|
|
rl.close_audio_device() # Close audio device (music streaming is automatically stopped)
|
|
|
|
rl.close_window() # Close window and OpenGL context
|
|
# --------------------------------------------------------------------------------------
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|