tts.js
2.15 KB
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
import AWS from 'aws-sdk'
// Polly를 사용하기 위한 자격증명을 설정한다.
AWS.config.region = 'ap-northeast-2';
AWS.config.credentials = new AWS.CognitoIdentityCredentials({IdentityPoolId: 'ap-northeast-2:03db97c9-a857-45f3-be6e-3cf84d6f619b'});
const polly = new AWS.Polly({
signatureVersion: 'v4',
region: 'ap-northeast-2',
});
const audioQueue = []
// test data
// const audioQueue = ["https://file-examples-com.github.io/uploads/2017/11/file_example_MP3_700KB.mp3", "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3", "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3"]
const audio = new Audio()
// queue에서 작업(재생할 내용)을 0.5초마다 폴링하는 방식
function enableAudio(){
setInterval(()=>{
// 앞선 tts 재생이 종료된 경우에만 새 tts를 실행
if( !audio.paused){ return;}
let audioFile = audioQueue.shift()
// 재생할 게 있으면 재생
if (audioFile){
console.log(audioFile)
audio.setAttribute("src", audioFile)
audio.play()
}
}, 500)
}
function enqueueTTS(text){
let params = {
'Text': text,
'OutputFormat': 'mp3',
'VoiceId': 'Seoyeon'
};
let tts = new AWS.Polly.Presigner(params, polly)
// tts로 변환한 음성 파일을 얻는다.
tts.getSynthesizeSpeechUrl(params, function(error, url) {
if (error) {
} else {
audioQueue.push(url)
}
})
}
console.log("테스트용 TTS 데이터를 주입합니다.")
enqueueTTS(`전에 data hazards에서 3가지 data-dependence를 배웠다. mips인 경우에는 in-order이라 True data dependency 문제밖에 안생겼었다
근데 out-of-order 관점에서는 3개의 명령어가 동시에 fetch되는 경우를 생각해보자.
만약 1, 3 line 순서 바뀌면 당연히 결과가 이상해진다. 전에 고려하지 못했던 output dependency 와 anti dependency 고려해줘야한다. `)
enqueueTTS("복잡한 브랜치")
enqueueTTS("빵상 아주머니는 말씀하셨다.")
enqueueTTS("니가가라 하와이")
export default {
enableAudio,
enqueueTTS,
}