|
@@ -12,11 +12,14 @@ export class AudioPlayer {
|
|
|
private isProcessingQueue = false;
|
|
private isProcessingQueue = false;
|
|
|
private nextStartTime = 0; // 下一个音频块的开始时间
|
|
private nextStartTime = 0; // 下一个音频块的开始时间
|
|
|
private currentSources: AudioBufferSourceNode[] = []; // 当前播放的音频源
|
|
private currentSources: AudioBufferSourceNode[] = []; // 当前播放的音频源
|
|
|
|
|
+
|
|
|
|
|
+ // 播放速度控制
|
|
|
|
|
+ private playbackRate = 1.2; // 播放速度:1.2 = 加快 20%
|
|
|
|
|
|
|
|
async initialize(): Promise<void> {
|
|
async initialize(): Promise<void> {
|
|
|
// 创建 AudioContext,采样率 24000Hz(与后端 TTS 一致)
|
|
// 创建 AudioContext,采样率 24000Hz(与后端 TTS 一致)
|
|
|
this.audioContext = new AudioContext({ sampleRate: 24000 });
|
|
this.audioContext = new AudioContext({ sampleRate: 24000 });
|
|
|
- console.log(`AudioPlayer 初始化 - 采样率: ${this.audioContext.sampleRate}Hz`);
|
|
|
|
|
|
|
+ console.log(`AudioPlayer 初始化 - 采样率: ${this.audioContext.sampleRate}Hz, 播放速度: ${this.playbackRate}x`);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -83,13 +86,14 @@ export class AudioPlayer {
|
|
|
|
|
|
|
|
const source = this.audioContext.createBufferSource();
|
|
const source = this.audioContext.createBufferSource();
|
|
|
source.buffer = audioBuffer;
|
|
source.buffer = audioBuffer;
|
|
|
|
|
+ source.playbackRate.value = this.playbackRate; // 🔥 设置播放速度
|
|
|
source.connect(this.audioContext.destination);
|
|
source.connect(this.audioContext.destination);
|
|
|
|
|
|
|
|
// 在队列中的下一个时间点开始播放(实现无缝衔接)
|
|
// 在队列中的下一个时间点开始播放(实现无缝衔接)
|
|
|
source.start(this.nextStartTime);
|
|
source.start(this.nextStartTime);
|
|
|
|
|
|
|
|
- // 更新下一个音频块的开始时间
|
|
|
|
|
- this.nextStartTime += audioBuffer.duration;
|
|
|
|
|
|
|
+ // 更新下一个音频块的开始时间(考虑播放速度)
|
|
|
|
|
+ this.nextStartTime += audioBuffer.duration / this.playbackRate;
|
|
|
|
|
|
|
|
// 保存音频源引用
|
|
// 保存音频源引用
|
|
|
this.currentSources.push(source);
|
|
this.currentSources.push(source);
|
|
@@ -114,6 +118,15 @@ export class AudioPlayer {
|
|
|
this.isProcessingQueue = false;
|
|
this.isProcessingQueue = false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 设置播放速度
|
|
|
|
|
+ * @param rate 播放速度(1.0 = 正常,1.5 = 加快 50%,2.0 = 2倍速)
|
|
|
|
|
+ */
|
|
|
|
|
+ setPlaybackRate(rate: number): void {
|
|
|
|
|
+ this.playbackRate = Math.max(0.5, Math.min(3.0, rate)); // 限制范围 0.5-3.0
|
|
|
|
|
+ console.log(`播放速度已设置为: ${this.playbackRate}x`);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 标记音频流结束
|
|
* 标记音频流结束
|
|
|
*/
|
|
*/
|