Зацикливание музыки с вступлением в XNA с помощью SoundEffect - PullRequest
3 голосов
/ 11 мая 2010

У меня есть два звуковых файла:

  • Sound A - это 18-секундное вступление, предназначенное для однократного воспроизведения
  • Sound B - это 1-минутный цикличный трек

Я бы хотел сыграть Звук А один раз, затем, как только Звук А будет готов, немедленно воспроизведите Звук В и продолжайте воспроизведение Звука Б, пока я не скажу ему остановиться. Предполагается, что в РПГ звучит городская музыка.

Я пытался сделать это в коде, используя только SoundEffect, но есть небольшой, но заметный разрыв между концом Sound A и началом Sound B. Даже если я добавлю код мониторинга, просматривая SoundEffectInstance.State в Sound A, в Обновлении (), я не смог запустить Звук B точно , когда закончится Звук А, чтобы он был без шва.

Я бы предпочел использовать SoundEffect, потому что я могу загружать файлы WMA, а не зависать с WAV в XACT.

Ответы [ 2 ]

2 голосов
/ 12 мая 2010

потенциально второй вариант. Я полагаю, что вы слышите пробел, вероятно, потому, что второй звук необходимо либо загрузить в память, либо инициализировать, либо открыть поток (не уверен во внутренней реализации). Но если это так, мне интересно, если бы вы могли сделать что-то вроде этого:

  1. Загрузка двух звуковых эффектов (а и б)
  2. Начало воспроизведения звукового эффекта A
  3. немедленно начинайте играть звуковой эффект B
  4. пауза звукового эффекта B после одного кадра
  5. когда звуковой эффект A заканчивается, перезапустите звуковой эффект A

Мое предположение состоит в том, что, поскольку звуковой эффект B уже инициализирован, он может запуститься быстрее, что уменьшит видимый разрыв. Хотелось бы услышать, если у вас есть возможность попробовать это, и сработало ли это: -)

2 голосов
/ 11 мая 2010

К сожалению, простота в API SoundEffect оплачивается за счет снижения гибкости. Этот тип звукового программирования является тем, в чем XACT превосходит ... если вам требуется сложная композиция, то вы, вероятно, захотите изучить переход на XACT.

...