Невозможно инициализировать музыку с помощью SDL2_Mixer, сообщает о нераспознанном аудиоформате

Мое приложение использует 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

Как вы импортируете sdl и смешиваете?

keltar 31.03.2023 06:04

Я импортирую следующее как таковое 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" ) Каждый второй модуль — это модуль, необходимый для работы приложения.

Javier Zayas 31.03.2023 21:57
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
2
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Перед загрузкой звуков необходимо открыть аудиоустройство. Вызовите mix.OpenAudio или mix.OpenAudioDevice с соответствующими параметрами, например.

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

Другие вопросы по теме