File size: 3,541 Bytes
bfc7d04
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
// Voice Integration Example - Demonstrates voice tools with Stack 2.9
//
// This example shows how to:
// 1. Initialize the voice client
// 2. Clone a voice from audio sample
// 3. Record voice commands
// 4. Synthesize speech responses

import {
  initVoiceClient,
  VoiceRecordingTool,
  VoiceSynthesisTool,
  VoiceCloneTool,
  VoiceStatusTool,
} from '../voice/index.js'
import { log } from '../utils/logger.js'

/**
 * Example: Initialize voice client and check status
 */
async function checkVoiceStatus() {
  log('Checking voice service status...')

  // Initialize client (or use environment variables)
  const client = initVoiceClient({
    apiUrl: process.env.VOICE_API_URL ?? 'http://localhost:8000',
  })

  const statusTool = new VoiceStatusTool()
  const result = await statusTool.execute()

  log('Voice status:', result)
  return result
}

/**
 * Example: Clone a voice from audio sample
 */
async function cloneVoiceExample() {
  log('Cloning voice from sample...')

  const client = initVoiceClient({
    apiUrl: process.env.VOICE_API_URL ?? 'http://localhost:8000',
  })

  const cloneTool = new VoiceCloneTool()
  const result = await cloneTool.execute({
    voiceName: 'my_voice',
    audioPath: './audio_samples/my_voice.wav',
  })

  log('Clone result:', result)
  return result
}

/**
 * Example: Record voice command
 */
async function recordVoiceCommand() {
  log('Starting voice recording...')

  const recordingTool = new VoiceRecordingTool()

  // Record with max 30 second duration
  const result = await recordingTool.execute({ maxDuration: 30000 })

  if (result.success) {
    const data = result.data as { duration?: number; sampleRate?: number } | undefined
    log('Recording captured:', {
      duration: data?.duration,
      sampleRate: data?.sampleRate,
    })
  } else {
    log('Recording failed:', result.error)
  }

  return result
}

/**
 * Example: Synthesize speech response
 */
async function synthesizeResponse(text: string) {
  log(`Synthesizing: "${text}"`)

  const client = initVoiceClient({
    apiUrl: process.env.VOICE_API_URL ?? 'http://localhost:8000',
  })

  const synthTool = new VoiceSynthesisTool()
  const result = await synthTool.execute({
    text,
    voiceName: 'my_voice',
  })

  if (result.success) {
    log('Audio generated successfully')
  } else {
    log('Synthesis failed:', result.error)
  }

  return result
}

/**
 * Example: Complete voice conversation workflow
 */
async function voiceConversation() {
  // 1. Check status
  await checkVoiceStatus()

  // 2. Record user's voice command
  const recording = await recordVoiceCommand()
  if (!recording.success) {
    log('Cannot proceed without voice input')
    return
  }

  // 3. In real implementation, send audio to STT service
  // const text = await transcribe(recording.data.audio)

  // 4. Process with Stack 2.9 (simulated)
  const responseText = 'I have analyzed your code and found 3 potential improvements.'

  // 5. Synthesize response
  await synthesizeResponse(responseText)
}

// Run examples if this is the main module
if (import.meta.url === `file://${process.argv[1]}`) {
  log('Running voice integration examples...')

  // Check status
  await checkVoiceStatus()

  // Uncomment to run other examples:
  // await cloneVoiceExample()
  // await recordVoiceCommand()
  // await synthesizeResponse('Hello, this is a test response.')
  // await voiceConversation()
}

export default {
  checkVoiceStatus,
  cloneVoiceExample,
  recordVoiceCommand,
  synthesizeResponse,
  voiceConversation,
}