Maison  >  Article  >  développement back-end  >  Impossible d'initialiser la musique à l'aide de SDL2_Mixer, signalant un format audio non reconnu

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

WBOY
WBOYavant
2024-02-09 09:24:29746parcourir

无法使用 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()

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()

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
}

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()
}

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

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

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);

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer