@ng-web-apis/speech
Version:
A library for using Web Speech API with Angular
60 lines • 7.1 kB
JavaScript
import { Directive, EventEmitter, inject, Input, Output } from '@angular/core';
import { SPEECH_SYNTHESIS } from '@ng-web-apis/common';
import * as i0 from "@angular/core";
class WaTextToSpeech {
speechSynthesisRef = inject(SPEECH_SYNTHESIS);
paused = false;
onerror = new EventEmitter();
onend = new EventEmitter();
onmark = new EventEmitter();
onboundary = new EventEmitter();
set waTextToSpeech(utterance) {
this.speechSynthesisRef.cancel();
this.speechSynthesisRef.pause();
utterance.onerror = (e) => this.onerror.emit(e);
utterance.onend = (e) => this.onend.emit(e);
utterance.onmark = (e) => this.onmark.emit(e);
utterance.onboundary = (e) => this.onboundary.emit(e);
this.speechSynthesisRef.speak(utterance);
}
ngOnChanges() {
if (this.paused) {
this.speechSynthesisRef.pause();
}
else {
this.speechSynthesisRef.resume();
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WaTextToSpeech, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WaTextToSpeech, isStandalone: true, selector: "[waTextToSpeech]", inputs: { paused: ["waTextToSpeechPaused", "paused"], waTextToSpeech: "waTextToSpeech" }, outputs: { onerror: "waTextToSpeechError", onend: "waTextToSpeechEnd", onmark: "waTextToSpeechMark", onboundary: "waTextToSpeechBoundary" }, usesOnChanges: true, ngImport: i0 });
}
export { WaTextToSpeech };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WaTextToSpeech, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: '[waTextToSpeech]',
}]
}], propDecorators: { paused: [{
type: Input,
args: ['waTextToSpeechPaused']
}], onerror: [{
type: Output,
args: ['waTextToSpeechError']
}], onend: [{
type: Output,
args: ['waTextToSpeechEnd']
}], onmark: [{
type: Output,
args: ['waTextToSpeechMark']
}], onboundary: [{
type: Output,
args: ['waTextToSpeechBoundary']
}], waTextToSpeech: [{
type: Input
}] } });
/**
* @deprecated: use {@link WaTextToSpeech}
*/
export const TextToSpeechDirective = WaTextToSpeech;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC10by1zcGVlY2guZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9zcGVlY2gvc3JjL21vZHVsZXMvc3BlZWNoLXN5bnRoZXNpcy90ZXh0LXRvLXNwZWVjaC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7O0FBRXJELE1BSWEsY0FBYztJQUNOLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBR3hELE1BQU0sR0FBRyxLQUFLLENBQUM7SUFHTixPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQTZCLENBQUM7SUFHeEQsS0FBSyxHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO0lBR2pELE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztJQUdsRCxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7SUFFdEUsSUFDVyxjQUFjLENBQUMsU0FBbUM7UUFDekQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVoQyxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ25DO2FBQU07WUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDcEM7SUFDTCxDQUFDO3dHQXJDUSxjQUFjOzRGQUFkLGNBQWM7O1NBQWQsY0FBYzs0RkFBZCxjQUFjO2tCQUoxQixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsa0JBQWtCO2lCQUMvQjs4QkFLVSxNQUFNO3NCQURaLEtBQUs7dUJBQUMsc0JBQXNCO2dCQUliLE9BQU87c0JBRHRCLE1BQU07dUJBQUMscUJBQXFCO2dCQUliLEtBQUs7c0JBRHBCLE1BQU07dUJBQUMsbUJBQW1CO2dCQUlYLE1BQU07c0JBRHJCLE1BQU07dUJBQUMsb0JBQW9CO2dCQUlaLFVBQVU7c0JBRHpCLE1BQU07dUJBQUMsd0JBQXdCO2dCQUlyQixjQUFjO3NCQUR4QixLQUFLOztBQXNCVjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtPbkNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U1BFRUNIX1NZTlRIRVNJU30gZnJvbSAnQG5nLXdlYi1hcGlzL2NvbW1vbic7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdbd2FUZXh0VG9TcGVlY2hdJyxcbn0pXG5leHBvcnQgY2xhc3MgV2FUZXh0VG9TcGVlY2ggaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3BlZWNoU3ludGhlc2lzUmVmID0gaW5qZWN0KFNQRUVDSF9TWU5USEVTSVMpO1xuXG4gICAgQElucHV0KCd3YVRleHRUb1NwZWVjaFBhdXNlZCcpXG4gICAgcHVibGljIHBhdXNlZCA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgnd2FUZXh0VG9TcGVlY2hFcnJvcicpXG4gICAgcHVibGljIHJlYWRvbmx5IG9uZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPFNwZWVjaFN5bnRoZXNpc0Vycm9yRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCd3YVRleHRUb1NwZWVjaEVuZCcpXG4gICAgcHVibGljIHJlYWRvbmx5IG9uZW5kID0gbmV3IEV2ZW50RW1pdHRlcjxTcGVlY2hTeW50aGVzaXNFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoJ3dhVGV4dFRvU3BlZWNoTWFyaycpXG4gICAgcHVibGljIHJlYWRvbmx5IG9ubWFyayA9IG5ldyBFdmVudEVtaXR0ZXI8U3BlZWNoU3ludGhlc2lzRXZlbnQ+KCk7XG5cbiAgICBAT3V0cHV0KCd3YVRleHRUb1NwZWVjaEJvdW5kYXJ5JylcbiAgICBwdWJsaWMgcmVhZG9ubHkgb25ib3VuZGFyeSA9IG5ldyBFdmVudEVtaXR0ZXI8U3BlZWNoU3ludGhlc2lzRXZlbnQ+KCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgd2FUZXh0VG9TcGVlY2godXR0ZXJhbmNlOiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UpIHtcbiAgICAgICAgdGhpcy5zcGVlY2hTeW50aGVzaXNSZWYuY2FuY2VsKCk7XG4gICAgICAgIHRoaXMuc3BlZWNoU3ludGhlc2lzUmVmLnBhdXNlKCk7XG5cbiAgICAgICAgdXR0ZXJhbmNlLm9uZXJyb3IgPSAoZSkgPT4gdGhpcy5vbmVycm9yLmVtaXQoZSk7XG4gICAgICAgIHV0dGVyYW5jZS5vbmVuZCA9IChlKSA9PiB0aGlzLm9uZW5kLmVtaXQoZSk7XG4gICAgICAgIHV0dGVyYW5jZS5vbm1hcmsgPSAoZSkgPT4gdGhpcy5vbm1hcmsuZW1pdChlKTtcbiAgICAgICAgdXR0ZXJhbmNlLm9uYm91bmRhcnkgPSAoZSkgPT4gdGhpcy5vbmJvdW5kYXJ5LmVtaXQoZSk7XG5cbiAgICAgICAgdGhpcy5zcGVlY2hTeW50aGVzaXNSZWYuc3BlYWsodXR0ZXJhbmNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5zcGVlY2hTeW50aGVzaXNSZWYucGF1c2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3BlZWNoU3ludGhlc2lzUmVmLnJlc3VtZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkOiB1c2Uge0BsaW5rIFdhVGV4dFRvU3BlZWNofVxuICovXG5leHBvcnQgY29uc3QgVGV4dFRvU3BlZWNoRGlyZWN0aXZlID0gV2FUZXh0VG9TcGVlY2g7XG4iXX0=