zlwu 1 gadu atpakaļ
vecāks
revīzija
bde0aa1bd9
2 mainītis faili ar 18 papildinājumiem un 5 dzēšanām
  1. 2 2
      backend/config.py
  2. 16 3
      frontend/src/utils/audioPlayer.ts

+ 2 - 2
backend/config.py

@@ -35,8 +35,8 @@ class Settings(BaseSettings):
     
     # TTS配置
     tts_model: str = os.getenv("TTS_MODEL", "qwen3-tts-flash")
-    tts_voice: str = os.getenv("TTS_VOICE", "Elias")  # 男声
-    tts_speech_rate: float = float(os.getenv("TTS_SPEECH_RATE", "1.5"))  # 语速:1.2 = 加快20%
+    tts_voice: str = os.getenv("TTS_VOICE", "Jennifer")  # 女声
+    tts_speech_rate: float = float(os.getenv("TTS_SPEECH_RATE", "1.0"))  # 语速:1.0 = 正常速度
     
     # 豆包API超时配置
     DOUBAO_RECV_TIMEOUT: int = 15  # 接收消息超时(秒)

+ 16 - 3
frontend/src/utils/audioPlayer.ts

@@ -12,11 +12,14 @@ export class AudioPlayer {
   private isProcessingQueue = false;
   private nextStartTime = 0; // 下一个音频块的开始时间
   private currentSources: AudioBufferSourceNode[] = []; // 当前播放的音频源
+  
+  // 播放速度控制
+  private playbackRate = 1.2; // 播放速度:1.2 = 加快 20%
 
   async initialize(): Promise<void> {
     // 创建 AudioContext,采样率 24000Hz(与后端 TTS 一致)
     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();
       source.buffer = audioBuffer;
+      source.playbackRate.value = this.playbackRate; // 🔥 设置播放速度
       source.connect(this.audioContext.destination);
       
       // 在队列中的下一个时间点开始播放(实现无缝衔接)
       source.start(this.nextStartTime);
       
-      // 更新下一个音频块的开始时间
-      this.nextStartTime += audioBuffer.duration;
+      // 更新下一个音频块的开始时间(考虑播放速度)
+      this.nextStartTime += audioBuffer.duration / this.playbackRate;
       
       // 保存音频源引用
       this.currentSources.push(source);
@@ -114,6 +118,15 @@ export class AudioPlayer {
     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`);
+  }
+
   /**
    * 标记音频流结束
    */