Heim > Backend-Entwicklung > Golang > 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
Freigeben: 2024-02-09 09:24:29
nach vorne
777 Leute haben es durchsucht

无法使用 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()
Nach dem Login kopieren

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()
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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()
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage