# 00043. Работа с аудио

Работа с аудио|Начинаем наш новый урок! Эта тема посвящена работе с аудио-файлами.|wmysterio|wmysterio||||Аудио-файлы можно "разбить" на три категории: звук, саундтрек и музыка. Зачем это нужно? Потому, что воспроизводятся они разными опкодами. Рассмотрим по очереди все категории:

**Звуки**. Отличается короткой длиной и типом файла. Обычно в игре звуки имеют тип "\*.wav". Для начала, нужно загрузить звук опкодом:

```
03CF: load_wav 23000 as 1
```

Здесь:\
23000 - номер ( ID ) звука. Все номера звуков хранятся в файле \*\*AudioEvents.txt\*\*, что в папке "data"\
1 - это, так сказать "переменная", в которой будет хранится звук

Потом нужно сделать проверку на загруженность:

```
03D0: wav 1 loaded
```

Здесь:\
1 - это та самая "переменная", в которую мы записали номер звука

После этого можно воспроизвести сам звук:

```
03D1: play_wav 1
```

Здесь:\
1 - загруженная "переменная" со звуком

Существует также проверка на окончание воспроизведения звука:

```
03D2: wav 1 ended
```

Когда звук больше не нужен, то обязательно выгружаем звук опкодом:

```
040D: unload_wav 1
```

Здесь:\
1 - загруженная "переменная" со звуком

Существует ещё опкод, который не нуждается в загрузке звука и который сразу проигрывает звук:

```
018C: play_sound 1052 at 0.0 0.0 0.0
```

Здесь:\
1052 - номер звука. Я пока знаю где найти описание всех номеров, поэтому берите то, что есть в "main.scm"\
0.0 0.0 0.0 - точно не знаю зачем эти цифры, так что оставляйте как есть× \*\*Примечание:\*\* следует помнить, что этот опкод воспроизводит не все звуки, так что приходится выбирать и тестировать наугад

**Саундтреки**. Эта категория аудио, как и звуки, отличается своей длиной и типом. Они имеют расширение "\*.ogg" и намного длиннее, чем звуки. Для примера саундтрека: когда входим в интерьер дискотеки играет музыка, на битве лоурайдеров - тоже звучик саундтрек. Саундтреки требуют загрузки:

```
0952: load_soundtrack 10 // увы, я не помню все номера саундтреков, но вы можете протестировать
0954: start_playing_loaded_soundtrack // воспроизводит саундтрек
```

× \*\*ВАЖНО:\*\* Одновременно можно проигрывать только 1 сандтрек

Так же можно занести в переменную статус саундтрека:

```
0953: get_soundtrack_status_to 17@
```

Здесь:\
17@ - переменная, в которую заносится статус.

А вот эта команда прекращает воспроизведение саундтрека:

```
0955: end_playing_loaded_soundtrack
```

**Музыка**. Музыка не требует дополнительной загрузки и её можно воспроизводить когда угодно. Она загружается вместе с игрой. Музыку можно услышать когда вы прошли миссию или купили дом. Опкод, запускающий музыку:

```
0394: play_music 2
```

Здесь:\
2 - номер музыки: 1 - миссия пройдена, 2 - дом куплен.

С выходом Cleo 4, нам добавилось несколько опкодов для работы с аудио. Теперь можно проигрывать прямо в игре любимый трек. Рассмотрим алгоритм запуска аудио-файла. Сначала кидаем в папку Cleo ( или в другую папку ) нужный трек и переименовуем его на английские символы ( без пробелов ) или числа. Вот например я кинул в папку Cleo трек с названием "1.mp3". Потом в скрипте нужно обязательно проверить: "Существует ли файл?":

```
0AAB: file_exists "CLEO&#92;1.mp3"
```

Здесь:\
"CLEO\1.mp3" - путь к аудио-файлу

После успешной проверки, загружаем аудио:

```
0AAC: $hMP3 = load_audiostream "CLEO&#92;1.mp3"
```

Здесь:\
$hMP3 - переменная, в которой будет хранится аудио\
"CLEO\1.mp3" - путь к аудио-файлу

После этого запускаем аудио:

```
0AAD: set_audiostream $hMP3 perform_action 1
```

Здесь:\
$hMP3 - переменная, в которой хранится аудио\
1 - флаг. ( 1 - запустить проигрывание сначала, 0 - остановить проигрывание, 2 - поставить на паузу, 3 - возобновить проигрывание )

Опкод, регулирующий громкость аудио в игре:

```
0ABC: set_audiostream $hMP3 volume 1.0
```

Здесь:\
$hMP3 - переменная, в которой хранится аудио\
1.0 - громкость ( от 0.0 до 1.0 )

Ещё один полезный опкод, который позволяет автоматически начать воспроизведение, если музыка была остановлена:

```
0AC0: loop_audiostream $hMP3 flag 1
```

Здесь:\
$hMP3 - переменная, в которой хранится аудио\
1 - флаг. Если поставить 1, то аудио будет повторятся после окончания, если 0 - не будет повторятся

И, наконец, выгрузка звука:

```
0AAE: release_audiostream $hMP3
```

Давайте напишем простенький скрипт, чтобы при нажатии кнопки 1\` играла музыка "1.mp3". Вот код:

```
:AUDIO
thread 'AUDIO'
wait 0
if
0AAB: file_exists "CLEO&#92;1.mp3"
jf @AUDIO_END
0AAC: $hMP3 = load_audiostream "CLEO&#92;1.mp3"
0ABC: set_audiostream $hMP3 volume 1.0
0@ = 0

:AUDIO_1
wait 0
if
0@ == 0
then
 if
 0AB0: key_pressed 49 // 1
 then
 0AC0: loop_audiostream $hMP3 flag 1
 0AAD: set_audiostream $hMP3 perform_action 1 // PLAY
 wait 250
 0@ = 1
 end
else
 if
 0AB0: key_pressed 49 // 1
 then
 0AC0: loop_audiostream $hMP3 flag 0
 0AAD: set_audiostream $hMP3 perform_action 0 // STOP
 wait 250
 0@ = 0
 end
end
jump @AUDIO

:AUDIO_END
wait 0
end_thread
```

Пока не будем кидать этот код в мейн, так как сейсач нет такой необходимости.|2782|1|0||rabota\_s\_audio|1498947823


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00100/00200/00043.-rabota-s-audio.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
