Что ж, многие спрашивали здесь на форуме как поставить свою музыку на сервер. В ответ они получали:"Ставьте Audio Plugin". Но вот незадача, а как им пользоваться? Ну что ж, всё довольно просто.
Достояние этого плагина в том, что он позволяет ставить свою музыку на сервер в форматах WAV, AIFF, MP3/MP2/MP1, OGG, WMA, FLAC, WV, SPX, MPC,AC3, AAC, ALAC, TTA, APE и MIDI, 3D-позицию для музыки, воспроизведение музыкальных файлов из Интернета.
Для его работы нам понадобятся: Audio Plugin v0.5 для клиентов, Audio Plugin v0.5 для сервера.
Установка клиентской части:
______________________________
Для установки плагина на клиентскую часть требуется скачать Audio Plugin v0.5 для клиентов и установить его в корневую папку с игрой. Но, для его правильной работы требуется Microsoft .NET Framework 3.5 или выше. (Для владельцев Wnidows XP SP2 настоятельно не рекомендуется ставить Microsoft .NET Framework 4.0, так как он работает нестабильно.)
Установка плагина на сервер:
_______________________________
Для стабильной работы плагина на сервере тоже требуется Microsoft .NET Framework 3.5 или выше.
Скачиваем Audio Plugin v0.5 для сервера. Извлекаем все содержимое архива в папку с сервером. Файл audio.inc, содержащийся в папке pawno/include, переместите в папку библиотек Pawno.
Переходим к файлу server.cfg. Прописываем в нем:
PHP код:
plugins audio // если у Вас Windows
plugins audio.so // если у Вас Linux
Переходим к Вашему gamemode'у. В самом начале, где находятся подключенные к моду инклуды, прописываем:
PHP код:
#include <audio>
Далее, следует добавить функции, чтобы плагин начал работать.
PHP код:
//OnGameModeInit()
Audio_SetPack("default_pack",true,true); // " " - пак файлов, который Вы используете. Он может иметь любое Вам угодное название.
public Audio_OnClientConnect(playerid)
{
Audio_TransferPack(playerid);
return 1;
}
//OnGameModeExit
Audio_DestroyTCPServer();
Установка музыки:
_____________________
Открываем файл audio.ini. Мы видим содержимое типа:
PHP код:
[default_pack]
1 = example.mp3
2 = example.ogg
3 = example.wav
[other_pack]
1 = http://www.website.com/file.mp3
2 = example.ogg
3 = example.wav
1,2 и 3 - это ID музыкальных файлов, которые потребуются Вам для их воспроизведения. Чтобы поставить музыку, нужно, чтобы файл был прописан в audio.ini и содержаться в папке с паком, который Вы указали в OnGameModeInit. При вписывании файлов в audio.ini нужно писать полное название и расширение файла. Иначе файл не будет распознан.
Функции:
_____________
Audio_CreateTCPServer(port) - создание порта, к которому будут подключаться игроки с установленной клиентской частью. Данная функция ,в принципе, не требуется, так как при запуске сервера плагин автоматически создает порт (он равен порту Вашего сервера).
Audio_DestroyTCPServer() - уничтожение порта. Отменит все подключения, и не будет возможным воспроизведение звуков.
Audio_SetPack(const name[], bool:transferable = true, bool:automated = true); - указание пака со звуками. const name[] - название пака, transferable - разрешение на скачивание, automated - автоматизация скачивания (следует ставить true).
Audio_IsClientConnected(playerid); - проверка на то, что игрок подключен к аудио-порту.
Audio_SendMessage(playerid, const message[]); - отсылка подключенному к аудио-порту игроку сообщения.
Audio_TransferPack(playerid); - отсылка игроку пака со звуками.
Audio_CreateSequence(); - создание последовательности, или очереди файлов на воспроизведение.
Audio_DestroySequence(sequenceid); - уничтожение последовательности.
Audio_AddToSequence(sequenceid, audioid); - добавление файла в последовательность.
Audio_RemoveFromSequence(sequenceid, audioid); - удаление файла из последовательности.
Audio_Play(playerid, audioid, bool: pause = false, bool:loop = false, bool: downmix = false); - воспроизведение файла. pause - остановка при запуске воспроизведения, loop - зацикленное воспроизведение, downmix - микширование из стерео в моно.
Audio_PlayStreamed(playerid, const url[], bool: pause = false, bool:loop = false, bool: downmix = false); - воспроизведение из Интернета. const url[] - прямая ссылка на файл.
Audio_PlaySequence(playerid, sequenceid, bool: pause = false, bool:loop = false, bool: downmix = false); - запуск последовательности. sequenceid - ID последовательности.
Audio_Pause(playerid, handleid); - приостановка воспроизведения. handleid - ID потока запущенного файла.
Audio_Resume(playerid, handleid); - продолжение воспроизведения.
Audio_Stop(playerid, handleid); - полная остановка воспроизведения.
Audio_Restart(playerid, handleid); - перезапуск воспроизведения.
Audio_GetPosition(playerid, handleid, const callback[] = "Audio_OnGetPosition"); - функция позволяет узнать, на какой секунде воспроизводится файл в данный момент. Используйте такой вид: Audio_GetPosition(playerid, handleid);.
Audio_SetPosition(playerid, handleid, seconds); - указать, на какую секунду перемотать воспроизведение. seconds - секунды.
Audio_SetVolume(playerid, handleid, volume); - установка громкости. По стандарту - 50. volume - громкость (от 0 до 100).
Audio_SetFX(playerid, handleid, type); - указание эффекта. Доступные эффекты:
PHP код:
0 - Хор.
1 - Эффект музыки в малом пространстве.
2 - Искажения музыки.
3 - Эхо.
4 - Фленджер.
5 - Звучание в воде.
6 - I3DL2 реверберация.
7 - Параметрический эквалайзер.
8 - Реверберация.
Примечание: Данная функция постоянно добавляет эффекты на поток, и они накладываются друг на друга.
Audio_Set3DPosition(playerid, handleid, Float:x, Float:y, Float:z, Float: distance); - указание позиции музыки. При отдалении от точки музыка будет затихать. x,y,z - позиция, distance - дистанция, на котором будет слышна музыка.
Audio_Remove3DPosition(playerid, handleid); - удаление 3D-позиции.
Audio_SetRadioStation(playerid, station); - указание радио-станции. Работает только тогда, когда игрок сидит в транспорте. Доступные станции:
PHP код:
0: Выключение радио, но точнее - включение радио с полицейской/медицинской волны.
1: Playback FM
2: K-Rose
3: K-DST
4: Bounce FM
5: SF-UR
6: Radio Los Santos
7: Radio X
8: CSR 103.9
9: K-Jah West
10: Master Sounds 98.3
11: WCTR
12: Пользовательские треки
Audio_StopRadio(playerid); - остановка радио.
Audio_RenamePlayer(playerid, const name[]); - переименование игрока.
Callback'и:
______________
forward Audio_OnClientConnect(playerid); - при соединении игрока к аудио-порту.
forward Audio_OnClientDisconnect(playerid); - при отсоединении игрока от аудио-порта.
forward Audio_OnTransferFile(playerid, file[], current, total, result); - при получении файлов.
forward Audio_OnPlay(playerid, handleid); - при воспроизведении.
forward Audio_OnStop(playerid, handleid); - при остановке воспроизведения
forward Audio_OnTrackChange(playerid, handleid, track[]); - при изменении ID3-информации о треке. Вызывается в большинстве случаев при воспроизведении онлайн-радио.
forward Audio_OnRadioStationChange(playerid, station); - при переключении радио в транспорте.
forward Audio_OnGetPosition(playerid, handleid, seconds); - callback, отвечающий за получение позиции времени.
По поводу handleid:
___________________________
Многие путают hadleid и soundid. Это разные вещи. soundid - это ID'ы, прописанные в audio.ini, а handleid - это номер потока, на котором воспроизводится файл.
Чтобы было проще и понятно, при запуске воспроизведения файл занимает свободный поток, отчитываемый от 1 до бесконечности. Если у Вас не воспроизводилась никакая музыка, то файл займет поток №1, если же была, то займет следующий поток, то есть №2.
Чтобы узнать, какой handleid Вам нужен для остановки определенного потока, используйте такой код:
PHP код:
new audio = Audio_Play(Streamed)(параметры);
printf("Handleid %d",audio);
Но это только для одного игрока. Чтобы использовать handleid для каждого игрока (а он у каждого будет разный), используйте переменную, привязанную к игроку. Пример:
PHP код:
new audio_sound[MAX_PLAYERS]; // В начало мода
//В то место, где Вы хотите запустить музыку для игрока
audio_sound[playerid] = Audio_Play(playerid, audioid, bool: pause = false, bool:loop = false, bool: downmix = false);
//В то место, где Вы хотите остановить музыку
Audio_Stop(playerid,audio_sound[playerid]);
Примечание:
________________
FS "audio.pwn" - просто тестовый скрипт для проверки работы Audio Plugin'а. Нет смысла постоянно запускать его на сервере.
Ограничение количества файлов в audio.ini неизвестно.
Запрещено вставлять в audio.ini ссылки на онлайн-радио, так как у них нет размера потока. Возможна ошибка при попытке распознавания, или же Вы будете качать этот поток, пока не кончится место на Вашем жестком диске.
При использовании сервера версии 0.3c-R5 и выше была найдена ошибка в плагине, когда при закрытии сервера появлялся файл crashinfo.txt с неизвестными ошибками. Данная ошибка была найдена пользователем Riddick94, решение данной проблемы: добавьте функцию Audio_DestroyTCPServer(); в OnGameModeExit().
Не надо говорить, что Audio Plugin уже не нужен, так как с 0.3d появилось потоковое воспроизведение. Audio Plugin имеет очень много преимуществ по сравнению со стандартным потоковым воспроизведением 0.3d.
Автор плагина: Incognito
Источник: Forum Sa-mp.com
Первоисточник статьи: Pawno.ru
Перевод статьи: SDraw