Исходник Гайд [SAMP|ARZ] Звуковые алерты прямо в коде.

JustFedot

Известный
Автор темы
337
336
Доброго времени суток.

Представляю вашему вниманию способ вставки .mp3 файлов непосредственно в lua код.
Данный способ я изобретал ради моего скрипта
[JF] Script Manager(кликабельно). Дело в том что мой метод загрузки lua скриптов из репозитория подразумевает загрузку кода как текста из raw данных, и последующую запись в .lua файл. А в некоторых скриптах я использую звуковые уведомления через библиотеку bass, что требует наличия mp3 файла в комплекте. Подумав два дня, я решил что нужно придумать как можно передать звуковой файл непосредственно в скрипте.

И так, что моя реализация может?

Создавать audio.mp3 из байт кода, и загружать его для дальнейшей работы.
Так же пользователь сможет заменить файл на любой другой, дав ему то же название.

P.S. Обычно, библиотека BASS требует включения звуков в настройках голосового чата лаунчера Arizona RP. Однако, из-за того что я могу задавать громкость аудио потоку, достаточно включить на 1%. Таким образом я не слышу назойливые звуки от аризоны, но прекрасно слышу колокол на всю комнату. 🤣

Не обошлось и без недостатков, звук в виде байт кода занимает примерно в 3-4 раза больше места чем готовый mp3 файл. Однако в моём случае, я загружаю легковесный аудио файл простой сирены, из-за чего вес увеличился всего на 34 килобайта.

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


Вот сам код: UPD: Код можете посмотреть в прикреплённом файле. Страница дико тормозит из-за него, если вставить непосредственно сюда.

Python код которым я разбираю mp3 файлы на байты в понятном моей функции формате:

Python:
def convert_file_to_bytecode(path):
    with open(path, 'rb') as file:
        bytes_data = file.read()

    bytecode_data = ','.join([f"{byte}" for byte in bytes_data])

    return bytecode_data


file_path = 'audio-editor-output.mp3'  # Тут укажите имя файла, должен лежать в папке с самим скриптом
bytecode = convert_file_to_bytecode(file_path)

with open('bytecode.lua', 'w') as bytecode_file:
    bytecode_file.write(bytecode)

К теме прикрепляю два файла. bytecodeTomp3Example.lua содержит lua код показанный выше моей реализации, main.py соответственно python код. Буду рад если кому-то смог помочь.

UPD:
  • Теперь используется кодирование Base64, что решает проблему с размером. Теперь размер увеличивается не так значительно, приблизительно 32.8%.
Скажу честно, попросил помощи у GPT 4 с решением проблемы размера файла. Изменения в файлах ниже, по сути его авторство.
 

Вложения

  • bytecodeTomp3Example.lua
    33.6 KB · Просмотры: 4
  • main.py
    496 байт · Просмотры: 3
  • audioInBase64.lua
    172.1 KB · Просмотры: 1
  • fileToBase64.py
    589 байт · Просмотры: 0
Последнее редактирование: