meSpeak.js 2.0 발표
본문
JS의 텍스트 음성 변환 기능이 향상되었습니다.
JavaScript의 웹용 오픈 소스 TTS 인 meSpeak.js 로의 업데이트 계획을 발표하게 되어 기쁩니다. 이 버전은 주요 업데이트 및 API의 일부 불연속 기능도 제공합니다. 간단히 말해 meSpeak.js는 Emscripten (JS에서 LLVM 컴파일러 출력을 실행하기 위한 최소 POSIX 런타임)을 사용하여 JS로 크로스 컴파일 된 오픈 소스 eSpeak 프로그램입니다.
위에 추가 API가 추가 된 브라우저 MeSpeak.js는 Emscripten의 초기 데모 응용 프로그램 인 speak.js를 기반으로 하지만 아키텍처와 기능이 약간 다릅니다 (eSpeak 옵션 전체에 대한 액세스, 오디오 데이터 내보내기 및 / 또는 버퍼링을위한 기능, 빌드 된 기능 등) 오디오 재생 API, 모듈 식 음성 및 언어 설명 등)과 호환됩니다.
https://www.masswerk.at/nowgobang/2019/mespeak_2_0
업데이트의 주요 기능은 다음과 같습니다.
- 동시 Web Worker
우선, meSpeak.js는 프론트 엔드 ( "mescript.js")와 애플리케이션 코어 ( "mespeak-core.js")의 두 부분으로 구성된 모듈 식 아키텍처를 특징으로 합니다. 종료. 응용 프로그램 코어에는 Emscripten 포트 및 기본 통신 기능이 포함되어 있으며 이중 특성이 있습니다. 브라우저가 웹 워커를 지원하는 경우 코어가 백그라운드에서 동시에 워커로 실행됩니다. 그렇지 않으면 인스턴스로 로드되어 실행됩니다. 메인 스레드에서 (전과 같이). 즉, 응용 프로그램은 모든 최신 웹 브라우저에서 동시에 실행되며 API 호출을 해결하고 오디오 재생을 관리하기 위해 UI 스레드 만 차지합니다. 그러나 여전히 이전 클라이언트와의 호환성을 유지합니다. (BTW, 최소 요구 사항은 웹 오디오 API 또는 HTML 오디오 요소를 사용하여 WAV 파일을 재생하는 형식화 된 배열 및 기능의 기본 지원입니다. 이는 기본 HTML5 기능 및 ES5 이전의 JS 지원을 의미합니다. 2011 년 이후.)
업데이트 : 슬프게도 모바일 장치 (iOS 등)는 작업자의 postMessage-event 이벤트에 의해 트리거 된 사운드의 재생을 음소거 합니다. 동시 처리가 모바일에서 특히 유용했을 수 있지만 해당 장치의 작업자를 비활성화 해야 했습니다. 반면에, meSpeak.js에는 간단한 모바일 잠금 해제 기능이 포함되어 있으며 해당되는 경우 첫 번째 터치 스타트 이벤트에서 짧고들을 수 없는 소리가 들립니다.
- 작은 파일 크기
Emscripten 코어의 보다 적극적인 압축 덕분에 이제 파일 크기가 대폭 줄어 듭니다 (총 500K g 압축).
- 더 간단한 로딩 (더 이상 구성 없음)
speak.js의 첫 번째 변경 중 하나는 모듈 식 구성 및 음성 / 언어 정의를 로드하는 기능이었습니다. 그러나 사용자 정의 구성 파일을 컴파일 해야 하는 번거로움은 거의 없습니다. 따라서 표준 구성은 이제 핵심 응용 프로그램에 포함됩니다. 그러나 사용자 정의 구성 파일을 로드하여 포함 된 표준 정의를 재정의 하는 새로운 API 호출이 있습니다.
meSpeak.loadCustomConfig(<url> [, callback)”.
URL (이전과 같이) 또는 "voice-ID"로 음성 정의를 로드 할 수있어 (meSpeak-installation의 "voices"디렉토리 내부에서 각 JSON 파일을 로드 함)로드 프로세스도 향상되었습니다. .)이 두 호출은 동의어입니다.
meSpeak.loadVoice('voices/en/en-us.json', myCallbackFuntion);
meSpeak.loadVoice('en/en-us', myCallbackFuntion);
- 호환성 경고 : 음성 경로
그러나 작은 단점으로 로드 경로와 관련된 변경 사항이 있습니다 (이는 사용자 정의 구성 파일 로드에도 적용됨). 이는 주로 작업자가 자신의 위치를 기준으로 파일을 로드하는 반면 일반 스크립트는 포함 페이지의 경로를 기준으로 파일을 로드하기 때문입니다. 우리의 핵심은 이중적인 성격을 지니고 있기 때문에 그들 중 하나를 선택해야 합니다. 확실히, 동일한 설치 디렉토리를 기준으로 항상 파일을 로드하는 것이 더 편리하고 선호 됩니다. 따라서 이미 meSpeak.js를 실행 중인 경우 음성 경로를 조정하거나 베어 보이스 ID로 변경해야 할 수도 있습니다.
- 콜백에서 오디오 스트림 데이터
작업자가 비동기 적으로 실행 중이며 호환성 수준 (비동기-대기 또는 무시 없음)을 유지하려고 하므로 "rawdata"옵션으로 호출 할 때 단순히 오디오 데이터를 반환 할 수 없습니다. 대신, 지정된 형식으로 오디오 데이터를 수신하려면 이제 콜백 함수를 제공해야 합니다.
var jobId = meSpeak.speak('Hello world',
{
pitch: 60,
variant: 'm6',
rawdata: 'data-url'
},
function(success, id, data) {
if (success) myFiles.push(data);
}
);
uint8 표현의 이진 wav 파일 인 오디오 데이터는 ArrayBuffer [기본값], 일반 배열, base64 인코딩 문자열 또는 data-url로 내보낼 수 있습니다.
- 오디오 필터 및 스테레오 패닝
마지막으로 기본 웹 오디오 필터 (BiquadFilter를 "저역 통과", "고역 통과", "대역 통과", "낮은 선반", "높은 선반", "피킹", "노치", "allpass"및 DynamicsCompressors)를 추가 할 수 있습니다. 오디오 후 처리를 위한 간단한 API. 이러한 필터는 전역 수준에 적용되지만 이제 개별 발화를 이동 (오디오를 모노에서 스테레오로 변환하기 위해) 할 수도 있습니다. 이것이 Web Audio API 및 내 보낸 스트림을 통해 달성 된다는 점은 여전히 모노입니다. 그러나“meSpeak.play ()”로 캐시 된 스트림을 재생할 때도 패닝을 사용할 수 있습니다 또 다른 추가 사항은 웹 오디오 분석기 노드를 반환하는 meSpeak.getAudioAnalyser ()입니다. — 아래 예를 참조하십시오.
스테레오 패닝 예제
음성이 분산 된 텍스트를 읽는 예입니다. Joseph Weizenbaum의 유명한 ELIZA 자연 언어 대화 프로그램 [1] 세션의 샘플 대화 인 대화는 두 가지 고유 한 문자로 읽힙니다. 사용자를 나타내는 미국 영어 영어 음성, 왼쪽에 80 %, 가상 의사를 사칭하는 Englisch Received Pronunciation (RP)를 사용하는 남성 캐릭터가 80 %에서 오른쪽으로 말하기.
(모바일에서 오디오 재생에 대한 제한이 심각하여 성능이 제한되고 메모리 제한이 있을 수 있으므로 이 예제는 모바일 장치에서 제대로 작동하지 않을 수 있습니다.)
(https://www.masswerk.at/nowgobang/2019/mespeak_2_0 원문 참조)
- 이전글React을 위해 알아야 할 JavaScript 19.08.23
- 다음글자바 스크립트에서 undefined 7 가지 팁 19.08.22