UNPKG

@sam17896/ngx-speech-recognition

Version:

Angular 5+ speech recognition service (based on browser implementation such as Chrome).

201 lines 19 kB
/** * @fileoverview added by tsickle * Generated from: lib/service/rx-speech-recognition.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Observable, pipe, Subject, BehaviorSubject, } from 'rxjs'; import { filter, map } from 'rxjs/operators'; import { Injectable, ApplicationRef, Inject, Optional } from '@angular/core'; import { SpeechRecognitionGrammars, SpeechRecognitionLang, SpeechRecognitionContinuous, SpeechRecognitionInterimResults, SpeechRecognitionMaxAlternatives, SpeechRecognitionServiceUri, } from './speech-recognition.token'; import { SpeechRecognitionCommon, } from './speech-recognition.common'; /** @type {?} */ const onType = (/** * @param {?} type * @return {?} */ (type) => { return filter((/** * @param {?} e * @return {?} */ (e) => (e.type === type))); }); const ɵ0 = onType; /** @type {?} */ export const resultList = pipe(onType('result'), map((/** * @param {?} e * @return {?} */ (e) => e.results))); export class RxSpeechRecognitionService extends SpeechRecognitionCommon { /** * @param {?} ref * @param {?} grammars * @param {?} lang * @param {?} continuous * @param {?} interimResults * @param {?} maxAlternatives * @param {?} serviceURI */ constructor(ref, grammars, lang, continuous, interimResults, maxAlternatives, serviceURI) { super(grammars, lang, continuous, interimResults, maxAlternatives, serviceURI); this.ref = ref; this.proxy$ = new Subject(); this._started$ = new BehaviorSubject(false); this.initInternal(); } /** * @return {?} */ get $() { return (/** @type {?} */ (this.proxy$)); } /** * @return {?} */ get started$() { return (/** @type {?} */ (this._started$)); } /** * @private * @return {?} */ initInternal() { // set handlers /** @type {?} */ const handler = (/** * @param {?} e * @return {?} */ (e) => { this.proxy$.next(e); this.ref.tick(); }); /** @type {?} */ const errHandler = (/** * @param {?} e * @return {?} */ (e) => { this.proxy$.error(e); this.ref.tick(); }); this.internal.onaudiostart = handler; this.internal.onsoundstart = handler; this.internal.onspeechstart = handler; this.internal.onspeechend = handler; this.internal.onsoundend = handler; this.internal.onaudioend = handler; this.internal.onresult = handler; this.internal.onnomatch = handler; this.internal.onerror = errHandler; this.internal.onstart = handler; this.internal.onend = handler; // see setter methods this.grammars = this._grammars; this.lang = this._lang; this.continuous = this._continuous; this.interimResults = this._interimResults; this.maxAlternatives = this._maxAlternatives; this.serviceURI = this._serviceURI; this.proxy$.subscribe((/** * @param {?} e * @return {?} */ (e) => { switch (e.type) { case 'start': this._started$.next(true); break; case 'end': this._started$.next(false); break; } })); } // The listen() method aims to recognize the grammar associated with the current SpeechRecognition, // Observable is returned for handling voice recognition service listening to incoming voice. // When you subscrive the return value, listening begins and listening ends when an end event occurs. // Interrupt listening by unsubscribing in the middle. // // listen() メソッドは、現在のSpeechRecognitionに // 関連付けられた文法を認識することを目的として、 // 着信音声を聴取する音声認識サービスを扱うためのObservableが返されます。 // 返り値をsubscriveすると聴取が開始され、endのイベントが発生すると聴取を終了します。 // 途中でunsbscriveすることで聴取を中断します。 /** * @return {?} */ listen() { /** @type {?} */ const listener = new Observable((/** * @param {?} ovserver * @return {?} */ (ovserver) => { // create subscriotion /** @type {?} */ const subscriotion = this.proxy$.subscribe({ next: (/** * @param {?} e * @return {?} */ (e) => { ovserver.next(e); if (e.type && e.type === 'end') { this.internal.stop(); ovserver.complete(); subscriotion.unsubscribe(); } }), error: (/** * @param {?} e * @return {?} */ (e) => ovserver.error(e)), }); // Speech Recognition start this.internal.start(); return (/** * @return {?} */ () => { this.internal.abort(); subscriotion.unsubscribe(); }); })); return listener; } } RxSpeechRecognitionService.decorators = [ { type: Injectable } ]; /** @nocollapse */ RxSpeechRecognitionService.ctorParameters = () => [ { type: ApplicationRef }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [SpeechRecognitionGrammars,] }] }, { type: String, decorators: [{ type: Optional }, { type: Inject, args: [SpeechRecognitionLang,] }] }, { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [SpeechRecognitionContinuous,] }] }, { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [SpeechRecognitionInterimResults,] }] }, { type: Number, decorators: [{ type: Optional }, { type: Inject, args: [SpeechRecognitionMaxAlternatives,] }] }, { type: String, decorators: [{ type: Optional }, { type: Inject, args: [SpeechRecognitionServiceUri,] }] } ]; if (false) { /** * @type {?} * @private */ RxSpeechRecognitionService.prototype.proxy$; /** * @type {?} * @private */ RxSpeechRecognitionService.prototype._started$; /** * @type {?} * @private */ RxSpeechRecognitionService.prototype.ref; } export { ɵ0 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtc3BlZWNoLXJlY29nbml0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2FtMTc4OTYvbmd4LXNwZWVjaC1yZWNvZ25pdGlvbi8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlL3J4LXNwZWVjaC1yZWNvZ25pdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixJQUFJLEVBRUosT0FBTyxFQUNQLGVBQWUsR0FDaEIsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0UsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsMkJBQTJCLEVBQzNCLCtCQUErQixFQUMvQixnQ0FBZ0MsRUFDaEMsMkJBQTJCLEdBQzVCLE1BQU0sNEJBQTRCLENBQUM7QUFPcEMsT0FBTyxFQUNMLHVCQUF1QixHQUN4QixNQUFNLDZCQUE2QixDQUFDOztNQUUvQixNQUFNOzs7O0FBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtJQUM5QixPQUFPLE1BQU07Ozs7SUFBQyxDQUFDLENBQWdDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQTs7O0FBRUQsTUFBTSxPQUFPLFVBQVUsR0FBK0YsSUFBSSxDQUN4SCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQ2hCLEdBQUc7Ozs7QUFBQyxDQUFDLENBQXlCLEVBQStCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFDLENBQzNFO0FBR0QsTUFBTSxPQUFPLDBCQUEyQixTQUFRLHVCQUF1Qjs7Ozs7Ozs7OztJQWNyRSxZQUNVLEdBQW1CLEVBRzNCLFFBQStC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QUFRLFlBQUksTUFBTSxTQUFDLGdDQUFnQzt5Q0FHbkQsUUFBUSxZQUFJLE1BQU0sU0FBQywyQkFBMkI7Ozs7Ozs7SUE5QmpELDRDQUF1RTs7Ozs7SUFFdkUsK0NBQXdEOzs7OztJQVd0RCx5Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIE9ic2VydmFibGUsXHJcbiAgcGlwZSxcclxuICBVbmFyeUZ1bmN0aW9uLFxyXG4gIFN1YmplY3QsXHJcbiAgQmVoYXZpb3JTdWJqZWN0LFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEluamVjdGFibGUsIEFwcGxpY2F0aW9uUmVmLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNwZWVjaFJlY29nbml0aW9uR3JhbW1hcnMsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25MYW5nLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uQ29udGludW91cyxcclxuICBTcGVlY2hSZWNvZ25pdGlvbkludGVyaW1SZXN1bHRzLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uTWF4QWx0ZXJuYXRpdmVzLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uU2VydmljZVVyaSxcclxufSBmcm9tICcuL3NwZWVjaC1yZWNvZ25pdGlvbi50b2tlbic7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNwZWVjaEdyYW1tYXJMaXN0VHlwZSxcclxuICBTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2VFdmVudCxcclxufSBmcm9tICcuLi9hZGFwdGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU3BlZWNoUmVjb2duaXRpb25Db21tb24sXHJcbn0gZnJvbSAnLi9zcGVlY2gtcmVjb2duaXRpb24uY29tbW9uJztcclxuXHJcbmNvbnN0IG9uVHlwZSA9ICh0eXBlOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gZmlsdGVyKChlOiBTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2VFdmVudCkgPT4gKGUudHlwZSA9PT0gdHlwZSkpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHJlc3VsdExpc3Q6IFVuYXJ5RnVuY3Rpb248T2JzZXJ2YWJsZTxTcGVlY2hSZWNvZ25pdGlvbkV2ZW50PiwgT2JzZXJ2YWJsZTxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+PiA9IHBpcGUoXHJcbiAgb25UeXBlKCdyZXN1bHQnKSxcclxuICBtYXAoKGU6IFNwZWVjaFJlY29nbml0aW9uRXZlbnQpOiBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3QgPT4gZS5yZXN1bHRzKSxcclxuKTtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFJ4U3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlIGV4dGVuZHMgU3BlZWNoUmVjb2duaXRpb25Db21tb24ge1xyXG5cclxuICBwcml2YXRlIHByb3h5JDogU3ViamVjdDxTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2VFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwcml2YXRlIF9zdGFydGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBnZXQgJCgpOiBPYnNlcnZhYmxlPFNwZWVjaFJlY29nbml0aW9uU2VydmljZUV2ZW50PiB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm94eSQgYXMgT2JzZXJ2YWJsZTxTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2VFdmVudD47XHJcbiAgfVxyXG5cclxuICBnZXQgc3RhcnRlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRlZCQgYXMgT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IEFwcGxpY2F0aW9uUmVmLFxyXG5cclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoU3BlZWNoUmVjb2duaXRpb25HcmFtbWFycylcclxuICAgIGdyYW1tYXJzOiBTcGVlY2hHcmFtbWFyTGlzdFR5cGUsXHJcblxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChTcGVlY2hSZWNvZ25pdGlvbkxhbmcpXHJcbiAgICBsYW5nOiBzdHJpbmcsXHJcblxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChTcGVlY2hSZWNvZ25pdGlvbkNvbnRpbnVvdXMpXHJcbiAgICBjb250aW51b3VzOiBib29sZWFuLFxyXG5cclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoU3BlZWNoUmVjb2duaXRpb25JbnRlcmltUmVzdWx0cylcclxuICAgIGludGVyaW1SZXN1bHRzOiBib29sZWFuLFxyXG5cclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoU3BlZWNoUmVjb2duaXRpb25NYXhBbHRlcm5hdGl2ZXMpXHJcbiAgICBtYXhBbHRlcm5hdGl2ZXM6IG51bWJlcixcclxuXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNwZWVjaFJlY29nbml0aW9uU2VydmljZVVyaSlcclxuICAgIHNlcnZpY2VVUkk6IHN0cmluZyxcclxuICApIHtcclxuICAgIHN1cGVyKGdyYW1tYXJzLCBsYW5nLCBjb250aW51b3VzLCBpbnRlcmltUmVzdWx0cywgbWF4QWx0ZXJuYXRpdmVzLCBzZXJ2aWNlVVJJKTtcclxuICAgIHRoaXMuaW5pdEludGVybmFsKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRJbnRlcm5hbCgpIHtcclxuICAgIC8vIHNldCBoYW5kbGVyc1xyXG4gICAgY29uc3QgaGFuZGxlciA9IChlKSA9PiB7XHJcbiAgICAgIHRoaXMucHJveHkkLm5leHQoZSk7XHJcbiAgICAgIHRoaXMucmVmLnRpY2soKTtcclxuICAgIH07XHJcbiAgICBjb25zdCBlcnJIYW5kbGVyID0gKGUpID0+IHtcclxuICAgICAgdGhpcy5wcm94eSQuZXJyb3IoZSk7XHJcbiAgICAgIHRoaXMucmVmLnRpY2soKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmludGVybmFsLm9uYXVkaW9zdGFydCA9IGhhbmRsZXI7XHJcbiAgICB0aGlzLmludGVybmFsLm9uc291bmRzdGFydCA9IGhhbmRsZXI7XHJcbiAgICB0aGlzLmludGVybmFsLm9uc3BlZWNoc3RhcnQgPSBoYW5kbGVyO1xyXG5cclxuICAgIHRoaXMuaW50ZXJuYWwub25zcGVlY2hlbmQgPSBoYW5kbGVyO1xyXG4gICAgdGhpcy5pbnRlcm5hbC5vbnNvdW5kZW5kID0gaGFuZGxlcjtcclxuICAgIHRoaXMuaW50ZXJuYWwub25hdWRpb2VuZCA9IGhhbmRsZXI7XHJcblxyXG4gICAgdGhpcy5pbnRlcm5hbC5vbnJlc3VsdCA9IGhhbmRsZXI7XHJcbiAgICB0aGlzLmludGVybmFsLm9ubm9tYXRjaCA9IGhhbmRsZXI7XHJcbiAgICB0aGlzLmludGVybmFsLm9uZXJyb3IgPSBlcnJIYW5kbGVyO1xyXG5cclxuICAgIHRoaXMuaW50ZXJuYWwub25zdGFydCA9IGhhbmRsZXI7XHJcbiAgICB0aGlzLmludGVybmFsLm9uZW5kID0gaGFuZGxlcjtcclxuXHJcbiAgICAvLyBzZWUgc2V0dGVyIG1ldGhvZHNcclxuICAgIHRoaXMuZ3JhbW1hcnMgPSB0aGlzLl9ncmFtbWFycztcclxuICAgIHRoaXMubGFuZyA9IHRoaXMuX2xhbmc7XHJcbiAgICB0aGlzLmNvbnRpbnVvdXMgPSB0aGlzLl9jb250aW51b3VzO1xyXG4gICAgdGhpcy5pbnRlcmltUmVzdWx0cyA9IHRoaXMuX2ludGVyaW1SZXN1bHRzO1xyXG4gICAgdGhpcy5tYXhBbHRlcm5hdGl2ZXMgPSB0aGlzLl9tYXhBbHRlcm5hdGl2ZXM7XHJcbiAgICB0aGlzLnNlcnZpY2VVUkkgPSB0aGlzLl9zZXJ2aWNlVVJJO1xyXG5cclxuICAgIHRoaXMucHJveHkkLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGUudHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ3N0YXJ0JzpcclxuICAgICAgICAgIHRoaXMuX3N0YXJ0ZWQkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdlbmQnOlxyXG4gICAgICAgICAgdGhpcy5fc3RhcnRlZCQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgbGlzdGVuKCkgbWV0aG9kIGFpbXMgdG8gcmVjb2duaXplIHRoZSBncmFtbWFyIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBTcGVlY2hSZWNvZ25pdGlvbixcclxuICAvLyBPYnNlcnZhYmxlIGlzIHJldHVybmVkIGZvciBoYW5kbGluZyB2b2ljZSByZWNvZ25pdGlvbiBzZXJ2aWNlIGxpc3RlbmluZyB0byBpbmNvbWluZyB2b2ljZS5cclxuICAvLyBXaGVuIHlvdSBzdWJzY3JpdmUgdGhlIHJldHVybiB2YWx1ZSwgbGlzdGVuaW5nIGJlZ2lucyBhbmQgbGlzdGVuaW5nIGVuZHMgd2hlbiBhbiBlbmQgZXZlbnQgb2NjdXJzLlxyXG4gIC8vIEludGVycnVwdCBsaXN0ZW5pbmcgYnkgdW5zdWJzY3JpYmluZyBpbiB0aGUgbWlkZGxlLlxyXG4gIC8vXHJcbiAgLy8gbGlzdGVuKCkg44Oh44K944OD44OJ44Gv44CB54++5Zyo44GuU3BlZWNoUmVjb2duaXRpb27jgatcclxuICAvLyDplqLpgKPku5jjgZHjgonjgozjgZ/mlofms5XjgpLoqo3orZjjgZnjgovjgZPjgajjgpLnm67nmoTjgajjgZfjgabjgIFcclxuICAvLyDnnYDkv6Hpn7Plo7DjgpLogbTlj5bjgZnjgovpn7Plo7Doqo3orZjjgrXjg7zjg5PjgrnjgpLmibHjgYbjgZ/jgoHjga5PYnNlcnZhYmxl44GM6L+U44GV44KM44G+44GZ44CCXHJcbiAgLy8g6L+U44KK5YCk44KSc3Vic2NyaXZl44GZ44KL44Go6IG05Y+W44GM6ZaL5aeL44GV44KM44CBZW5k44Gu44Kk44OZ44Oz44OI44GM55m655Sf44GZ44KL44Go6IG05Y+W44KS57WC5LqG44GX44G+44GZ44CCXHJcbiAgLy8g6YCU5Lit44GndW5zYnNjcml2ZeOBmeOCi+OBk+OBqOOBp+iBtOWPluOCkuS4reaWreOBl+OBvuOBmeOAglxyXG4gIHB1YmxpYyBsaXN0ZW4oKTogT2JzZXJ2YWJsZTxTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2VFdmVudD4ge1xyXG5cclxuICAgIGNvbnN0IGxpc3RlbmVyID0gbmV3IE9ic2VydmFibGU8U3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlRXZlbnQ+KChvdnNlcnZlcikgPT4ge1xyXG4gICAgICAvLyBjcmVhdGUgc3Vic2NyaW90aW9uXHJcbiAgICAgIGNvbnN0IHN1YnNjcmlvdGlvbiA9IHRoaXMucHJveHkkLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGUpID0+IHtcclxuICAgICAgICAgIG92c2VydmVyLm5leHQoZSk7XHJcblxyXG4gICAgICAgICAgaWYgKGUudHlwZSAmJiBlLnR5cGUgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWwuc3RvcCgpO1xyXG4gICAgICAgICAgICBvdnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICBzdWJzY3Jpb3Rpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZSkgPT4gb3ZzZXJ2ZXIuZXJyb3IoZSksXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gU3BlZWNoIFJlY29nbml0aW9uIHN0YXJ0XHJcbiAgICAgIHRoaXMuaW50ZXJuYWwuc3RhcnQoKTtcclxuXHJcbiAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbC5hYm9ydCgpO1xyXG4gICAgICAgIHN1YnNjcmlvdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGxpc3RlbmVyO1xyXG4gIH1cclxuXHJcbn1cclxuIl19