Музыка и звуки - TrueCat17/Ren-Engine GitHub Wiki

Музыка воспроизводится на указанном звуковом канале.
Громкость каждого канала можно регулировать отдельно, но также можно изменять и микшеры (mixers).
Микшеры - это, если упрощённо, группы звуковых каналов.

Они автоматически создаются при первом упоминании. По умолчанию используются такие:

  • ambience - окружение;
  • music - музыка;
  • sfx - звуки.

Звуковые каналы

Это то, с помощью чего можно проигрывать звук. Каждый звуковой канал имеет свою громкость и зацикленность/незацикленность (повтор после завершения) и может одновременно проигрывать только один звук.

По умолчанию существуют такие:

  • music - микшер music, повтор;
  • sound, sound2, sound3 - микшер sfx, без повтора;
  • ambience, sound_loop, sound_loop2, sound_loop3 - микшер ambience, повтор.

Они зарегистрированы в файле Ren-Engine/rpy/sound_channels.rpy.


Регистрация звуковых каналов

renpy.music.register_channel("name", "mixer", loop)
Где

  • name - имя регистрируемого канала;
  • mixer - используемый микшер;
  • loop - True - зациклить, False - без повторов.

Например, канал sound зарегистрирован так:
renpy.music.register_channel("sound", "sfx", False)


Есть ли канал

Проверить, был ли зарегистрирован канал с именем name:
renpy.music.has_channel("name")


Проигрывание

В сценарии:
play channel file_name [fadeout fadeout_time = None] [fadein fadein_time = 0] [volume value = 1.0]
Где

  • channel - звуковой канал;
  • file_name - путь к проигрываемому файлу (или список из нескольких путей);
  • fadeout_time - время (в сек.) затухания текущего звука (по умолчанию берётся из config.fadeout_audio, изначально равное 0);
  • fadein_time - время (в сек.) усиления звука от нуля до полной громкости (по умолчанию 0);
  • value - относительная громкость (от 0.0 до 1.0) конкретно для этого проигрываемого файла, без смены громкости у канала или микшера.

Примеры:
play sound sfx_intro_bus_stop_steps
play music music_list["a_promise_from_distant_days_v2"] fadein 1.5
play sound ['sound/music/file.ogg', 'sound/music/next_file.ogg'] volume 0.2

В питоне:
renpy.play(file_name, channel = 'music', fadeout = None, fadein = 0, relative_volume = 1.0)
или, что тоже самое
renpy.music.play(file_name, channel = 'music', fadeout = None, fadein = 0, relative_volume = 1.0)

Примеры:
renpy.play(sfx_intro_bus_stop_steps, 'sound')
renpy.play(music_list["scarytale"], 'music', fadein = 1.5)
renpy.music.play('sound/music/file.ogg', 'music', fadeout = 1, fadein = 1, relative_volume = 0.5)

Обычно рекомендуется не пользоваться прямым указанием пути. Дело в том, что в процессе разработки, особенно ближе к её окончанию, файл может быть заменён или переименован.
В этом случае вам понадобится изменить пути к файлу по всему сценарию, что долго и муторно (+можно что-то пропустить).
Тогда как в случае использования словаря (или хотя бы простых переменных) вам нужно было бы изменить лишь 1 строчку, и при этом можно было бы быть уверенным, что всё продолжит работать, как и раньше.

Простой пример создания словаря:

init python:
	music_list = {
		'some_song': 'sound/music/some_song.mp3',
		'my_file': 'path/to/my_file.ogg',
	}

# использование:
label some:
	play music music_list['some_song']
	# или питоном:
	$ renpy.play(music_list['my_file'], 'music')

Очередь воспроизведения

Команда queue отличается от команды play только тем, что не очищает список воспроизведения перед добавлением указанных файлов.
В остальном они одинаковы, включая имена аргументов.

Пример:
queue music music_list['some_song'] fadeout 1 fadein 1

Тоже самое, но питоном:
$ renpy.queue(music_list['some_song'], 'music', fadeout = 1, fadein = 1)


Остановка воспроизведения

В сценарии:
stop channel [fadeout time = None]
Где

  • channel - звуковой канал;
  • time - время (в сек.) затухания текущего звука (по умолчанию берётся из config.fadeout_audio, изначально равное 0).

Примеры:
stop ambience
stop music fadeout 1.5

В питоне:
renpy.stop(channel = 'music', fadeout = 0)
или, что тоже самое
renpy.music.stop(channel = 'music', fadeout = 0)

Примеры:
renpy.stop('ambience')
renpy.music.stop('music', fadeout = 1.5)


Проверка на воспроизведение

renpy.music.is_playing(channel = 'music')
Вернёт True (если на указанном канале что-то проигрывается) или False.


Файл на воспроизведении

renpy.music.get_playing(channel = 'music')
Вернёт путь к файлу, что сейчас проигрывается на указанном канале.
Если ничего - вернёт пустую строку.


Установка громкости

Для отдельного канала:
renpy.music.set_volume(vol, 'channel')
Где

  • vol - громкость от 0 (0%) до 1.0 (100%);
  • channel - звуковой канал.

Для управления громкостью всех каналов с определённым микшером есть свой набор функций:

  1. Установить: renpy.music.set_mixer_volume(vol, 'mixer')
  2. Получить: renpy.music.get_mixer_volume('mixer')
  3. Добавить (можно и отрицательное значение): renpy.music.add_mixer_volume(d, 'mixer')

Получение громкости

renpy.music.get_volume('channel')


Пауза

Поставить канал ambience на паузу:
renpy.music.set_pause(True, 'ambience')

Снять паузу на канале ambience:
renpy.music.set_pause(False, 'ambience')

Функция ничего не делает, если на канале ничего не проигрывается.

Узнать, поставлен ли канал на паузу:
renpy.music.get_pause('ambience')
Вернёт True (на паузе), False (проигрывается) или None (на канале ничего не воспроизводится).


Позиция

Перемотать проигрываемый на канале sound файл к позиции 10.5 (в секундах):
renpy.music.set_pos(10.5, 'sound')
Ничего не делает, если на канале ничего не воспроизводится.

Получить позицию на канале sound:
renpy.music.get_pos('sound')
Вернёт время (нецелое число, в секундах) либо None (если на канале ничего не воспроизводится).


Длительность

Узнать длительность файла (в секундах, нецелое число):
renpy.music.get_audio_len('path/to/file.ogg')

Функция поддерживает все форматы аудио-файлов, поддерживаемые движком Ren-Engine.

Предполагается, что в основном это будет полезно при создании музыкальной галереи.


Наверно, будут вопросы, почему тут так часто встречается renpy?
Для облегчения портирования с самого RenPy.
Да и запутывать то, что и так не является слишком понятным, явно не стоит.


<- Назад

⚠️ **GitHub.com Fallback** ⚠️