Maison > développement back-end > Golang > le corps du texte

Impossible d'initialiser la musique à l'aide de SDL2_Mixer, signalant un format audio non reconnu

WBOY
Libérer: 2024-02-09 09:24:29
avant
746 Les gens l'ont consulté

无法使用 SDL2_Mixer 初始化音乐,报告无法识别的音频格式

l'éditeur php Banana a rencontré un problème lors de l'utilisation de SDL2_Mixer pour initialiser la musique, et le rapport montrait un format audio non reconnu. Ce problème peut affecter la fonction de lecture de musique et causer des désagréments aux utilisateurs. Afin de résoudre ce problème, nous devons trouver la cause du format audio non reconnu et prendre les mesures appropriées pour y remédier. Ce qui suit présente quelques causes et solutions possibles, dans l’espoir d’aider les développeurs rencontrant des problèmes similaires.

Contenu de la question

Mon application utilise sdl2 pour restituer les données météorologiques dans une fenêtre et je souhaite jouer indéfiniment de la musique en arrière-plan à partir de la file d'attente générée. J'ai fait cette partie, mais c'est le chargement de la musique qui pose problème. Chaque fois que j'essaie de charger une chanson dans la file d'attente, un format audio non reconnu est indiqué. Voici à quoi ressemble mon code.

Lignes 277 à 280, lorsque j'initialise le sdl pour l'audio et la vidéo. Fonctionne bien.

if err := sdl.init(sdl.init_audio | sdl.init_video); err != nil {
    log.fatalf("failed to initialize sdl: %s", err)
}
defer sdl.quit()
Copier après la connexion

Lignes 282 à 285, lorsque j'initialise le mixeur. L'effet est également très bon.

if err := mix.init(mix.init_flac | mix.init_ogg); err != nil {
    log.fatalf("failed to initialize mixer: %s", err)
}
defer mix.quit()
Copier après la connexion

Lignes 292 à 305 lorsque je remplis la file d'attente musicale. Fonctionne également très bien.

var music []string

err = filepath.walk("assets/music", func(path string, info os.fileinfo, err error) error {
    if err != nil {
        return err
    }
    if !info.isdir() && (filepath.ext(path) == ".flac" || filepath.ext(path) == ".ogg") {
        music = append(music, path)
    }
    return nil
})

if err != nil {
    log.fatalf("failed to queue music: %s", err)
    return
}
Copier après la connexion

Un peu plus tard, lignes 307 à 314, lorsque j'essaie de charger tous les fichiers de la file d'attente. C'est là que le problème se pose.

for _, file := range music {
    music, err := mix.loadmus(file)
    if err != nil {
        log.fatalf("failed to load music: %s", err)
        continue
    }
    defer music.free()
}
Copier après la connexion

Quand j'ai le code ci-dessus dans mon programme, imprime ce code.

2023/03/30 19:57:18 failed to load music: unrecognized audio format
Copier après la connexion

J'essaie de charger un fichier flac converti à partir de ffmpeg. J'ai également essayé d'utiliser des fichiers mp3 et des fichiers wav (en remplaçant les indicateurs d'initialisation et les fichiers des actifs par leurs homologues fonctionnels), mais ils n'ont pas bien fonctionné.

Si cela peut vous aider, le système d'exploitation que j'utilise est Windows 11 et j'utilise msys2 pour permettre au module sdl de go d'utiliser la bibliothèque sdl2. J'utilise également la commande suivante pour compiler mon code.

go build -ldflags="-s -w" -gcflags="-trimpath=$PWD" -race main.go
Copier après la connexion

Solution de contournement

Vous devez ouvrir le périphérique audio avant de charger des sons. Appelez mix.openaudiomix.openaudiodevice avec les paramètres appropriés, par ex.

mix.OpenAudio(48000, sdl.AUDIO_S16, 2, 4096);
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!