mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-04-30 11:23:24 +08:00
208 lines
3.9 KiB
Markdown
208 lines
3.9 KiB
Markdown
# AudioEffect API 文档
|
||
|
||
本文档由 `DeepSeek R1` 模型生成并微调。
|
||
|
||
---
|
||
|
||
## 类描述
|
||
|
||
音频处理管道的核心抽象类,为构建音频效果链提供基础框架。所有效果器通过输入/输出节点串联,形成可定制的音频处理流水线。
|
||
|
||
---
|
||
|
||
## 核心架构
|
||
|
||
音频播放流程:
|
||
|
||
```mermaid
|
||
graph LR
|
||
Source --> Effect1
|
||
Effect1 --> Effect2[...]
|
||
Effect2 --> GainNode
|
||
GainNode --> Destination
|
||
```
|
||
|
||
---
|
||
|
||
## 抽象成员说明
|
||
|
||
| 成员 | 类型 | 说明 |
|
||
| -------- | ----------- | -------------------------- |
|
||
| `input` | `AudioNode` | 效果器输入节点(必须实现) |
|
||
| `output` | `AudioNode` | 效果器输出节点(必须实现) |
|
||
|
||
---
|
||
|
||
## 核心方法说明
|
||
|
||
### `connect`
|
||
|
||
```typescript
|
||
function connect(target: IAudioInput, output?: number, input?: number): void;
|
||
```
|
||
|
||
连接至下游音频节点
|
||
|
||
| 参数 | 类型 | 说明 |
|
||
| ------ | ------------- | -------------------------- |
|
||
| target | `IAudioInput` | 目标效果器/节点 |
|
||
| output | `number` | 当前效果器输出通道(可选) |
|
||
| input | `number` | 目标效果器输入通道(可选) |
|
||
|
||
---
|
||
|
||
### `disconnect`
|
||
|
||
```typescript
|
||
function disconnect(
|
||
target?: IAudioInput,
|
||
output?: number,
|
||
input?: number
|
||
): void;
|
||
```
|
||
|
||
断开与下游节点的连接
|
||
|
||
---
|
||
|
||
### `abstract start`
|
||
|
||
```typescript
|
||
function start(): void;
|
||
```
|
||
|
||
效果器激活时调用(可用于初始化参数)
|
||
|
||
---
|
||
|
||
### `abstract end`
|
||
|
||
```typescript
|
||
function end(): void;
|
||
```
|
||
|
||
效果器停用时调用(可用于资源回收)
|
||
|
||
---
|
||
|
||
## 自定义效果器示例
|
||
|
||
### 混响效果器实现
|
||
|
||
```typescript
|
||
export class ReverbEffect extends AudioEffect {
|
||
private convolver: ConvolverNode;
|
||
private dryGain: GainNode;
|
||
private wetGain: GainNode;
|
||
|
||
constructor(ac: AudioContext) {
|
||
super(ac);
|
||
|
||
// 创建节点网络
|
||
this.dryGain = ac.createGain();
|
||
this.wetGain = ac.createGain();
|
||
this.convolver = ac.createConvolver();
|
||
|
||
// 定义输入输出
|
||
this.input = this.dryGain;
|
||
this.output = this.ac.createGain();
|
||
|
||
// 构建处理链
|
||
this.dryGain.connect(this.output);
|
||
this.dryGain.connect(this.convolver);
|
||
this.convolver.connect(this.wetGain);
|
||
this.wetGain.connect(this.output);
|
||
}
|
||
|
||
/** 设置混响强度 */
|
||
setMix(value: number) {
|
||
this.dryGain.gain.value = 1 - value;
|
||
this.wetGain.gain.value = value;
|
||
}
|
||
|
||
/** 加载脉冲响应 */
|
||
async loadImpulse(url: string) {
|
||
const response = await fetch(url);
|
||
const buffer = await this.ac.decodeAudioData(
|
||
await response.arrayBuffer()
|
||
);
|
||
this.convolver.buffer = buffer;
|
||
}
|
||
|
||
start() {
|
||
this.output.gain.value = 1;
|
||
}
|
||
|
||
end() {
|
||
this.output.gain.value = 0;
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 内置效果器说明
|
||
|
||
### StereoEffect(立体声控制)
|
||
|
||
```mermaid
|
||
graph LR
|
||
Input --> Panner[PannerNode]
|
||
Panner --> Output
|
||
```
|
||
|
||
- 控制声相/3D 空间定位
|
||
- 支持设置声音方位和位置
|
||
|
||
### VolumeEffect(音量控制)
|
||
|
||
```mermaid
|
||
graph LR
|
||
Input --> Gain[GainNode]
|
||
Gain --> Output
|
||
```
|
||
|
||
- 全局音量调节
|
||
- 支持实时音量渐变
|
||
|
||
### ChannelVolumeEffect(多声道控制)
|
||
|
||
```mermaid
|
||
graph LR
|
||
Input --> Splitter[ChannelSplitter]
|
||
Splitter --> Gain1
|
||
Splitter --> Gain2
|
||
Gain1 --> Merger
|
||
Gain2 --> Merger
|
||
Merger --> Output
|
||
```
|
||
|
||
- 6 声道独立音量控制
|
||
- 支持环绕声场调节
|
||
|
||
### DelayEffect(延迟效果)
|
||
|
||
```mermaid
|
||
graph LR
|
||
Input --> Delay[DelayNode]
|
||
Delay --> Output
|
||
```
|
||
|
||
- 基础延迟效果
|
||
- 精确到采样级的延迟控制
|
||
|
||
### EchoEffect(回声效果)
|
||
|
||
```mermaid
|
||
graph LR
|
||
Input --> Gain
|
||
Gain --> Delay
|
||
Delay --> Gain[反馈循环]
|
||
Gain --> Output
|
||
```
|
||
|
||
- 带反馈的延迟效果
|
||
- 自动渐弱回声处理
|
||
|
||
---
|