Мое приложение использует SDL2 для вывода данных о погоде в окно, и я хотел бы бесконечно воспроизводить музыку в фоновом режиме из сгенерированной очереди. Я сделал эту часть, но возникает проблема с загрузкой музыки. Каждый раз, когда я пытаюсь загрузить песню в очередь, она указывает нераспознанный аудиоформат. Вот как выглядит мой код.
Строки 277-280, когда я инициализирую SDL для аудио и видео. Работает отлично.
if err := sdl.Init(sdl.INIT_AUDIO | sdl.INIT_VIDEO); err != nil {
log.Fatalf("Failed to initialize SDL: %s", err)
}
defer sdl.Quit()
Строки с 282 по 285, когда я запускаю микшер. Тоже отлично работает.
if err := mix.Init(mix.INIT_FLAC | mix.INIT_OGG); err != nil {
log.Fatalf("Failed to initialize mixer: %s", err)
}
defer mix.Quit()
Строки 292-305, когда я заполняю музыкальную очередь. Также работает нормально.
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
}
Вскоре после этого, строки 307-314, когда я пытаюсь загрузить каждый файл в очереди. Вот здесь и возникают проблемы.
for _, file := range music {
music, err := mix.LoadMUS(file)
if err != nil {
log.Fatalf("Failed to load music: %s", err)
continue
}
defer music.Free()
}
Когда в моей программе есть приведенный выше код, Go печатает это.
2023/03/30 19:57:18 Failed to load music: Unrecognized audio format
Я пытаюсь загрузить файлы FLAC, преобразованные из FFMPEG. Я также пытался использовать файлы MP3 и файлы WAV (изменив флаги инициализации и файлы в ресурсах на их рабочие аналоги), но они также не работают.
Если это поможет, я использую ОС Windows 11, и я использую MSYS2, чтобы модуль Go SDL мог использовать библиотеки SDL2. Я также компилирую свой код, используя следующую команду.
go build -ldflags = "-s -w" -gcflags = "-trimpath=$PWD" -race main.go
Я импортирую следующее как таковое import ( "encoding/json" "encoding/xml" "fmt" "io/ioutil" "log" "net/http" "os" "path/filepath" "strings" "time" "github.com/veandco/go-sdl2/mix" "github.com/veandco/go-sdl2/sdl" "github.com/veandco/go-sdl2/ttf" ) Каждый второй модуль — это модуль, необходимый для работы приложения.

Перед загрузкой звуков необходимо открыть аудиоустройство. Вызовите mix.OpenAudio или mix.OpenAudioDevice с соответствующими параметрами, например.
mix.OpenAudio(48000, sdl.AUDIO_S16, 2, 4096);
Как вы импортируете sdl и смешиваете?