UNPKG

@ng-web-apis/speech

Version:
39 lines 6.74 kB
import { inject, Injectable, LOCALE_ID, NgZone } from '@angular/core'; import { WA_SPEECH_RECOGNITION } from '@ng-web-apis/common'; import { Observable } from 'rxjs'; import { WA_SPEECH_RECOGNITION_MAX_ALTERNATIVES } from '../tokens/speech-recognition-max-alternatives'; import * as i0 from "@angular/core"; class SpeechRecognitionService extends Observable { classRef = inject(WA_SPEECH_RECOGNITION); lang = inject(LOCALE_ID, { optional: true }); maxAlternatives = inject(WA_SPEECH_RECOGNITION_MAX_ALTERNATIVES); ngZone = inject(NgZone); constructor() { super((subscriber) => { if (!this.classRef) { subscriber.error(new Error('SpeechRecognition is not supported')); return () => { }; } // eslint-disable-next-line new-cap const speechRecognition = new this.classRef(); speechRecognition.maxAlternatives = this.maxAlternatives; speechRecognition.lang = this.lang ?? ''; speechRecognition.interimResults = true; speechRecognition.onerror = (error) => subscriber.error(error); speechRecognition.onend = () => subscriber.complete(); speechRecognition.onresult = ({ results }) => this.ngZone.run(() => subscriber.next(Array.from({ length: results.length }, (_, i) => results[i]))); speechRecognition.start(); return () => speechRecognition.abort(); }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SpeechRecognitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SpeechRecognitionService, providedIn: 'root' }); } export { SpeechRecognitionService }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SpeechRecognitionService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNoLXJlY29nbml0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3NwZWVjaC9zcmMvc2VydmljZXMvc3BlZWNoLXJlY29nbml0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWhDLE9BQU8sRUFBQyxzQ0FBc0MsRUFBQyxNQUFNLCtDQUErQyxDQUFDOztBQUVyRyxNQUdhLHdCQUF5QixTQUFRLFVBQXFDO0lBQzlELFFBQVEsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN6QyxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQzNDLGVBQWUsR0FBRyxNQUFNLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUNqRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXpDO1FBQ0ksS0FBSyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2hCLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxDQUFDO2dCQUVsRSxPQUFPLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQzthQUNuQjtZQUVELG1DQUFtQztZQUNuQyxNQUFNLGlCQUFpQixHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRTlDLGlCQUFpQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3pELGlCQUFpQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QyxpQkFBaUIsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ3hDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RSxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RELGlCQUFpQixDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUMsT0FBTyxFQUFNLEVBQUUsRUFBRSxDQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FDakIsVUFBVSxDQUFDLElBQUksQ0FDWCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM3RCxDQUNKLENBQUM7WUFFTixpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUUxQixPQUFPLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzt3R0FqQ1Esd0JBQXdCOzRHQUF4Qix3QkFBd0IsY0FGckIsTUFBTTs7U0FFVCx3QkFBd0I7NEZBQXhCLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdCwgSW5qZWN0YWJsZSwgTE9DQUxFX0lELCBOZ1pvbmV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtXQV9TUEVFQ0hfUkVDT0dOSVRJT059IGZyb20gJ0BuZy13ZWItYXBpcy9jb21tb24nO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtXQV9TUEVFQ0hfUkVDT0dOSVRJT05fTUFYX0FMVEVSTkFUSVZFU30gZnJvbSAnLi4vdG9rZW5zL3NwZWVjaC1yZWNvZ25pdGlvbi1tYXgtYWx0ZXJuYXRpdmVzJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlIGV4dGVuZHMgT2JzZXJ2YWJsZTxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdFtdPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjbGFzc1JlZiA9IGluamVjdChXQV9TUEVFQ0hfUkVDT0dOSVRJT04pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbGFuZyA9IGluamVjdChMT0NBTEVfSUQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF4QWx0ZXJuYXRpdmVzID0gaW5qZWN0KFdBX1NQRUVDSF9SRUNPR05JVElPTl9NQVhfQUxURVJOQVRJVkVTKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2xhc3NSZWYpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKG5ldyBFcnJvcignU3BlZWNoUmVjb2duaXRpb24gaXMgbm90IHN1cHBvcnRlZCcpKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgICAgICAgIGNvbnN0IHNwZWVjaFJlY29nbml0aW9uID0gbmV3IHRoaXMuY2xhc3NSZWYoKTtcblxuICAgICAgICAgICAgc3BlZWNoUmVjb2duaXRpb24ubWF4QWx0ZXJuYXRpdmVzID0gdGhpcy5tYXhBbHRlcm5hdGl2ZXM7XG4gICAgICAgICAgICBzcGVlY2hSZWNvZ25pdGlvbi5sYW5nID0gdGhpcy5sYW5nID8/ICcnO1xuICAgICAgICAgICAgc3BlZWNoUmVjb2duaXRpb24uaW50ZXJpbVJlc3VsdHMgPSB0cnVlO1xuICAgICAgICAgICAgc3BlZWNoUmVjb2duaXRpb24ub25lcnJvciA9IChlcnJvcjogdW5rbm93bikgPT4gc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICBzcGVlY2hSZWNvZ25pdGlvbi5vbmVuZCA9ICgpID0+IHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHNwZWVjaFJlY29nbml0aW9uLm9ucmVzdWx0ID0gKHtyZXN1bHRzfTogYW55KSA9PlxuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHtsZW5ndGg6IHJlc3VsdHMubGVuZ3RofSwgKF8sIGkpID0+IHJlc3VsdHNbaV0pLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHNwZWVjaFJlY29nbml0aW9uLnN0YXJ0KCk7XG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBzcGVlY2hSZWNvZ25pdGlvbi5hYm9ydCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=