Музыка и звуки - 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- звуковой канал.
Для управления громкостью всех каналов с определённым микшером есть свой набор функций:
- Установить:
renpy.music.set_mixer_volume(vol, 'mixer') - Получить:
renpy.music.get_mixer_volume('mixer') - Добавить (можно и отрицательное значение):
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.
Да и запутывать то, что и так не является слишком понятным, явно не стоит.