feat: 하나의 문장(한 줄)을 받아 음성으로 변환하는 기능 구현
This commit is contained in:
parent
1abad2258d
commit
fc9331d411
@ -0,0 +1,44 @@
|
|||||||
|
package com.sangdol.text_to_speech
|
||||||
|
|
||||||
|
import com.google.cloud.texttospeech.v1.*
|
||||||
|
import com.google.protobuf.ByteString
|
||||||
|
import org.springframework.stereotype.Component
|
||||||
|
import java.io.File
|
||||||
|
import java.io.FileOutputStream
|
||||||
|
|
||||||
|
@Component
|
||||||
|
class SingleTextConverter(
|
||||||
|
private val ttsClient: TextToSpeechClient
|
||||||
|
) {
|
||||||
|
fun convert(
|
||||||
|
request: ConvertSingleTextRequest,
|
||||||
|
filePath: String,
|
||||||
|
language: TtsLanguageCode = TtsLanguageCode.ENGLISH_US,
|
||||||
|
encodingType: AudioEncoding = AudioEncoding.MP3
|
||||||
|
) {
|
||||||
|
val synthesisInput = SynthesisInput.newBuilder()
|
||||||
|
.setText(request.text)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val voiceOptions = VoiceSelectionParams.newBuilder()
|
||||||
|
.setLanguageCode(language.code)
|
||||||
|
.setName(request.type.identifier)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val audioConfig = AudioConfig.newBuilder()
|
||||||
|
.setAudioEncoding(encodingType)
|
||||||
|
.setSpeakingRate(request.speakingRate)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val synthesizeResponse: SynthesizeSpeechResponse = ttsClient.synthesizeSpeech(synthesisInput, voiceOptions, audioConfig)
|
||||||
|
val content: ByteString = synthesizeResponse.audioContent
|
||||||
|
|
||||||
|
val file = File(filePath).also {
|
||||||
|
it.parentFile
|
||||||
|
.takeIf { dir -> !dir.exists() }
|
||||||
|
?.mkdirs()
|
||||||
|
}
|
||||||
|
|
||||||
|
FileOutputStream(file).use { it.write(content.toByteArray()) }
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user