> ## Documentation Index
> Fetch the complete documentation index at: https://bym.lonestill.uk/llms.txt
> Use this file to discover all available pages before exploring further.

# api.Player

> Управление воспроизведением, скоростью, громкостью и треками

## Воспроизведение

```js theme={null}
api.Player.isPlaying()    // → boolean
api.Player.getPosition()  // → number, текущее время (сек)
api.Player.getDuration()  // → number, длина трека (сек)
api.Player.seek(sec)      // перемотать на позицию
```

## Скорость

```js theme={null}
api.Player.getSpeed()    // → number (0.25–4)
api.Player.setSpeed(n)   // установить скорость
api.Player.resetSpeed()  // сбросить до 1× и остановить enforcer
```

`setSpeed` запускает фоновый таймер каждые 500мс — YM иногда сбрасывает скорость при смене трека, таймер это исправляет.

## Громкость

```js theme={null}
api.Player.getVolume()   // → number (0–1)
api.Player.setVolume(v)  // установить (0–1)
```

## Управление треками

```js theme={null}
api.Player.next()     // следующий трек
api.Player.prev()     // предыдущий трек
api.Player.like()     // лайк
api.Player.dislike()  // дизлайк
```

Реализованы через клик по DOM кнопкам плеера.

## Повтор и перемешивание

```js theme={null}
api.Player.getRepeat()     // → 'none' | 'all' | 'one'
api.Player.toggleRepeat()  // none → all → one → none

api.Player.getShuffle()    // → boolean
api.Player.toggleShuffle() // переключить
```

## Метаданные трека

```js theme={null}
api.Player.getTrack()
// → null | { title, artist, album, artwork }
```

Источник — MediaSession API. Возвращает `null` если ничего не играет.

| Поле      | Тип      | Описание       |
| --------- | -------- | -------------- |
| `title`   | `string` | Название трека |
| `artist`  | `string` | Исполнитель    |
| `album`   | `string` | Альбом         |
| `artwork` | `string` | URL обложки    |

## Пример

```js theme={null}
BYM.register({ id: 'player-demo' }, (api) => {
  function onTrack(track) {
    if (!track) return;
    api.Logger.log(`${track.artist} — ${track.title}`);
    api.UI.notify(track.artist, track.title);
  }

  return {
    start() {
      api.Player.setSpeed(1.25);
      api.Events.on('trackChange', onTrack);
    },
    stop() {
      api.Player.resetSpeed();
      api.Events.off('trackChange', onTrack);
    },
  };
});
```
