Я довольно новичок в программировании, у меня первый год в программировании; CS1B.
Я делаю текстовую приключенческую игру в Visual Studio 2015, я хочу использовать два звука, например, музыку на заднем плане и звуковой эффект.
Но всякий раз, когда я пытаюсь это сделать, первый звук прекращается, когда начинается второй. Я использую PlaySound()
Функция, чтобы сделать мои звуки. Я знаю о FMOD
а также DirectSound
но я не знаю, как его настроить.
Я пытался посмотреть, как это сделать, но за вещами, которые я нахожу, мне очень трудно следовать. Любая помощь будет хорошей. Благодарю.
Вы можете разделить свои звуки на SFX и музыку (которая использует музыкальную систему). Таким образом, вы можете управлять своей фоновой музыкой отдельно (а также использовать их специфичные для музыки функции) от событий звукового эффекта.
В общем, вам нужно иметь отдельный экземпляр события / звука для каждого воспроизводимого звука. Если у вас есть только один, он может быть «украден», и это может быть наиболее вероятной причиной вашей проблемы. Это также может быть из-за ваших каналов.
Однако я не уверен, используете ли вы FMOD Studio или FMOD Designer / FMOD Ex, так что это действительно зависит от того, какой из них вы используете. В любом случае, если вы только начинаете, я рекомендую прочитать FMOD Event System — лучшие практики для программистов
документация, которую вы можете получить из Интернета, а также API программиста FMOD Ex документация (вам нужно будет иметь учетную запись, чтобы загрузить это, но оно того стоит.)
Удачи.
PlaySound
работает только с одним «голосом», поэтому он не может воспроизводить более одного звука одновременно.
Для воспроизведения более одного звука одновременно требуется микшер в реальном времени, поэтому вам нужно использовать что-то еще: XAudio2, FMOD, Wwise, MSS, OpenAL и т. Д.
DirectSound устарел и не обновлялся с 2000 года. Он все еще существует для BackCompat, но имеет ряд ограничений и других тонких устаревших вариантов поведения. Единственная причина, по которой кто-то должен все еще использовать DirectSound — это то, что он ориентирован на Windows XP.
Если вы используете C ++, вы должны посмотреть на Набор инструментов DirectX для аудио которая является простой оболочкой C ++ для XAudio2.
Я думаю, что простая многопоточность будет делать:
#include <thread>
...
thread playsound(&playsound, this, <other params>);
playsound.detach();
thread othersound(&playsound, this, <other params>);
othersound.detach();
Удачи