# 类 BgmController

渲染进程类,游戏进程不能直接使用,继承自 [`ResourceController`](./resource-controller.md)

-   实例成员
    -   [`stack`](#stack)
    -   [`redoStack`](#redostack)
    -   [`now`](#now)
    -   [`transitionTime`](#transitiontime)
    -   [`transitionCurve`](#transitioncurve)
    -   [`volume`](#volume)
    -   [`disable`](#disable)
    -   [`playing`](#playing)
-   实例方法
    -   [`add`](#add)
    -   [`load`](#load)
    -   [`changeTo`](#changeto)
    -   [`pause`](#pause)
    -   [`resume`](#resume)
    -   [`play`](#play)
    -   [`undo`](#undo)
    -   [`redo`](#redo)
    -   [`setTransition`](#settransition)
    -   [`get`](#get)
-   实例事件
    -   [`changeBgm`](#changebgm-事件)
    -   [`pause`](#pause-事件)
    -   [`resume`](#resume-事件)

## 部分接口说明

```ts
interface BgmEmits {
    preventDefault: () => void
}
```

事件监听参数,用于阻止默认行为,例如切歌、暂停、继续

## stack

```ts
declare var stack: string[]
```

-   成员说明

    播放栈,存储了之前播放的最多 10 个 bgm

## redoStack

```ts
declare var redoStack: string[]
```

-   成员说明

    恢复栈,undo 操作之后会存入这里,从而可以被 redo

## now

```ts
declare var now: string | undefined
```

-   成员说明

    当前正在播放的 bgm

## transitionTime

```ts
declare var transitionTime: number
```

-   成员说明

    切歌或者暂停等操作的音乐渐变时长

## transitionCurve

```ts
declare var transitionCurve: TimingFn
```

-   成员说明

    切歌或者暂停等操作的音乐音量渐变曲线

## volume

```ts
declare var volume: number
```

-   成员说明

    当前的音乐音量

## disable

```ts
declare var disable: boolean
```

-   成员说明

    是否关闭了音乐

## playing

```ts
declare var playing: boolean
```

-   成员说明

    是否正在播放音乐

## add()

```ts
declare function add(uri: string, data: HTMLAudioElement): void
```

-   参数说明

    -   `id`: bgm 的`uri`,由于 bgm 是一类资源,因此`uri`为`bgms.xxx`的形式
    -   `data`: bgm 音频元素

-   方法说明

    添加一个音乐

## load()

```ts
declare function load(id: string): void
```

-   方法说明

    预先加载一个音乐,从而在播放音乐的时候不会产生卡顿

## changeTo()

```ts
declare function changeTo(id: string, when: number = -1, noStack: boolean = false): void
```

-   参考[切换音乐](../../guide/audio.md#切换-bgm)

## pause()

```ts
declare function pause(transition: boolean = true): void
```

-   方法说明

    暂停音乐播放,继续播放时将会延续暂停的时刻

## resume()

```ts
declare function resume(transition: boolean = true): void
```

-   方法说明

    继续当前 bgm 的播放,从上一次暂停的时刻开始播放

## play()

```ts
declare function play(id: string, when: number = 0, noStack: boolean = false): void
```

-   参考[切换音乐](../../guide/audio.md#切换-bgm)

## undo()

```ts
declare function undo(): void
```

-   方法说明

    撤销当前播放,改为播放前一个 bgm

## redo()

```ts
declare function redo(): void
```

-   方法说明

    取消上一次的撤销,改为播放上一次撤销的 bgm

## setTransition()

```ts
declare function setTransition(time?: number, curve?: TimingFn): void
```

-   方法说明

    修改切歌的渐变信息,参考[设置渐变参数](../../guide/audio.md#设置渐变参数)

## get()

```ts
declare function get(id: string): HTMLAudioElement
```

-   参数说明

    -   `id`: 音乐的名称,不是 uri

-   方法说明

    根据音乐的名称获取到对应的音频元素

## changeBgm 事件

```ts
interface BgmControllerEvent {
    changeBgm: (ev: BgmEmits, id: string, before: string) => void
}
```

-   事件说明

    当歌曲发生切换时触发,包括但不限于直接切歌、撤销、恢复。默认行为为切歌

## pause 事件

```ts
interface BgmControllerEvent {
    pause: (ev: BgmEmits, id: string) => void
}
```

-   事件说明

    当音乐暂停时触发,默认行为为暂停

## resume 事件

```ts
interface BgmControllerEvent {
    resume: (ev: BgmEmits, id: string) => void
}
```

-   事件说明

    当音乐继续播放时触发,默认行为为继续播放