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. Запуск приложения

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) Сбербанк (только для РФ)

Sberbank SBP QR Code

Direct transfer via phone number (Russia only) Перевод по номеру телефона (только для РФ)

+7 (917) 212-29-59

USDT TRC20

USDT TRC20 QR Code

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

TMtY1YifNf6FKvgeFmqKGQR4NStKr3csGp