정보실

웹학교

정보실

javascript 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 


Announcing 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 원문 참조)



  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

페이지 정보

조회 38회 ]  작성일19-08-23 00:11

웹학교