add audio example from @ashleysommer
This commit is contained in:
parent
15a4ee2beb
commit
599e5254c6
2 changed files with 172 additions and 0 deletions
172
examples/audio/audio_module_playing.py
Normal file
172
examples/audio/audio_module_playing.py
Normal file
|
@ -0,0 +1,172 @@
|
|||
"""
|
||||
|
||||
raylib [audio] example - playing
|
||||
|
||||
"""
|
||||
import dataclasses
|
||||
import pyray
|
||||
import raylib as rl
|
||||
from raylib.colors import (
|
||||
RAYWHITE,
|
||||
ORANGE,
|
||||
RED,
|
||||
GOLD,
|
||||
LIME,
|
||||
BLUE,
|
||||
VIOLET,
|
||||
BROWN,
|
||||
LIGHTGRAY,
|
||||
PINK,
|
||||
YELLOW,
|
||||
GREEN,
|
||||
SKYBLUE,
|
||||
PURPLE,
|
||||
BEIGE,
|
||||
MAROON,
|
||||
GRAY,
|
||||
BLACK
|
||||
)
|
||||
|
||||
|
||||
MAX_CIRCLES=64
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class CircleWave:
|
||||
position: 'rl.Vector2'
|
||||
radius: float
|
||||
alpha: float
|
||||
speed: float
|
||||
color: 'rl.Color'
|
||||
|
||||
|
||||
screenWidth = 800
|
||||
screenHeight = 450
|
||||
|
||||
rl.SetConfigFlags(rl.FLAG_MSAA_4X_HINT) # NOTE: Try to enable MSAA 4X
|
||||
|
||||
rl.InitWindow(screenWidth, screenHeight, b"raylib [audio] example - module playing (streaming)")
|
||||
|
||||
rl.InitAudioDevice() # Initialize audio device
|
||||
|
||||
colors = [ ORANGE, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK,
|
||||
YELLOW, GREEN, SKYBLUE, PURPLE, BEIGE ]
|
||||
|
||||
# Creates some circles for visual effect
|
||||
circles = []
|
||||
|
||||
for i in range(MAX_CIRCLES):
|
||||
rad = rl.GetRandomValue(10, 40)
|
||||
pos = pyray.Vector2(
|
||||
float(rl.GetRandomValue(rad, int(screenWidth) - rad)),
|
||||
float(rl.GetRandomValue(rad, int(screenHeight) - rad))
|
||||
)
|
||||
c = CircleWave(
|
||||
alpha=0.0,
|
||||
radius=float(rad),
|
||||
position=pos,
|
||||
speed=float(rl.GetRandomValue(1, 100))/2000.0,
|
||||
color=colors[rl.GetRandomValue(0, 13)]
|
||||
)
|
||||
circles.append(c)
|
||||
|
||||
music = rl.LoadMusicStream(b"resources/mini1111.xm")
|
||||
music.looping = False
|
||||
pitch = 1.0
|
||||
|
||||
rl.PlayMusicStream(music)
|
||||
timePlayed = 0.0
|
||||
pause = False
|
||||
|
||||
rl.SetTargetFPS(60) # Set our game to run at 60 frames-per-second
|
||||
|
||||
|
||||
# Main game loop
|
||||
while not rl.WindowShouldClose(): # Detect window close button or ESC key
|
||||
# Update
|
||||
#----------------------------------------------------------------------------------
|
||||
rl.UpdateMusicStream(music) # Update music buffer with new stream data
|
||||
|
||||
# Restart music playing (stop and play)
|
||||
if rl.IsKeyPressed(rl.KEY_SPACE):
|
||||
rl.StopMusicStream(music)
|
||||
rl.PlayMusicStream(music)
|
||||
pause = False
|
||||
|
||||
# Pause/Resume music playing
|
||||
if rl.IsKeyPressed(rl.KEY_P):
|
||||
pause = not pause
|
||||
if pause:
|
||||
rl.PauseMusicStream(music)
|
||||
else:
|
||||
rl.ResumeMusicStream(music)
|
||||
|
||||
|
||||
if rl.IsKeyDown(rl.KEY_DOWN):
|
||||
pitch -= 0.01
|
||||
elif rl.IsKeyDown(rl.KEY_UP):
|
||||
pitch += 0.01
|
||||
|
||||
rl.SetMusicPitch(music, pitch)
|
||||
|
||||
# Get timePlayed scaled to bar dimensions
|
||||
timePlayed = (rl.GetMusicTimePlayed(music) / rl.GetMusicTimeLength(music))*(screenWidth - 40)
|
||||
|
||||
# Color circles animation
|
||||
for i in range(MAX_CIRCLES):
|
||||
if pause:
|
||||
break
|
||||
|
||||
circles[i].alpha += circles[i].speed
|
||||
circles[i].radius += circles[i].speed*10.0
|
||||
|
||||
if circles[i].alpha > 1.0:
|
||||
circles[i].speed *= -1
|
||||
|
||||
if circles[i].alpha <= 0.0:
|
||||
circles[i].alpha = 0.0
|
||||
rad = rl.GetRandomValue(10, 40)
|
||||
pos = pyray.Vector2(
|
||||
float(rl.GetRandomValue(rad, int(screenWidth) - rad)),
|
||||
float(rl.GetRandomValue(rad, int(screenHeight) - rad))
|
||||
)
|
||||
circles[i].position = pos
|
||||
circles[i].radius = float(rad)
|
||||
circles[i].speed = float(rl.GetRandomValue(1, 100)) / 2000.0
|
||||
circles[i].color = colors[rl.GetRandomValue(0, 13)]
|
||||
|
||||
#----------------------------------------------------------------------------------
|
||||
|
||||
# Draw
|
||||
#----------------------------------------------------------------------------------
|
||||
pyray.begin_drawing()
|
||||
|
||||
pyray.clear_background(RAYWHITE)
|
||||
|
||||
for i in range(MAX_CIRCLES):
|
||||
pyray.draw_circle_v(circles[i].position, circles[i].radius, rl.Fade(circles[i].color, circles[i].alpha))
|
||||
|
||||
# Draw time bar
|
||||
pyray.draw_rectangle(20, screenHeight - 20 - 12, screenWidth - 40, 12, LIGHTGRAY)
|
||||
pyray.draw_rectangle(20, screenHeight - 20 - 12, int(timePlayed), 12, MAROON)
|
||||
pyray.draw_rectangle_lines(20, screenHeight - 20 - 12, screenWidth - 40, 12, GRAY)
|
||||
|
||||
# Draw help instructions
|
||||
pyray.draw_rectangle(20, 20, 425, 145, RAYWHITE)
|
||||
pyray.draw_rectangle_lines(20, 20, 425, 145, GRAY)
|
||||
pyray.draw_text("PRESS SPACE TO RESTART MUSIC", 40, 40, 20, BLACK)
|
||||
pyray.draw_text("PRESS P TO PAUSE/RESUME", 40, 70, 20, BLACK)
|
||||
pyray.draw_text("PRESS UP/DOWN TO CHANGE SPEED", 40, 100, 20, BLACK)
|
||||
pyray.draw_text(f"SPEED: {pitch}", 40, 130, 20, MAROON)
|
||||
|
||||
pyray.end_drawing()
|
||||
#----------------------------------------------------------------------------------
|
||||
|
||||
|
||||
# De-Initialization
|
||||
#--------------------------------------------------------------------------------------
|
||||
rl.UnloadMusicStream(music) # Unload music stream buffers from RAM
|
||||
|
||||
rl.CloseAudioDevice() # Close audio device (music streaming is automatically stopped)
|
||||
|
||||
rl.CloseWindow() # Close window and OpenGL context
|
BIN
examples/audio/resources/mini1111.xm
Normal file
BIN
examples/audio/resources/mini1111.xm
Normal file
Binary file not shown.
Reference in a new issue