PySDL3 & OpenGL: Audio Integration PySDL3 и OpenGL: Интеграция аудио
A guide to initializing audio via SDL3_mixer while maintaining an OpenGL rendering context. Руководство по инициализации аудио через SDL3_mixer при сохранении контекста рендеринга OpenGL.
1. Installation 1. Установка
Ensure you have Python installed. Install PySDL3 and PyOpenGL using pip:
Убедитесь, что у вас установлен Python. Установите PySDL3 и PyOpenGL через pip:
pip install PySDL3 PyOpenGL
2. Assets 2. Ресурсы
Before creating the files, download the required asset: Перед созданием файлов скачайте необходимый ресурс:
- Download the WAV file: Picked Coin Echo 2.zip Скачайте WAV-файл: Picked Coin Echo 2.zip
- Note: This is a free file taken from this link. Примечание. Это бесплатный файл, который был взят по ссылке.
3. Project Structure 3. Структура проекта
pysdl3-mixer-opengl-app/
├── assets/audio/
│ └── Picked Coin Echo 2.wav
└── main.py
4. Source Code (OpenGL + Audio) 4. Исходный код (OpenGL + Аудио)
Combine video and audio initialization within the SDL_AppInit callback:
Объедините инициализацию видео и аудио в обратном вызове SDL_AppInit:
import os
import ctypes
import OpenGL.GL as gl
os.environ["SDL_MAIN_USE_CALLBACKS"] = "1"
os.environ["SDL_RENDER_DRIVER"] = "opengl"
import sdl3
# Global pointers for state
window = None
gl_context = None
mixer = None
audio = None
track = None
@sdl3.SDL_AppInit_func
def SDL_AppInit(appstate, argc, argv):
global window, gl_context, mixer, audio, track
# Initialize Video AND Audio
if not sdl3.SDL_Init(sdl3.SDL_INIT_VIDEO | sdl3.SDL_INIT_AUDIO):
return sdl3.SDL_APP_FAILURE
# OpenGL Setup
sdl3.SDL_GL_SetAttribute(sdl3.SDL_GL_MULTISAMPLEBUFFERS, 1)
sdl3.SDL_GL_SetAttribute(sdl3.SDL_GL_MULTISAMPLESAMPLES, 2)
window = sdl3.SDL_CreateWindow(b"PySDL3 OpenGL + Audio", 350, 350, sdl3.SDL_WINDOW_OPENGL)
gl_context = sdl3.SDL_GL_CreateContext(window)
sdl3.SDL_GL_SetSwapInterval(1)
# Audio Setup (SDL3_mixer)
if not sdl3.MIX_Init():
return sdl3.SDL_APP_FAILURE
mixer = sdl3.MIX_CreateMixerDevice(sdl3.SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, None)
if not mixer:
return sdl3.SDL_APP_FAILURE
audio = sdl3.MIX_LoadAudio(mixer, b"assets/audio/Picked Coin Echo 2.wav", True)
if not audio:
return sdl3.SDL_APP_FAILURE
track = sdl3.MIX_CreateTrack(mixer)
sdl3.MIX_SetTrackAudio(track, audio)
sdl3.MIX_PlayTrack(track, 0)
return sdl3.SDL_APP_CONTINUE
@sdl3.SDL_AppEvent_func
def SDL_AppEvent(appstate, event):
if sdl3.SDL_DEREFERENCE(event).type == sdl3.SDL_EVENT_QUIT:
return sdl3.SDL_APP_SUCCESS
return sdl3.SDL_APP_CONTINUE
@sdl3.SDL_AppIterate_func
def SDL_AppIterate(appstate):
gl.glClearColor(0.2, 0.2, 0.2, 1)
gl.glClear(gl.GL_COLOR_BUFFER_BIT)
sdl3.SDL_GL_SwapWindow(window)
return sdl3.SDL_APP_CONTINUE
@sdl3.SDL_AppQuit_func
def SDL_AppQuit(appstate, result):
global gl_context, track, audio, mixer
if track: sdl3.MIX_DestroyTrack(track)
if audio: sdl3.MIX_DestroyAudio(audio)
if mixer: sdl3.MIX_DestroyMixer(mixer)
sdl3.MIX_Quit()
if gl_context: sdl3.SDL_GL_DestroyContext(gl_context)
if window: sdl3.SDL_DestroyWindow(window)
sdl3.SDL_Quit()
5. Running the Application 5. Запуск приложения
Run the script via your terminal:
Запустите скрипт через терминал:
python main.py
Support My Work Поддержать проект
If these tutorials helped you, consider buying me a coffee! Если эти туториалы вам помогли, вы можете поддержать автора.
Sberbank (Russia only) Сбербанк (только для РФ)
Direct transfer via phone number (Russia only) Перевод по номеру телефона (только для РФ)
USDT TRC20
Support via Cryptocurrency Поддержка криптовалютой