Звуки микшера SDL не воспроизводятся с помощью PlayChannel()C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Звуки микшера SDL не воспроизводятся с помощью PlayChannel()

Сообщение Гость »


Я создаю класс для взаимодействия с SDL Mixer на C++, чтобы я мог воспроизводить звуки в своем приложении. Однако, похоже, мои звуки не доигрались и я их вообще не слышу.

Вот как выглядит мой класс:

//Используемые стандартные библиотеки #include #include //Подключаем классы для библиотеки #include "classes/s_soundData.h" #include "classes/s_soundController.h" #include "classes/s_soundPlaylist.h" //SDL #include #include класс мойSoundClass { публика: /*** Переменные-члены ***/ unordered_map звуки; //Контейнер всех звуков unordered_map плейлисты; //Содержит все плейлисты, созданные с помощью библиотеки stevensSound. unordered_map soundControllers; //Контейнер всех звуковых контроллеров. Управляет громкостью и настройками воспроизведения звуков. /*** Конструкторы ***/ //Конструктор по умолчанию мойSoundClass() { //Инициализируем SDL если ( SDL_Init ( SDL_INIT_VIDEO | SDL_INIT_AUDIO ) < 0 ) { printf( "SDL не удалось инициализировать! Ошибка SDL: %s\n", SDL_GetError() ); } //Инициализируем SDL_mixer если ( Mix_OpenAudio ( 44100, MIX_DEFAULT_FORMAT, 2, 2048 ) < 0 ) { printf( "SDL_mixer не удалось инициализировать! Ошибка SDL_mixer: %s\n", Mix_GetError() ); } //Создаем музыку, звуковые эффекты и звуковые контроллеры по умолчанию soundControllers = { {"музыка", s_soundController("музыка",1)}, {"sfx", s_soundController("sfx",1)}, {"по умолчанию", s_soundController()} }; //Без параметров мы просто инициализируем наш звуковой контейнер как пустой звуки = {}; //Также инициализируем наш контейнер плейлистов, чтобы он был пустым плейлисты = {}; } /*** Деструктор ***/ ~ мойSoundClass() { //Выход из подсистем SDL при уничтожении Микс_Выход(); SDL_Выход(); } /*** Методы ***/ void playSound( std::string soundName, std::string категория) /* Воспроизводит звуковой эффект, используя функции библиотеки SDL. */ { //Получаем данные звука и его контроллер s_soundData soundData = звуки[категория][имя звука]; s_soundController soundController = soundControllers[soundData.controllerId]; //Загружаем звуковой файл в память Mix_Chunk* звук = NULL; звук = Mix_LoadWAV (soundData.filePath); //Управляем воспроизведением Mix_VolumeChunk(sound, (int)round(128 * soundController.volume)); //Воспроизведение звука Mix_PlayChannel(-1, звук, 0); } }; Я использовал это руководство, чтобы научиться настраивать SDL: https://lazyfoo.net/tutorials/SDL/21_so ... /index.php

Я вызываю метод playSound() из моего файла main.cpp. Я убедился, что звук загружен правильно и что громкость установлена ​​на максимум, выведя переменные-члены MixChunk в стандартный вывод.

В других сообщениях здесь говорится, что нужно запускать usleep() или SDL_Delay() до тех пор, пока звук не завершится в функции, чтобы звук действительно воспроизводился полностью, но Я попробовал это, и, похоже, результат каждый раз один и тот же: звук не воспроизводится.

Однако я заметил одну вещь: SDL появляется в моем аудиомикшере как приложение на долю секунды всякий раз, когда я пытаюсь вызвать playSound().

Кроме того, более ранняя версия этой программы работала, но тогда все функции были определены в глобальной области, а не в области только этого отдельного класса.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Звуки микшера SDL не воспроизводятся с помощью PlayChannel()
    Гость » » в форуме C++
    0 Ответы
    67 Просмотры
    Последнее сообщение Гость
  • Звуки микшера SDL не воспроизводятся с помощью PlayChannel() [закрыто]
    Гость » » в форуме C++
    0 Ответы
    76 Просмотры
    Последнее сообщение Гость
  • Звуки микшера SDL не воспроизводятся с помощью PlayChannel()
    Гость » » в форуме C++
    0 Ответы
    38 Просмотры
    Последнее сообщение Гость
  • Как правильно заставить SDL не увеличивать размер окна SDL или размера холста HTML в приложении WASM?
    Anonymous » » в форуме CSS
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Как правильно заставить SDL не увеличивать размер окна SDL или размера холста HTML в приложении WASM?
    Anonymous » » в форуме CSS
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»