11import ffmpeg from 'fluent-ffmpeg'
22import path from 'path'
33
4- import type { StoryDataAggregate } from '../types'
4+ import type { StoryDataAggregate , TtsService } from '../types'
55
66import { CACHE_DIR } from '../lib/constants'
77import { readFromCache , writeToCache } from '../utils/cache'
@@ -18,6 +18,7 @@ type PodcastSegment = {
1818
1919export async function generateAudioFromText (
2020 storyData : ( PodcastSegment | StoryDataAggregate ) [ ] ,
21+ ttsService : TtsService ,
2122) : Promise < string [ ] > {
2223 const audioFilenames : string [ ] = [ ]
2324
@@ -33,30 +34,9 @@ export async function generateAudioFromText(
3334
3435 logger . info ( `[${ i + 1 } /${ storyData . length } ] Generating audio: ${ story . storyId } ...` )
3536 try {
36- if ( process . env . VOICE_SERVICE === 'elevenlabs' ) {
37- const audioStream = await getElevenLabsClient ( ) . textToSpeech . convert (
38- '56AoDkrOh6qfVPDXZ7Pt' , // Cassidy
39- {
40- text : story . summary as string ,
41- model_id : 'eleven_turbo_v2' ,
42- } ,
43- )
44- logger . info ( 'Received back audio stream' )
45- const buffer = await streamToBuffer ( audioStream )
46- logger . info ( `Audio file generated: ${ filename } ` )
47- await writeToCache ( filename , buffer )
48- } else {
49- const mp3 = await getOpenAIClient ( ) . audio . speech . create ( {
50- model : 'tts-1-hd' ,
51- voice : 'nova' ,
52- input : story . summary as string ,
53- } )
54-
55- const buffer = Buffer . from ( await mp3 . arrayBuffer ( ) )
56- logger . info ( `Audio file generated: ${ filename } ` )
57- await writeToCache ( filename , buffer )
58- }
59-
37+ const buffer = await ttsService . convert ( story . summary as string )
38+ logger . info ( `Audio file generated: ${ filename } ` )
39+ await writeToCache ( filename , buffer )
6040 audioFilenames . push ( filename )
6141 } catch ( error ) {
6242 logger . error ( `Error generating audio for story: ${ story . storyId } \nsummary: ${ story . summary } ` )
@@ -107,11 +87,3 @@ function insertBetween(array: string[], itemToInsert: string): string[] {
10787 return acc
10888 } , [ ] as string [ ] )
10989}
110-
111- async function streamToBuffer ( stream : NodeJS . ReadableStream ) {
112- const chunks : ( Buffer | string ) [ ] = [ ]
113- for await ( const chunk of stream ) {
114- chunks . push ( chunk )
115- }
116- return Buffer . concat ( chunks as Buffer [ ] )
117- }
0 commit comments