Heim  >  Artikel  >  Backend-Entwicklung  >  Musik kann mit SDL2_Mixer nicht initialisiert werden, es wird ein nicht erkanntes Audioformat gemeldet

Musik kann mit SDL2_Mixer nicht initialisiert werden, es wird ein nicht erkanntes Audioformat gemeldet

WBOY
WBOYnach vorne
2024-02-09 09:24:29744Durchsuche

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

php-Editor Banana ist bei der Verwendung von SDL2_Mixer zum Initialisieren von Musik auf ein Problem gestoßen, und der Bericht zeigte ein nicht erkanntes Audioformat an. Dieses Problem kann die Musikwiedergabefunktion beeinträchtigen und den Benutzern Unannehmlichkeiten bereiten. Um dieses Problem zu lösen, müssen wir die Ursache des nicht erkannten Audioformats finden und geeignete Maßnahmen zur Behebung ergreifen. Im Folgenden werden einige mögliche Ursachen und Lösungen vorgestellt, in der Hoffnung, Entwicklern zu helfen, die auf ähnliche Probleme stoßen.

Frageninhalt

Meine Anwendung verwendet sdl2, um Wetterdaten in einem Fenster darzustellen, und ich möchte im Hintergrund unbegrenzt Musik aus der generierten Warteschlange abspielen. Ich habe diesen Teil erledigt, aber beim Laden der Musik tritt das Problem auf. Jedes Mal, wenn ich versuche, einen Song in die Warteschlange zu laden, wird mir angezeigt, dass das Audioformat nicht erkannt wurde. So sieht mein Code aus.

Zeile 277 – 280, wenn ich das SDL für Audio und Video initialisiere. Funktioniert gut.

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

Zeilen 282 bis 285, wenn ich den Mixer initialisiere. Auch die Wirkung ist sehr gut.

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

Zeilen 292–305, wenn ich die Musikwarteschlange fülle. Funktioniert auch gut.

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
}

Eine Weile später, Zeilen 307 – 314, als ich versuche, jede Datei in der Warteschlange zu laden. Hier entsteht das Problem.

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

Wenn ich den obigen Code in meinem Programm habe, druckt go diesen Code aus.

2023/03/30 19:57:18 failed to load music: unrecognized audio format

Ich versuche, eine aus ffmpeg konvertierte FLAC-Datei zu laden. Ich habe auch versucht, MP3- und WAV-Dateien zu verwenden (indem ich die Initialisierungsflags und Dateien in den Assets in ihre funktionierenden Gegenstücke geändert habe), aber sie haben nicht gut funktioniert.

Wenn es hilft, ist das Betriebssystem, das ich verwende, Windows 11, und ich verwende msys2, um das SDL-Modul von Go für die Nutzung der SDL2-Bibliothek zu aktivieren. Ich verwende auch den folgenden Befehl, um meinen Code zu kompilieren.

go build -ldflags="-s -w" -gcflags="-trimpath=$PWD" -race main.go

Problemumgehung

Sie müssen das Audiogerät öffnen, bevor Sie Sounds laden können. Rufen Sie mix.openaudiomix.openaudiodevice mit entsprechenden Parametern auf, z.B.

mix.OpenAudio(48000, sdl.AUDIO_S16, 2, 4096);

Das obige ist der detaillierte Inhalt vonMusik kann mit SDL2_Mixer nicht initialisiert werden, es wird ein nicht erkanntes Audioformat gemeldet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen