Музыка и звуки - 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 [fadein time = 0] [volume value = 1.0]
Где
-
channel
- звуковой канал, -
file_name
- имя проигрываемого файла, -
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' volume 0.2
В питоне:
renpy.play(file_name, channel, fadein = 0, relative_volume = 1.0)
или, что тоже самое
renpy.music.play(file_name, channel, fadein = 0, relative_volume = 1.0)
Примеры:
renpy.play(sfx_intro_bus_stop_steps, 'sound')
renpy.music.play(music_list["scarytale"], 'music', fadein = 1.5)
renpy.music.play('sound/music/file.ogg', 'music', 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')
В сценарии:
stop channel [fadeout time = 0]
Где
-
channel
- звуковой канал. -
time
- время (в сек.) убавления звука от полной громкости до нуля (по умолчанию0
).
Примеры:
stop ambience
stop music fadeout 1.5
В питоне:
renpy.stop(channel, fadeout = 0)
или, что тоже самое
renpy.music.stop(channel, fadeout = 0)
Примеры:
renpy.stop('ambience')
renpy.music.stop('music', fadeout = 1.5)
Для отдельного канала:
renpy.music.set_volume(vol, 'channel')
Где
-
vol
- громкость от0
(0%) до1.0
(100%), -
channel
- звуковой канал.
Для управления громкостью всех каналов с определённым микшером есть свой набор функций:
- Установить:
renpy.music.set_mixer_volume(vol, 'mixer')
- Получить:
renpy.music.get_mixer_volume('mixer')
- Добавить (можно и отрицательное значение):
renpy.music.add_mixer_volume(d, 'mixer')
Поставить канал 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.
Да и запутывать то, что и так не является слишком понятным, явно не стоит.