> For the complete documentation index, see [llms.txt](https://wmysterio.gitbook.io/gta-script-generator/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wmysterio.gitbook.io/gta-script-generator/docs/plugins/plugin_audio_player.md).

# Аудио-плеер

Плагин используется для воспроизведения нескольких аудио-файлов. Его можно использовать для озвучки персонажей. За это отвечает класс **AudioPlayer**. Давайте рассмотрим пример использования:

```csharp
using GTA;
using GTA.Plugins;

public partial class MAIN : Thread {

    // здесь будем хранить ссылку на аудио-плеер
    public static AudioPlayer AUDIO_PLAYER; 

    public override void START( LabelJump label ) {

        // ...
        create_thread<AUDIO>(); // запускаем поток с инициализацией плеера
        create_thread<TEST>(); // использовать плагин нужно только после инициализации!
        end_thread();

    }

    //----------------------------------------------------------------------------------------------------
	
    public class AUDIO : Thread {

        public override void START( LabelJump label ) {
            AUDIO_PLAYER = new AudioPlayer();
        }

    }

    public class TEST : Thread {

        public override void START( LabelJump label ) {

            // загружаем аудио-файлы
            AUDIO_PLAYER.load( 5 );

            wait( AUDIO_PLAYER.is_ready ); // ожидаем загрузки всех файлов

            for( int i = 0; i < AUDIO_PLAYER.count; i++ ) {
                AUDIO_PLAYER.play(); // воспроизводим аудиофайл, который сейчас в очереди
                wait( 5000 ); // ожидаем 5 секунд
            }

            AUDIO_PLAYER.unload(); // выгружаем все аудио-файлы

            wait( AUDIO_PLAYER.is_stopped ); // ожидаем завершения работы

            end_thread();
        }

    }
}
```

Метод загрузки `load` принимает 1 параметр: количество загружаемых файлов. Всего можно загрузить не больше 24 звуков. В нашем примере будут загружены файлы с именами: 0, 1, 2, 3 и 4. Метод `play` сначала начнёт воспроизводить трек **0**. При повторном вызове: **1**, далее **2** и т. п.

Если файл не найден, не загружен или отсутствует в очереди, то играть звук не будет. Метод `play` теперь имеет перегрузку, которая принимает 1 параметр: номер трека в очереди. Номера идентичны именам, что позволит воспроизвести звук не зависимо от его номеру в очереди.

Поиск нужного файла по умолчанию осуществляется в папке с игрой (где **gta\_sa.exe**). Если нужно указать другую папку, то используем метод `chdir`:

```csharp
chdir( "CLEO" );
AUDIO_PLAYER.load( 2 );
```

В этом случае будут загружены файлы **0.mp3** и **1.mp3**, если они находятся в папке **CLEO**. Метод **chdir** нужно применять перед методом `load` каждый раз!

{% hint style="warning" %}
Плагин использует файлы с расширением **mp3**. А названия должны быть только числовыми!
{% endhint %}

{% hint style="danger" %}
Плагин может создаваться только один раз и в отдельном потоке (не **MAIN**)! Плагин рекомендуется использовать только в одном активном потоке!
{% endhint %}

{% hint style="danger" %}
Если в одном потоке использовать плагин вместе с плагином [Аудио фон](/gta-script-generator/docs/plugins/plugin_audio_background.md), то делать загрузку нужно после проверки **is\_ready** или до метода **load** с проверкой **is\_ready**.
{% endhint %}

Версия 7.5 позволяет использовать метод `get_current_length_in_ms`, который возвращает длительность звука в миллисекундах, что иногда полезно использовать в выводом текста или задержкой.

```csharp
Int duration = local();
AUDIO_PLAYER.play();
wait( DefaultWaitTime )
AUDIO_PLAYER.get_current_length_in_ms( duration );
wait( duration );
```

Обратите внимание, что вызывать этот метод нужно после метода `play`, причём с небольшой задержкой. Это связано с тем, что длительность рассчитывается не сразу. Если файла не существует или с ним возникли проблемы, то метод возвращает `0`.
