PySDL3 Desktop: SDL3_mixer Setup PySDL3 для Desktop: Настройка SDL3_mixer

A guide to playing audio in your PySDL3 applications. Руководство по воспроизведению аудио в ваших приложениях PySDL3.

1. Installation 1. Установка

PySDL3 includes the mixer library by default. Ensure your environment is ready:

PySDL3 по умолчанию включает в себя библиотеку mixer. Убедитесь, что ваша среда готова:

pip install pysdl3

2. Assets 2. Ресурсы

Before creating the files, download the required asset: Перед созданием файлов скачайте необходимый ресурс:

3. Project Structure 3. Структура проекта

pysdl3-mixer-app/
├── assets/audio/
│   └── Picked Coin Echo 2.wav
└── main.py

4. Source Code (Audio Playback) 4. Исходный код (Воспроизведение аудио)

import ctypes
import os

# Required for the SDL3 Callback-based App framework
os.environ["SDL_MAIN_USE_CALLBACKS"] = "1"
os.environ["SDL_RENDER_DRIVER"] = "opengl"

import sdl3

window = ctypes.POINTER(sdl3.SDL_Window)()
mixer = ctypes.POINTER(sdl3.MIX_Mixer)()
audio = ctypes.POINTER(sdl3.MIX_Audio)()
track = ctypes.POINTER(sdl3.MIX_Track)()

@sdl3.SDL_AppInit_func
def SDL_AppInit(appstate, argc, argv):
    global mixer, audio, track, window
    
    if not sdl3.SDL_Init(sdl3.SDL_INIT_VIDEO | sdl3.SDL_INIT_AUDIO):
        return sdl3.SDL_APP_FAILURE

    if not sdl3.MIX_Init():
        return sdl3.SDL_APP_FAILURE

    mixer = sdl3.MIX_CreateMixerDevice(sdl3.SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, None)
    if not mixer:
        sdl3.SDL_Log(b"Failed to create mixer")
        return sdl3.SDL_APP_FAILURE

    window = sdl3.SDL_CreateWindow(b"PySDL3 Mixer", 400, 300, 0)

    audio_path = b"assets/audio/Picked Coin Echo 2.wav"
    audio = sdl3.MIX_LoadAudio(mixer, audio_path, True)
    if not audio:
        sdl3.SDL_Log(b"Failed to load audio")
        return sdl3.SDL_APP_FAILURE

    track = sdl3.MIX_CreateTrack(mixer)
    if not track:
        return sdl3.SDL_APP_FAILURE

    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):
    return sdl3.SDL_APP_CONTINUE

@sdl3.SDL_AppQuit_func
def SDL_AppQuit(appstate, result):
    # Cleanup in correct order
    if track: sdl3.MIX_DestroyTrack(track)
    if audio: sdl3.MIX_DestroyAudio(audio)
    if mixer: sdl3.MIX_DestroyMixer(mixer)
    sdl3.MIX_Quit()
    sdl3.SDL_Quit()

5. Running the Application 5. Запуск приложения

py main.py

Support My Work Поддержать проект

If these tutorials helped you, consider buying me a coffee! Если эти туториалы вам помогли, вы можете поддержать автора.

Sberbank

Sberbank SBP QR Code

Direct transfer via phone number Перевод по номеру телефона

+7 (917) 212-29-59

Bybit (USDT TRC20)

Bybit USDT TRC20 QR Code

Support via Cryptocurrency Поддержка криптовалютой

TMtY1YifNf6FKvgeFmqKGQR4NStKr3csGp