speechrecorderng 2.21.2 → 2.21.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/speechrecorderng.umd.js +142 -144
- package/bundles/speechrecorderng.umd.js.map +1 -1
- package/esm2015/lib/audio/audio_display.js +3 -3
- package/esm2015/lib/audio/audio_player.js +3 -3
- package/esm2015/lib/audio/ui/audio_canvas_layer_comp.js +6 -6
- package/esm2015/lib/audio/ui/audio_display_control.js +3 -3
- package/esm2015/lib/audio/ui/audio_display_scroll_pane.js +3 -3
- package/esm2015/lib/audio/ui/audiosignal.js +3 -3
- package/esm2015/lib/audio/ui/container.js +3 -3
- package/esm2015/lib/audio/ui/livelevel.js +3 -3
- package/esm2015/lib/audio/ui/scroll_pane_horizontal.js +3 -3
- package/esm2015/lib/audio/ui/sonagram.js +3 -3
- package/esm2015/lib/speechrecorder/project/project.service.js +3 -3
- package/esm2015/lib/speechrecorder/recordings/recordings.service.js +3 -3
- package/esm2015/lib/speechrecorder/script/script.service.js +3 -3
- package/esm2015/lib/speechrecorder/session/controlpanel.js +18 -18
- package/esm2015/lib/speechrecorder/session/progress.js +3 -3
- package/esm2015/lib/speechrecorder/session/prompting.js +15 -15
- package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-meta.component.js +3 -3
- package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-navi.component.js +3 -3
- package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.js +3 -3
- package/esm2015/lib/speechrecorder/session/recordingfile/recording-file-view.component.js +3 -3
- package/esm2015/lib/speechrecorder/session/recordingfile/recordingfile-service.js +3 -3
- package/esm2015/lib/speechrecorder/session/session.service.js +3 -3
- package/esm2015/lib/speechrecorder/session/session_finished_dialog.js +3 -3
- package/esm2015/lib/speechrecorder/session/sessionmanager.js +3 -3
- package/esm2015/lib/speechrecorder/session/warning_bar.js +3 -3
- package/esm2015/lib/speechrecorder/spruploader.js +3 -3
- package/esm2015/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.js +3 -3
- package/esm2015/lib/speechrecorderng.component.js +3 -3
- package/esm2015/lib/speechrecorderng.module.js +4 -4
- package/esm2015/lib/spr.config.js +3 -3
- package/esm2015/lib/spr.module.version.js +2 -2
- package/esm2015/lib/ui/canvas_layer_comp.js +3 -3
- package/esm2015/lib/ui/message_dialog.js +3 -3
- package/esm2015/lib/ui/recordingitem_display.js +6 -6
- package/esm2015/lib/utils/scrollIntoViewToBottom.js +3 -3
- package/fesm2015/speechrecorderng.js +137 -137
- package/fesm2015/speechrecorderng.js.map +1 -1
- package/lib/spr.module.version.d.ts +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speechrecorderng.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/speechrecorderng/src/lib/action/action.ts","../../../projects/speechrecorderng/src/lib/audio/playback/player.ts","../../../projects/speechrecorderng/src/lib/utils/ua-parser.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/project/project.ts","../../../projects/speechrecorderng/src/lib/audio/capture/capture.ts","../../../projects/speechrecorderng/src/lib/audio/impl/wavformat.ts","../../../projects/speechrecorderng/src/lib/io/BinaryWriter.ts","../../../projects/speechrecorderng/src/lib/utils/utils.ts","../../../projects/speechrecorderng/src/lib/audio/impl/wavwriter.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/script/script.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/recording.ts","../../../projects/speechrecorderng/src/lib/net/uploader.ts","../../../projects/speechrecorderng/src/lib/spr.config.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/project/project.service.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/session.service.ts","../../../projects/speechrecorderng/src/lib/audio/ui/livelevel.ts","../../../projects/speechrecorderng/src/lib/ui/recordingitem_display.ts","../../../projects/speechrecorderng/src/lib/dsp/utils.ts","../../../projects/speechrecorderng/src/lib/audio/dsp/level_measure.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.ts","../../../projects/speechrecorderng/src/lib/math/2d/geometry.ts","../../../projects/speechrecorderng/src/lib/ui/canvas_layer_comp.ts","../../../projects/speechrecorderng/src/lib/audio/persistor.ts","../../../projects/speechrecorderng/src/lib/audio/ui/common.ts","../../../projects/speechrecorderng/src/lib/audio/ui/audio_canvas_layer_comp.ts","../../../projects/speechrecorderng/src/lib/audio/ui/audiosignal.ts","../../../projects/speechrecorderng/src/lib/math/complex.ts","../../../projects/speechrecorderng/src/lib/math/dft.ts","../../../projects/speechrecorderng/src/lib/math/utils.ts","../../../projects/speechrecorderng/src/lib/utils/css_utils.ts","../../../projects/speechrecorderng/src/lib/audio/ui/sonagram.ts","../../../projects/speechrecorderng/src/lib/audio/ui/container.ts","../../../projects/speechrecorderng/src/lib/audio/ui/audio_display_scroll_pane.ts","../../../projects/speechrecorderng/src/lib/audio/ui/audio_display_control.ts","../../../projects/speechrecorderng/src/lib/audio/audio_display.ts","../../../projects/speechrecorderng/src/lib/utils/scrollIntoViewToBottom.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/progress.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/prompting.ts","../../../projects/speechrecorderng/src/lib/io/stream.ts","../../../projects/speechrecorderng/src/lib/audio/io/stream.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/controlpanel.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/session_finished_dialog.ts","../../../projects/speechrecorderng/src/lib/ui/message_dialog.ts","../../../projects/speechrecorderng/src/lib/audio/context.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/item.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/recordings/recordings.service.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/spruploader.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/warning_bar.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/sessionmanager.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/script/script.service.ts","../../../projects/speechrecorderng/src/lib/speechrecorderng.component.ts","../../../projects/speechrecorderng/src/lib/audio/ui/scroll_pane_horizontal.ts","../../../projects/speechrecorderng/src/lib/audio/audio_player.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recordingfile/recording-file.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recordingfile/recordingfile-service.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recordingfile/recording-file-meta.component.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recordingfile/recording-file-navi.component.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recordingfile/recording-file-view.component.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.ts","../../../projects/speechrecorderng/src/lib/speechrecorderng.module.ts","../../../projects/speechrecorderng/src/lib/spr.module.version.ts","../../../projects/speechrecorderng/src/public-api.ts","../../../projects/speechrecorderng/src/speechrecorderng.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","\r\n export class ActionEvent<T> {\r\n get value(): T|null {\r\n return this._value;\r\n }\r\n constructor(private _value:T|null=null) {\r\n\r\n }\r\n }\r\n\r\n export interface ActionEventListener<T>{\r\n (ae:ActionEvent<T>):void;\r\n }\r\n\r\n export class Action<T> {\r\n get value(): T|null {\r\n return this._value;\r\n }\r\n\r\n private _name:string;\r\n private _value:T|null;\r\n _disabled=true;\r\n private _onAction:ActionEventListener<T>|null=null;\r\n listeners:Array<ActionEventListener<T>>;\r\n private controls:HTMLInputElement[];\r\n\r\n constructor(name:string,value:T|null=null) {\r\n this._name = name;\r\n this._value=value\r\n this.listeners = new Array<ActionEventListener<T>>();\r\n this.controls = [];\r\n }\r\n\r\n get name():string {\r\n return this._name;\r\n }\r\n\r\n\r\n get onAction():ActionEventListener<T>|null {\r\n return this._onAction;\r\n }\r\n\r\n set onAction(value:ActionEventListener<T>|null) {\r\n this._onAction = value;\r\n }\r\n\r\n protected createActionEvent(value: T|null=null):ActionEvent<T> {\r\n // default:\r\n return new ActionEvent(value);\r\n }\r\n\r\n perform(value: T|null=null):void {\r\n this._value=value\r\n if (!this.disabled && this._onAction) {\r\n let ae=this.createActionEvent(value)\r\n this._onAction(ae);\r\n }\r\n }\r\n\r\n set disabled(disabled:boolean) {\r\n this._disabled = disabled;\r\n for (let c of this.controls) {\r\n c.disabled = this._disabled;\r\n }\r\n //let disStr=this.disabled?\"disabled\":\"enabled\";\r\n //console.log(this._name+\": \"+disStr);\r\n }\r\n\r\n get disabled():boolean {\r\n return this._disabled;\r\n }\r\n\r\n addControl(ctrl: HTMLInputElement, actionEventName?: string) {\r\n if (ctrl) {\r\n if (this.controls.indexOf(ctrl) < 0) {\r\n ctrl.disabled = this.disabled;\r\n this.controls.push(ctrl);\r\n if (actionEventName) {\r\n ctrl.addEventListener(actionEventName, (e) => {\r\n this.perform();\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n removeControl(ctrl:HTMLInputElement) {\r\n var i = this.controls.indexOf(ctrl);\r\n if (i >= 0) {\r\n this.controls = this.controls.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n","import { Action } from '../../action/action'\r\nimport { AudioClip } from '../persistor'\r\n\r\n export enum EventType {CLOSED,READY,STARTED,POS_UPDATE, STOPPED, ENDED}\r\n\r\n export class AudioPlayerEvent{\r\n\r\n private _type:EventType;\r\n private _timePosition:number | undefined;\r\n\r\n constructor(type:EventType, timePosition?:number) {\r\n this._type = type;\r\n this._timePosition = timePosition;\r\n }\r\n\r\n get type() {\r\n return this._type;\r\n }\r\n\r\n get timePosition() {\r\n return this._timePosition;\r\n }\r\n }\r\n export interface AudioPlayerListener {\r\n audioPlayerUpdate(e:AudioPlayerEvent):void;\r\n }\r\n\r\n export class AudioPlayer {\r\n get autoPlayOnSelectToggleAction(): Action<boolean> {\r\n return this._autoPlayOnSelectToggleAction;\r\n }\r\n public static DEFAULT_BUFSIZE:number = 8192;\r\n private running=false;\r\n private _startAction:Action<void>;\r\n private _startSelectionAction:Action<void>;\r\n private _autoPlayOnSelectToggleAction:Action<boolean>\r\n private _stopAction:Action<void>;\r\n bufSize:number;\r\n context:AudioContext;\r\n listener:AudioPlayerListener;\r\n _audioClip:AudioClip|null=null;\r\n _audioBuffer:AudioBuffer | null=null;\r\n sourceBufferNode:AudioBufferSourceNode|null=null;\r\n buffPos:number;\r\n private zeroBufCnt:number;\r\n n:any;\r\n zb:Float32Array;\r\n private playStartTime:number|null=null;\r\n\r\n private timerVar:number|null=null;\r\n\r\n constructor(context:AudioContext, listener:AudioPlayerListener) {\r\n this.context=context;\r\n this.listener=listener;\r\n this.bufSize = AudioPlayer.DEFAULT_BUFSIZE;\r\n this.n=navigator;\r\n this.buffPos=0;\r\n this.zeroBufCnt=0;\r\n this.zb = new Float32Array(this.bufSize);\r\n this._startAction = new Action('Start');\r\n this._startAction.disabled = true;\r\n this._startAction.onAction = ()=>this.start();\r\n this._startSelectionAction=new Action('Start selected')\r\n this._startSelectionAction.disabled=true\r\n this._startSelectionAction.onAction = ()=>this.startSelected();\r\n this._autoPlayOnSelectToggleAction=new Action<boolean>(\"Autoplay on select\",false);\r\n this._stopAction = new Action('Stop');\r\n this._stopAction.disabled = true;\r\n this._stopAction.onAction = ()=>this.stop();\r\n }\r\n\r\n get startAction() {\r\n return this._startAction;\r\n }\r\n\r\n get startSelectionAction(){\r\n return this._startSelectionAction\r\n }\r\n\r\n get stopAction() {\r\n return this._stopAction;\r\n }\r\n\r\n set audioClip(audioClip:AudioClip| null) {\r\n\r\n var length = 0;\r\n var chs = 0;\r\n if (audioClip && audioClip.buffer) {\r\n chs = audioClip.buffer.numberOfChannels;\r\n if (chs > 0) {\r\n length = audioClip.buffer.length;\r\n if (chs > this.context.destination.maxChannelCount) {\r\n // TODO exception\r\n }\r\n }\r\n this.audioBuffer = audioClip.buffer;\r\n audioClip.addSelectionObserver((ac)=> {\r\n this._startSelectionAction.disabled = this.startSelectionDisabled()\r\n if (!this.startSelectionAction.disabled && this._autoPlayOnSelectToggleAction.value) {\r\n this.startSelected()\r\n }\r\n }\r\n )\r\n }else{\r\n this.audioBuffer=null;\r\n }\r\n this._audioClip=audioClip\r\n\r\n }\r\n\r\n set audioBuffer(audioBuffer:AudioBuffer | null) {\r\n this.stop();\r\n this._audioBuffer = audioBuffer;\r\n if (audioBuffer && this.context) {\r\n this._startAction.disabled = false;\r\n this._startSelectionAction.disabled=this.startSelectionDisabled()\r\n if(this.listener){\r\n this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.READY));\r\n }\r\n }else{\r\n this._startAction.disabled = true;\r\n this._startSelectionAction.disabled=true\r\n if(this.listener){\r\n this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.CLOSED));\r\n }\r\n }\r\n }\r\n get audioBuffer():AudioBuffer| null{\r\n return this._audioBuffer;\r\n }\r\n\r\n start() {\r\n if(!this._startAction.disabled && !this.running) {\r\n this.context.resume();\r\n this.sourceBufferNode = this.context.createBufferSource();\r\n this.sourceBufferNode.buffer = this._audioBuffer;\r\n this.sourceBufferNode.connect(this.context.destination);\r\n this.sourceBufferNode.onended = () => this.onended();\r\n\r\n this.playStartTime = this.context.currentTime;\r\n this.running=true;\r\n this.sourceBufferNode.start();\r\n\r\n this.playStartTime = this.context.currentTime;\r\n this._startAction.disabled = true;\r\n this._startSelectionAction.disabled=true\r\n this._stopAction.disabled = false;\r\n //this.timerVar = window.setInterval((e)=>this.updatePlayPosition(), 200);\r\n if (this.listener) {\r\n this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.STARTED));\r\n }\r\n }\r\n }\r\n\r\n startSelectionDisabled(){\r\n return !(this._audioClip && this.context && !this.startAction.disabled && this._audioClip.selection )\r\n }\r\n\r\n startSelected() {\r\n if(!this._startAction.disabled && !this.running) {\r\n this.context.resume();\r\n this.sourceBufferNode = this.context.createBufferSource();\r\n\r\n this.sourceBufferNode.buffer = this._audioBuffer;\r\n this.sourceBufferNode.connect(this.context.destination);\r\n this.sourceBufferNode.onended = () => this.onended();\r\n\r\n this.playStartTime = this.context.currentTime;\r\n this.running=true;\r\n // unfortunately Web Audio API uses time values not frames\r\n let ac=this._audioClip\r\n let offset=0\r\n if(ac && ac.selection){\r\n let s=ac.selection\r\n let sr=ac.buffer.sampleRate\r\n offset=s.leftFrame/sr\r\n let stopPosInsecs=s.rightFrame/sr\r\n let dur=stopPosInsecs-offset\r\n // TODO check valid values\r\n this.sourceBufferNode.start(0,offset,dur)\r\n }else {\r\n this.sourceBufferNode.start();\r\n }\r\n this.playStartTime = this.context.currentTime-offset;\r\n this._startAction.disabled = true;\r\n this._startSelectionAction.disabled=true\r\n this._stopAction.disabled = false;\r\n //this.timerVar = window.setInterval((e)=>this.updatePlayPosition(), 200);\r\n if (this.listener) {\r\n this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.STARTED));\r\n }\r\n }\r\n }\r\n\r\n stop(){\r\n if(this.running) {\r\n if (this.sourceBufferNode) {\r\n this.sourceBufferNode.stop();\r\n }\r\n if(this.timerVar!==null) {\r\n window.clearInterval(this.timerVar);\r\n }\r\n this.running=false;\r\n if (this.listener) {\r\n this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.STOPPED));\r\n }\r\n }\r\n\r\n }\r\n\r\n onended() {\r\n if(this.timerVar!=null) {\r\n window.clearInterval(this.timerVar);\r\n }\r\n this._startAction.disabled = !(this.audioBuffer);\r\n this._startSelectionAction.disabled=this.startSelectionDisabled()\r\n this._stopAction.disabled = true;\r\n this.running=false;\r\n if (this.listener) {\r\n this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.ENDED));\r\n }\r\n }\r\n\r\n get playPositionTime():number|null {\r\n let ppt=null;\r\n if(this.playStartTime!==null) {\r\n ppt= this.context.currentTime - this.playStartTime;\r\n }\r\n return ppt;\r\n }\r\n\r\n get playPositionFrames():number|null {\r\n let ppFrs:number|null=null;\r\n if(this._audioBuffer ) {\r\n let ppTime = this.playPositionTime;\r\n if(ppTime!==null) {\r\n ppFrs = this._audioBuffer.sampleRate * ppTime;\r\n }\r\n }\r\n return ppFrs;\r\n }\r\n\r\n }\r\n\r\n","export class UserAgentComponent{\r\n constructor(public name:string,public version:string|null,public comment?:string) {\r\n\r\n }\r\n\r\n toString():string{\r\n let s='['+this.name+']';\r\n if(this.version){\r\n s=s+' ['+this.version+']';\r\n }\r\n if(this.comment){\r\n s=s+' ['+this.comment+']';\r\n }\r\n return s;\r\n }\r\n}\r\nexport const NAME_FIREFOX='Firefox';\r\nexport const NAME_CHROME='Chrome';\r\nexport const NAME_SAFARI='Safari';\r\nexport const NAME_EDGE='Edge';\r\n\r\n\r\n\r\nexport enum Browser {Firefox='Firefox',Chrome='Chrome',Safari='Safari',Edge='Edge'}\r\n\r\nexport const OS_WINDOWS='Windows';\r\nexport const OS_ANDROID='Android';\r\n\r\nexport enum Platform {Windows='Windows',Android='Android',macOS='MAC OS X'}\r\n\r\nexport class UserAgent{\r\n\r\n constructor(private _detectedPlatform:Platform|null,private _detectedBrowser:Browser|null) {\r\n }\r\n\r\n get detectedBrowser(): Browser | null {\r\n return this._detectedBrowser;\r\n }\r\n\r\n get detectedPlatform(): Platform | null {\r\n return this._detectedPlatform;\r\n }\r\n\r\n}\r\n\r\nexport class UserAgentBuilder {\r\n static instance:UserAgentBuilder|undefined=undefined;\r\n private comps:Array<UserAgentComponent>=new Array<UserAgentComponent>();\r\n private userAgent!:UserAgent;\r\n\r\n private build() {\r\n\r\n // // @ts-ignore\r\n // if(navigator.userAgentData){\r\n // // maybe we can use this in the future\r\n // console.info(\"Browser provides userAgentData:\");\r\n //\r\n // console.info(\"Brands:\");\r\n // // @ts-ignore\r\n // navigator.userAgentData.brands.forEach((br=>{\r\n // console.info(br.brand +\" \"+br.version);\r\n // }))\r\n // // @ts-ignore\r\n // console.info(\"Platform: \"+navigator.userAgentData.platform);\r\n // // @ts-ignore\r\n // console.info(\"Mobile:\"+navigator.userAgentData.mobile);\r\n // // @ts-ignore\r\n // //console.info(navigator.userAgentData.toJSON());\r\n // }else {\r\n // console.info(\"Browser does not provide userAgentData.\");\r\n // }\r\n\r\n let ua=navigator.userAgent;\r\n\r\n this.comps = new Array<UserAgentComponent>();\r\n\r\n let pp = 0;\r\n while (pp < ua.length) {\r\n //parse name/version\r\n let name: string | null = null\r\n let version: string | null = null;\r\n let comment: string | undefined;\r\n\r\n let blPos = ua.indexOf(' ', pp);\r\n let prt: string;\r\n if (blPos == -1) {\r\n prt = ua.substr(pp);\r\n pp += prt.length;\r\n } else {\r\n prt = ua.substr(pp, blPos - pp);\r\n pp = blPos + 1;\r\n }\r\n let sepPos = prt.indexOf('/');\r\n if (sepPos > 0) {\r\n name = prt.substr(0, sepPos);\r\n version = prt.substr(sepPos + 1);\r\n } else {\r\n name = prt;\r\n }\r\n while (ua[pp] === ' ' && pp < ua.length) {\r\n pp++;\r\n }\r\n if (ua[pp] === '(') {\r\n pp++;\r\n let commEnd = ua.indexOf(')', pp);\r\n comment = ua.substr(pp, commEnd - pp);\r\n pp = commEnd + 1;\r\n }\r\n while (ua[pp] === ' ' && pp < ua.length) {\r\n pp++;\r\n }\r\n this.comps.push(new UserAgentComponent(name, version, comment));\r\n }\r\n\r\n let detPlatf:Platform|null=null;\r\n if(this.runsOnOS(Platform.Android)){\r\n detPlatf=Platform.Android;\r\n }else if(this.runsOnOS(Platform.Windows)){\r\n detPlatf=Platform.Windows;\r\n }else if(this.runsOnOS(Platform.macOS)){\r\n detPlatf=Platform.macOS;\r\n }\r\n\r\n\r\n let detBr:Browser|null=null;\r\n if(this.matchesBrowser(Browser.Firefox)){\r\n detBr=Browser.Firefox;\r\n }else if(this.matchesBrowser(Browser.Chrome)){\r\n detBr=Browser.Chrome;\r\n }else if(this.matchesBrowser(Browser.Safari)){\r\n detBr=Browser.Safari;\r\n }\r\n\r\n this.userAgent=new UserAgent(detPlatf,detBr);\r\n\r\n }\r\n\r\n private matchesBrowser(browserName:string){\r\n for(let ci=0;ci<this.comps.length;ci++){\r\n let bn=this.comps[ci].name\r\n let bnRe=new RegExp(browserName,'i');\r\n if(bn.match(bnRe)){\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private runsOnOS(os:string):boolean{\r\n for(let ci=0;ci<this.comps.length;ci++){\r\n let cc=this.comps[ci].comment\r\n if(cc){\r\n var osRe = new RegExp(os,'i');\r\n if(cc.match(osRe)){\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static userAgent():UserAgent{\r\n if(!this.instance){\r\n this.instance=new UserAgentBuilder();\r\n }\r\n this.instance.build();\r\n return this.instance.userAgent;\r\n\r\n }\r\n\r\n}\r\n","\r\nexport interface AudioFormat {\r\n channels: number;\r\n}\r\n\r\nexport interface MediaCaptureFormat {\r\n audioChannelCount: number;\r\n}\r\n\r\nexport interface AudioDevice {\r\n name : string,\r\n playback : boolean,\r\n regex : boolean\r\n}\r\n\r\n\r\nexport enum ConstraintType {Exact='EXACT',Ideal='IDEAL'};\r\n\r\nexport enum Platform {Linux='LINUX',macOS='MACOS',Windows='WINDOWS',Android='ANDROID'}\r\nexport enum BrowserBase {Chromium='CHROMIUM'};\r\nexport enum Browser {Firefox='FIREFOX',Chromium='CHROMIUM',Chrome='CHROME',Edge='EDGE',Opera='OPERA'}\r\n\r\nexport interface AutoGainControlConfig {\r\n value: boolean,\r\n //constraintType : ConstraintType,\r\n platform: Platform,\r\n //browserBase:BrowserBase,\r\n //browser:Browser\r\n}\r\n\r\nexport interface Project {\r\n name: string,\r\n audioFormat?: AudioFormat,\r\n mediaCaptureFormat?: MediaCaptureFormat,\r\n autoGainControlConfigs?:Array<AutoGainControlConfig>,\r\n audioDevices?: Array<AudioDevice>\r\n}\r\n\r\n\r\nexport class ProjectUtil {\r\n\r\n public static readonly DEFAULT_AUDIO_CHANNEL_COUNT=2;\r\n\r\n static audioChannelCount(project:Project): number{\r\n let chs=ProjectUtil.DEFAULT_AUDIO_CHANNEL_COUNT;\r\n if(project.mediaCaptureFormat){\r\n chs=project.mediaCaptureFormat.audioChannelCount;\r\n }else if(project.audioFormat){\r\n chs=project.audioFormat.channels;\r\n }\r\n return chs;\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n","import {SequenceAudioFloat32OutStream} from \"../io/stream\";\r\nimport {Browser, Platform, UserAgentBuilder} from \"../../utils/ua-parser\";\r\n\r\nimport {AutoGainControlConfig, Platform as CfgPlatform} from \"../../speechrecorder/project/project\";\r\n\r\n\r\nexport const CHROME_ACTIVATE_ECHO_CANCELLATION_WITH_AGC=false;\r\n\r\nconst DEBUG_TRACE_LEVEL=0;\r\n\r\nconst ENABLE_AUDIO_WORKLET=true;\r\n\r\n// Super dirty way to load this module\r\n// Copy content of interceptor_worklet.js to this string\r\nconst awpStr=\"class AudioCaptureInterceptorProcessor extends AudioWorkletProcessor{\\n\" +\r\n \"\\n\" +\r\n \" BUFFER_QUANTUMS=64;\\n\" +\r\n \" QUANTUM_FRAME_LEN=128;\\n\" +\r\n \" BUFFER_FRAME_LEN=this.QUANTUM_FRAME_LEN*this.BUFFER_QUANTUMS;\\n\" +\r\n \" buffer=null;\\n\" +\r\n \" bufferPos=0;\\n\" +\r\n \" bufferPosBytes=0;\\n\" +\r\n \" constructor() {\\n\" +\r\n \" super();\\n\" +\r\n \"\\n\" +\r\n \" }\\n\" +\r\n \"\\n\" +\r\n \" process(\\n\" +\r\n \" inputs,\\n\" +\r\n \" outputs,\\n\" +\r\n \" parameters\\n\" +\r\n \" ){\\n\" +\r\n \"\\n\" +\r\n \" let inputsCnt=inputs.length;\\n\" +\r\n \" let channelCount=0;\\n\" +\r\n \" let inputLen=0;\\n\" +\r\n \" let inputLenBytes=0;\\n\" +\r\n \" if(inputsCnt>0) {\\n\" +\r\n \" let input0 = inputs[0];\\n\" +\r\n \" channelCount = input0.length;\\n\" +\r\n \" if (channelCount > 0) {\\n\" +\r\n \" let input0ch0=input0[0];\\n\" +\r\n \" inputLen=input0ch0.length;\\n\" +\r\n \" inputLenBytes=input0ch0.buffer.length;\\n\" +\r\n \" }\\n\" +\r\n \" }\\n\" +\r\n \" if (!this.buffer || this.buffer.length < channelCount) {\\n\" +\r\n \" this.buffer = new Array(channelCount);\\n\" +\r\n \" this.bufferPos = 0\\n\" +\r\n \" for (let bch = 0; bch < channelCount; bch++) {\\n\" +\r\n \" this.buffer[bch] = new Float32Array(this.BUFFER_FRAME_LEN);\\n\" +\r\n \" this.bufferPos = 0;\\n\" +\r\n \" this.bufferPosBytes=0;\\n\" +\r\n \" }\\n\" +\r\n \" }\\n\" +\r\n \" let bufAvail = this.BUFFER_FRAME_LEN - this.bufferPos;\\n\" +\r\n \" // check if buffer has to be transferred\\n\" +\r\n \" if (inputLen > bufAvail) {\\n\" +\r\n \" let ada=new Array(channelCount);\\n\" +\r\n \" for (let ch = 0; ch < channelCount; ch++) {\\n\" +\r\n \" ada[ch]=this.buffer[ch].buffer.slice(0);\\n\" +\r\n \" }\\n\" +\r\n \" this.port.postMessage({\\n\" +\r\n \" data: ada,\\n\" +\r\n \" chs: channelCount,\\n\" +\r\n \" len: this.bufferPos\\n\" +\r\n \" }, ada);\\n\" +\r\n \" // buffer transferred, reset\\n\" +\r\n \" this.bufferPos = 0;\\n\" +\r\n \" this.bufferPosBytes=0;\\n\" +\r\n \" }\\n\" +\r\n \"\\n\" +\r\n \" for(let ii=0;ii<inputsCnt;ii++) {\\n\" +\r\n \" for (let ch = 0; ch < channelCount; ch++) {\\n\" +\r\n \" // Mute outputs\\n\" +\r\n \" //outputs[ii][ch].fill(0);\\n\" +\r\n \" let chSamples = inputs[ii][ch];\\n\" +\r\n \" this.buffer[ch].set(chSamples,this.bufferPos);\\n\" +\r\n \" }\\n\" +\r\n \" this.bufferPos+=inputLen;\\n\" +\r\n \" this.bufferPosBytes+=inputLenBytes;\\n\" +\r\n \" }\\n\" +\r\n \" \\n\" +\r\n \" return true;\\n\" +\r\n \" }\\n\" +\r\n \"}\\n\" +\r\n \"\\n\" +\r\n \"registerProcessor('capture-interceptor',AudioCaptureInterceptorProcessor);\\n\";\r\n\r\n\r\n\r\n\r\nexport interface AudioCaptureListener {\r\n opened(): void;\r\n\r\n started(): void;\r\n\r\n stopped(): void;\r\n\r\n closed(): void;\r\n\r\n error(msg?:string,advice?:string): void;\r\n}\r\n\r\nexport class AudioCapture {\r\n get opened(): boolean {\r\n return this._opened;\r\n }\r\n\r\n static BUFFER_SIZE: number = 8192;\r\n context: AudioContext;\r\n stream!: MediaStream;\r\n channelCount!: number;\r\n mediaStream: any;\r\n agcStatus:boolean|null=null;\r\n bufferingNode: AudioNode|null=null;\r\n listener!: AudioCaptureListener;\r\n data!: Array<Array<Float32Array>>;\r\n currentSampleRate!: number;\r\n n: Navigator;\r\n audioOutStream: SequenceAudioFloat32OutStream | null=null;\r\n private disconnectStreams = true;\r\n private _opened=false;\r\n private capturing = false;\r\n\r\n framesRecorded: number=0;\r\n\r\n constructor(context: AudioContext) {\r\n this.context = context;\r\n this.n = navigator;\r\n }\r\n\r\n private initData() {\r\n this.data = new Array<Array<Float32Array>>();\r\n for (let i = 0; i < this.channelCount; i++) {\r\n this.data.push(new Array<Float32Array>());\r\n }\r\n this.framesRecorded = 0;\r\n }\r\n\r\n listDevices() {\r\n navigator.mediaDevices.enumerateDevices().then((l: MediaDeviceInfo[]) => this.printDevices(l));\r\n }\r\n\r\n private dummySession():Promise<MediaStream>{\r\n // workaround to request permissions:\r\n // Start a dummy session\r\n let mediaStrCnstrs = <MediaStreamConstraints>{audio:\r\n {echoCancelation: false}\r\n };\r\n return navigator.mediaDevices.getUserMedia(mediaStrCnstrs);\r\n\r\n }\r\n\r\n\r\n private stopAllSessionTracks(mediaStream:MediaStream){\r\n let ats = mediaStream.getTracks();\r\n for (let atIdx = 0; atIdx < ats.length; atIdx++) {\r\n //console.debug(\"Stop dummy session track: #\" + atIdx)\r\n ats[atIdx].stop();\r\n }\r\n }\r\n\r\n deviceInfos(cb: (deviceInfos: MediaDeviceInfo[] | null) => any, retry = true,dummyStream?:MediaStream) {\r\n\r\n navigator.mediaDevices.enumerateDevices().then((l: MediaDeviceInfo[]) => {\r\n let labelsAvailable = false;\r\n for (let i = 0; i < l.length; i++) {\r\n let di = l[i];\r\n if (di.label) {\r\n labelsAvailable = true;\r\n }\r\n }\r\n if (!labelsAvailable) {\r\n //console.debug(\"Media device enumeration: No labels.\")\r\n if (retry) {\r\n console.info(\"Starting dummy session to request audio permissions...\")\r\n\r\n this.dummySession().then((s: MediaStream) => {\r\n // and stop it immediately\r\n\r\n if(s) {\r\n //console.debug(\"Got dummy session stream: \" + s + \" .\")\r\n }else{\r\n //console.debug(\"No dummy stream\")\r\n }\r\n // retry (only once)\r\n this.deviceInfos(cb, false,s);\r\n },reason => {\r\n //console.debug(\"Dummy session rejected.\")\r\n // TODO error callback\r\n cb(null);\r\n });\r\n } else {\r\n cb(null);\r\n }\r\n } else {\r\n // success\r\n cb(l);\r\n }\r\n if(dummyStream){\r\n this.stopAllSessionTracks(dummyStream);\r\n }\r\n },(reason)=> {\r\n //rejected\r\n //console.debug(\"Media device enumeration rejected.\")\r\n if (retry) {\r\n //console.debug(\"Starting dummy session to request audio permissions...\")\r\n this.dummySession().then((s: MediaStream) => {\r\n // and stop it immediately\r\n //console.debug(\"Dummy session.\")\r\n if(s) {\r\n //console.debug(\"Got dummy session stream: \" + s + \" .\")\r\n }else{\r\n //console.debug(\"No dummy stream\")\r\n }\r\n // retry (only once)\r\n this.deviceInfos(cb, false,s);\r\n }, reason => {\r\n //console.debug(\"Dummy session rejected.\")\r\n // TODO error callback\r\n cb(null);\r\n });\r\n } else {\r\n cb(null);\r\n }\r\n if(dummyStream){\r\n this.stopAllSessionTracks(dummyStream);\r\n }\r\n });\r\n\r\n\r\n\r\n }\r\n\r\n\r\n printDevices(l: MediaDeviceInfo[]): void {\r\n let selDeviceId = '___dummy___';\r\n for (let i = 0; i < l.length; i++) {\r\n let di = l[i];\r\n\r\n console.log(\"Audio device: Id: \" + di.deviceId + \" groupId: \" + di.groupId + \" label: \" + di.label + \" kind: \" + di.kind);\r\n }\r\n }\r\n\r\n open(channelCount: number, selDeviceId?: ConstrainDOMString|undefined,autoGainControlConfigs?:Array<AutoGainControlConfig>|null|undefined){\r\n this.context.resume().then(()=>{\r\n this._open(channelCount,selDeviceId,autoGainControlConfigs);\r\n })\r\n }\r\n\r\n _open(channelCount: number, selDeviceId?: ConstrainDOMString|undefined,autoGainControlConfigs?:Array<AutoGainControlConfig>|null|undefined) {\r\n this.channelCount = channelCount;\r\n this.framesRecorded = 0;\r\n //var msc = new AudioStreamConstr();\r\n // var msc={};\r\n //msc.video = false;\r\n //msc.audio = true;\r\n\r\n // Chrome and Firefox stereo channels are identical !!\r\n // And even worse: The data coming from the source is already preprocessed on FF and Chrome. It contains DSP artifacts!!\r\n\r\n // https://bugs.chromium.org/p/chromium/issues/detail?id=387737\r\n // The workaround to set these constraints does _NOT_ help:\r\n //var msc={audio: {echoCancellation: false,channelCount: 2, googAudioMirroring: false},video: false};\r\n\r\n // Safari at least version 11: Support for media streams\r\n // TODO test if input is unprocessed\r\n\r\n let msc:MediaStreamConstraints;\r\n console.info('User agent: '+navigator.userAgent);\r\n\r\n\r\n let ua=UserAgentBuilder.userAgent();\r\n\r\n // ua.components.forEach((c)=>{\r\n // console.info(\"UA_Comp: \"+c.toString());\r\n // })\r\n\r\n let agcCfg:AutoGainControlConfig|null=null;\r\n\r\n let autoGainControl=false;\r\n let chromeEchoCancellation=false;\r\n if(autoGainControlConfigs){\r\n for(let agcc of autoGainControlConfigs){\r\n if(agcc.platform===CfgPlatform.Android && ua.detectedPlatform===Platform.Android){\r\n agcCfg=agcc;\r\n break;\r\n }\r\n if(agcc.platform===CfgPlatform.Windows && ua.detectedPlatform===Platform.Windows){\r\n agcCfg=agcc;\r\n break;\r\n }\r\n }\r\n if(agcCfg){\r\n // TODO use EXACT/IDEAL constraint\r\n autoGainControl=agcCfg.value;\r\n if(CHROME_ACTIVATE_ECHO_CANCELLATION_WITH_AGC){\r\n chromeEchoCancellation=agcCfg.value;\r\n }\r\n // TODO query real AGC status\r\n this.agcStatus=agcCfg.value;\r\n }else{\r\n this.agcStatus=false;\r\n }\r\n }\r\n\r\n // default\r\n msc = {\r\n audio: {\r\n deviceId: selDeviceId,\r\n echoCancellation: false,\r\n channelCount: channelCount,\r\n autoGainControl: autoGainControl\r\n },\r\n video: false\r\n };\r\n\r\n if (ua.detectedBrowser===Browser.Edge) {\r\n\r\n // Microsoft Edge sends unmodified audio\r\n // The constraint can follow the specification\r\n console.info(\"Setting media track constraints for Microsoft Edge.\");\r\n msc = {\r\n audio: {\r\n deviceId: selDeviceId,\r\n echoCancellation: false,\r\n channelCount: channelCount,\r\n autoGainControl: autoGainControl\r\n },\r\n video: false\r\n };\r\n } else if (ua.detectedBrowser===Browser.Chrome) {\r\n // Google Chrome: we need to switch of each of the preprocessing units including the\r\n console.info(\"Setting media track constraints for Google Chrome.\");\r\n\r\n // Chrome 60 -> 61 changed\r\n // it works now without mandatory/optional sub-objects\r\n\r\n\r\n // Requires at least Chrome 61\r\n msc = {\r\n audio: {\r\n deviceId: selDeviceId,\r\n channelCount: channelCount,\r\n echoCancellation: {exact:chromeEchoCancellation},\r\n autoGainControl: {exact:autoGainControl},\r\n sampleSize:{min: 16},\r\n },\r\n video: false,\r\n }\r\n\r\n } else if (ua.detectedBrowser===Browser.Firefox) {\r\n console.info(\"Setting media track constraints for Mozilla Firefox.\");\r\n // Firefox\r\n msc = {\r\n audio: {\r\n deviceId: selDeviceId,\r\n channelCount: channelCount,\r\n echoCancellation: false,\r\n autoGainControl: autoGainControl,\r\n noiseSuppression: false\r\n },\r\n video: false,\r\n }\r\n\r\n } else if (ua.detectedBrowser===Browser.Safari) {\r\n console.info(\"Setting media track constraints for Safari browser.\")\r\n console.info(\"Apply workaround for Safari: Avoid disconnect of streams.\");\r\n\r\n this.disconnectStreams = false;\r\n msc = {\r\n audio: {\r\n deviceId: selDeviceId,\r\n channelCount: channelCount,\r\n echoCancellation: false\r\n },\r\n video: false,\r\n }\r\n\r\n } else {\r\n\r\n // TODO default constraints or error Browser not supported\r\n }\r\n\r\n\r\n\r\n console.debug(\"Audio capture, AGC: \"+this.agcStatus)\r\n\r\n\r\n let ump = navigator.mediaDevices.getUserMedia(msc);\r\n ump.then((s) => {\r\n this.stream = s;\r\n\r\n let aTracks = s.getAudioTracks();\r\n\r\n for (let i = 0; i < aTracks.length; i++) {\r\n let aTrack = aTracks[i];\r\n\r\n console.info(\"Track audio info: id: \" + aTrack.id + \" kind: \" + aTrack.kind + \" label: \\\"\" + aTrack.label + \"\\\"\");\r\n let mtrSts=aTrack.getSettings();\r\n console.info(\"Track audio settings: Ch cnt: \"+mtrSts.channelCount+\", AGC: \"+mtrSts.autoGainControl+\", Echo cancell.: \"+mtrSts.echoCancellation);\r\n if(mtrSts.autoGainControl){\r\n this.agcStatus=mtrSts.autoGainControl;\r\n }\r\n }\r\n\r\n let vTracks = s.getVideoTracks();\r\n for (let i = 0; i < vTracks.length; i++) {\r\n let vTrack = vTracks[i];\r\n console.info(\"Track video info: id: \" + vTrack.id + \" kind: \" + vTrack.kind + \" label: \" + vTrack.label);\r\n }\r\n this.mediaStream = this.context.createMediaStreamSource(s);\r\n // stream channel count ( is always 2 !)\r\n let streamChannelCount: number = this.mediaStream.channelCount;\r\n console.info(\"Stream channel count: \"+streamChannelCount);\r\n // is not set!!\r\n //this.currentSampleRate = this.mediaStream.sampleRate;\r\n this.currentSampleRate = this.context.sampleRate;\r\n console.info(\"Source audio node: channels: \" + streamChannelCount + \" samplerate: \" + this.currentSampleRate);\r\n if (this.audioOutStream) {\r\n this.audioOutStream.setFormat(this.channelCount, this.currentSampleRate);\r\n }\r\n // W3C -> new name is createScriptProcessor\r\n //\r\n // Again deprecated, but AudioWorker not yet implemented in stable releases (June 2016)\r\n // AudioWorker is now AudioWorkletProcessor ... (May 2017)\r\n\r\n // Update 12-2020:\r\n // The ScriptProcessorNode Interface - DEPRECATED\r\n\r\n // Update 06-2021\r\n // AudioWorkletProcessor is here to stay. Web Audio API has now Recommendation status !\r\n\r\n if(ENABLE_AUDIO_WORKLET && this.context.audioWorklet){\r\n //const workletFileName = ('file-loader!./interceptor_worklet.js');\r\n //const workletFileName = 'http://localhost:4200/assets/interceptor_worklet.js';\r\n //console.log(awpStr);\r\n let audioWorkletModuleBlob= new Blob([awpStr], {type: 'text/javascript'});\r\n\r\n let audioWorkletModuleBlobUrl=window.URL.createObjectURL(audioWorkletModuleBlob);\r\n\r\n this.context.audioWorklet.addModule(audioWorkletModuleBlobUrl).then(()=> {\r\n const awn = new AudioWorkletNode(this.context, 'capture-interceptor');\r\n awn.onprocessorerror=(ev:Event)=>{\r\n let msg='Unknwon error';\r\n if(ev instanceof ErrorEvent){\r\n msg=ev.message;\r\n }\r\n console.error(\"Capture audio worklet error: \"+msg);\r\n if(this.listener){\r\n this.listener.error(msg);\r\n }\r\n }\r\n let awnPt = awn.port;\r\n if (awnPt) {\r\n awnPt.onmessage = (ev: MessageEvent<any>) => {\r\n if (this.capturing) {\r\n let dt=ev.data;\r\n let chs = dt.chs;\r\n let adaLen = dt.data.length;\r\n if(DEBUG_TRACE_LEVEL>8) {\r\n console.debug('Received data from worklet: ' +chs + ' ' + dt.len +' Data chs: '+adaLen);\r\n }\r\n //let chunkLen = adaLen / chs;\r\n let chunkLen = adaLen;\r\n let chunk = new Array<Float32Array>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n if (this.data && this.data[ch]) {\r\n let adaPos = ch * chunkLen;\r\n if(dt.data[ch]) {\r\n let fa = new Float32Array(dt.data[ch]);\r\n this.data[ch].push(fa);\r\n chunk[ch] = fa;\r\n // Use samples of channel 0 to count frames (samples)\r\n if (ch == 0) {\r\n this.framesRecorded += fa.length;\r\n }\r\n }else{\r\n if(DEBUG_TRACE_LEVEL>8) {\r\n console.debug('Channel '+ch+' data not set!!');\r\n }\r\n }\r\n }\r\n }\r\n if (this.audioOutStream) {\r\n this.audioOutStream.write(chunk);\r\n }\r\n }\r\n };\r\n }\r\n this.bufferingNode = awn;\r\n this._opened = true;\r\n if (this.listener) {\r\n this.listener.opened();\r\n }\r\n }\r\n ).catch((error: any)=>{\r\n console.log('Could not add module '+error);\r\n });\r\n\r\n }else if(this.context.createScriptProcessor) {\r\n // The ScriptProcessorNode Interface - DEPRECATED Only as fallback\r\n // TODO should we use streamChannelCount or channelCount here ?\r\n let scriptProcessorNode= this.context.createScriptProcessor(AudioCapture.BUFFER_SIZE, streamChannelCount, streamChannelCount);\r\n this.bufferingNode=scriptProcessorNode;\r\n let c = 0;\r\n if(scriptProcessorNode.onaudioprocess){\r\n scriptProcessorNode.onaudioprocess = (e: AudioProcessingEvent) => {\r\n\r\n if (this.capturing) {\r\n let inBuffer = e.inputBuffer;\r\n let duration = inBuffer.duration;\r\n // only process requested count of channels\r\n let currentBuffers = new Array<Float32Array>(channelCount);\r\n for (let ch: number = 0; ch < channelCount; ch++) {\r\n let chSamples = inBuffer.getChannelData(ch);\r\n let chSamplesCopy = chSamples.slice(0);\r\n currentBuffers[ch] = chSamplesCopy.slice(0);\r\n this.data[ch].push(chSamplesCopy);\r\n if(DEBUG_TRACE_LEVEL>8){\r\n console.debug(\"Process \"+chSamplesCopy.length+\" samples.\");\r\n }\r\n this.framesRecorded += chSamplesCopy.length;\r\n }\r\n c++;\r\n if (this.audioOutStream) {\r\n this.audioOutStream.write(currentBuffers);\r\n }\r\n }\r\n };\r\n this._opened = true;\r\n if (this.listener) {\r\n this.listener.opened();\r\n }\r\n }else{\r\n this.listener.error('Browser does not support audio processing (ScriptProcessor.onaudioprocess method not found)!');\r\n }\r\n }else{\r\n this.listener.error('Browser does not support audio processing (neither AudioWorkletProcessor nor ScriptProcessor)!');\r\n }\r\n }, (e) => {\r\n console.error(e + \" Error name: \" +e.name);\r\n if (this.listener) {\r\n if('NotAllowedError' === e.name){\r\n this.listener.error('Not allowed to use your microphone.','Please make sure that microphone access is allowed for this web page and reload the page.');\r\n }else if('NotReadableError' === e.name){\r\n this.listener.error('Could not read from your audio device.','Please make sure your audio device is working.');\r\n }else if('OverconstrainedError' === e.name){\r\n let eMsg=e.msg?e.msg:'Overconstrained media device request error.';\r\n this.listener.error(eMsg);\r\n } else {\r\n this.listener.error();\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n start() {\r\n\r\n this.initData();\r\n if (this.audioOutStream) {\r\n this.audioOutStream.nextStream()\r\n }\r\n this.capturing = true;\r\n if(this.bufferingNode) {\r\n this.mediaStream.connect(this.bufferingNode);\r\n this.bufferingNode.connect(this.context.destination);\r\n }\r\n if (this.listener) {\r\n this.listener.started();\r\n }\r\n\r\n }\r\n\r\n stop() {\r\n\r\n if (this.disconnectStreams && this.bufferingNode) {\r\n this.mediaStream.disconnect(this.bufferingNode);\r\n this.bufferingNode.disconnect(this.context.destination);\r\n }\r\n\r\n if (this.audioOutStream) {\r\n this.audioOutStream.flush();\r\n }\r\n this.capturing = false;\r\n if (this.listener) {\r\n this.listener.stopped();\r\n }\r\n }\r\n\r\n\r\n close() {\r\n this.mediaStream.disconnect();\r\n if (this.stream) {\r\n //this.stream.stop();\r\n //'MediaStream.stop()' is deprecated and will be removed in M47, around November 2015. Please use 'MediaStream.active' instead.\r\n //this.stream.active=false;\r\n var mts = this.stream.getTracks();\r\n for (var i = 0; i < mts.length; i++) {\r\n mts[i].stop();\r\n }\r\n }\r\n this._opened=false;\r\n }\r\n\r\n audioBuffer(): AudioBuffer {\r\n var frameLen: number = 0;\r\n var ch0Data = this.data[0];\r\n\r\n for (var ch0Chk of ch0Data) {\r\n frameLen += ch0Chk.length;\r\n }\r\n var ab = this.context.createBuffer(this.channelCount, frameLen, this.context.sampleRate);\r\n for (var ch = 0; ch < this.channelCount; ch++) {\r\n\r\n var chD = ab.getChannelData(ch);\r\n var pos = 0;\r\n for (var chChk of this.data[ch]) {\r\n var bufLen = chChk.length;\r\n chD.set(chChk, pos);\r\n pos += bufLen;\r\n }\r\n }\r\n return ab;\r\n }\r\n}\r\n\r\n","\n\n export class WavFileFormat {\n static RIFF_KEY:string = 'RIFF';\n static WAV_KEY:string = 'WAVE';\n static PCM:number = 0x0001;\n }\n\n\n\n\n","\n export class BinaryByteWriter {\n static DEFAULT_SIZE_INC = 1024;\n buf: ArrayBuffer;\n private _pos: number;\n\n constructor() {\n const size = BinaryByteWriter.DEFAULT_SIZE_INC;\n this.buf = new ArrayBuffer(size);\n this._pos = 0;\n }\n\n get pos(): number {\n return this._pos;\n }\n\n ensureCapacity(numBytes: number) {\n\n while ( this._pos + numBytes >= this.buf.byteLength ) {\n // buffer increment\n let inc = BinaryByteWriter.DEFAULT_SIZE_INC;\n if (inc < numBytes) {\n inc = numBytes;\n }\n const newSize = this.buf.byteLength + inc;\n\n const arrOld = new Uint8Array(this.buf, 0, this._pos);\n const arrNew = new Uint8Array(newSize);\n arrNew.set(arrOld);\n this.buf = arrNew.buffer;\n }\n }\n\n writeUint8(val: number): void {\n this.ensureCapacity(1);\n const valView = new DataView(this.buf, this._pos, 1);\n valView.setUint8(0, val);\n this._pos++;\n }\n\n writeUint16(val: number, le: boolean): void {\n this.ensureCapacity(2);\n const valView = new DataView(this.buf, this._pos, 2);\n valView.setUint16(0, val, le);\n this._pos += 2;\n\n }\n writeInt16(val: number, le: boolean): void {\n this.ensureCapacity(2);\n const valView = new DataView(this.buf, this._pos, 2);\n valView.setInt16(0, val, le);\n this._pos += 2;\n }\n\n\n writeUint32(val: number, le: boolean): void {\n this.ensureCapacity(4);\n const valView = new DataView(this.buf, this._pos, 4);\n valView.setUint32(0, val, le);\n this._pos += 4;\n }\n\n writeInt32(val: number, le: boolean): void {\n this.ensureCapacity(4);\n const valView = new DataView(this.buf, this._pos, 4);\n valView.setInt32(0, val, le);\n this._pos += 4;\n }\n finish(): Uint8Array {\n const finalArr = new Uint8Array(this._pos);\n const dv = new DataView(this.buf, 0, this._pos);\n for (let i = 0; i < this._pos; i++) {\n finalArr[i] = dv.getUint8(i);\n }\n return finalArr;\n }\n\n writeAscii(text: string): void {\n let i;\n for (i = 0; i < text.length; i++) {\n const asciiCode = text.charCodeAt(i);\n if (asciiCode < 0 || asciiCode > 255) {\n throw new Error('Not an ASCII character at char ' + i + ' in ' + text);\n }\n this.writeUint8(asciiCode);\n }\n }\n\n }\n\n","\r\n export class UUID {\r\n\r\n static generate():string {\r\n return UUID.s4() + UUID.s4() + '-' + UUID.s4() + '-' + UUID.s4() + '-' +\r\n UUID.s4() + '-' + UUID.s4() + UUID.s4() + UUID.s4();\r\n }\r\n\r\n private static s4() {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n }\r\n }\r\n\r\n export class Arrays {\r\n\r\n static cloneNumberArray(numberArray: Array<number>): Array<number> {\r\n let len = numberArray.length;\r\n let cloneArr = new Array<number>(len);\r\n for (let c = 0; c < numberArray.length; c++) {\r\n cloneArr[c] = numberArray[c];\r\n }\r\n return cloneArr;\r\n }\r\n\r\n static swap<T>(items:Array<T>, i:number, j:number) {\r\n let tmp = items[i];\r\n items[i] = items[j];\r\n items[j] = tmp;\r\n }\r\n\r\n static shuffleArray<T>(orgArray:Array<T>):Array<T>{\r\n let shuffledArray = [...orgArray];\r\n for (let i = shuffledArray.length; i > 1; i--) {\r\n let rnd=Math.random();\r\n let rndArrIdx=Math.floor(rnd*i);\r\n Arrays.swap(shuffledArray, i - 1, rndArrIdx);\r\n }\r\n return shuffledArray;\r\n }\r\n }\r\n\r\n export class WorkerHelper {\r\n\r\n static DEBUG=false;\r\n static buildWorkerBlobURL(workerFct: Function): string {\r\n\r\n if(! (workerFct instanceof Function)) {\r\n throw new Error(\r\n 'Parameter workerFct is not a function! (XSS attack?).'\r\n )\r\n }\r\n let woFctNm = workerFct.name\r\n if (WorkerHelper.DEBUG) {\r\n console.info(\"Worker method name: \" + woFctNm)\r\n }\r\n\r\n let woFctStr = workerFct.toString()\r\n if (WorkerHelper.DEBUG) {\r\n console.info(\"Worker method string:\")\r\n console.info(woFctStr)\r\n }\r\n\r\n\r\n // Make sure code starts with \"function()\"\r\n\r\n // Chrome, Firefox: \"[wofctNm](){...}\", Safari: \"function [wofctNm](){...}\"\r\n // we need an anonymous function: \"function() {...}\"\r\n let piWoFctStr = woFctStr.replace(/^function +/, '');\r\n\r\n if(WorkerHelper.DEBUG){\r\n console.info(\"Worker platform independent function string:\")\r\n console.info(piWoFctStr)\r\n }\r\n\r\n // Convert to anonymous function\r\n let anonWoFctStr = piWoFctStr.replace(woFctNm + '()', 'function()')\r\n if(WorkerHelper.DEBUG){\r\n console.info(\"Worker anonymous function string:\")\r\n console.info(piWoFctStr)\r\n }\r\n // Self executing\r\n let ws = '(' + anonWoFctStr + ')();'\r\n if(WorkerHelper.DEBUG){\r\n console.info(\"Worker self executing anonymous function string:\")\r\n console.info(anonWoFctStr)\r\n }\r\n // Build the worker blob\r\n let wb = new Blob([ws], {type: 'text/javascript'});\r\n\r\n let workerBlobUrl=window.URL.createObjectURL(wb);\r\n return workerBlobUrl;\r\n }\r\n }\r\n","import { WavFileFormat } from './wavformat'\r\nimport { PCMAudioFormat } from '../format'\r\nimport { BinaryByteWriter } from '../../io/BinaryWriter'\r\nimport {WorkerHelper} from \"../../utils/utils\";\r\ndeclare function postMessage (message:any, transfer:Array<any>):void;\r\n\r\n\r\n export class WavWriter {\r\n\r\n static PCM:number = 1;\r\n static DEFAULT_SAMPLE_SIZE_BYTES:number = 2;\r\n private bw:BinaryByteWriter;\r\n private format:PCMAudioFormat|null=null;\r\n private dataLength:number|null=null;\r\n private workerURL: string|null=null;\r\n\r\n constructor() {\r\n this.bw = new BinaryByteWriter();\r\n }\r\n\r\n /*\r\n * Method used as worker code.\r\n */\r\n workerFunction() {\r\n self.onmessage = function (msg:MessageEvent) {\r\n\r\n let bufLen=msg.data.frameLength * msg.data.chs;\r\n let valView = new DataView(msg.data.buf,msg.data.bufPos);\r\n\r\n let bufPos = 0;\r\n let hDynIntRange = 1 << (msg.data.sampleSizeInBits - 1);\r\n for (let s = 0; s < msg.data.frameLength; s++) {\r\n // interleaved channel data\r\n\r\n for (let ch = 0; ch < msg.data.chs; ch++) {\r\n let srcPos=(ch*msg.data.frameLength)+s;\r\n let valFlt = msg.data.audioData[srcPos];\r\n let valInt = Math.round(valFlt * hDynIntRange);\r\n valView.setInt16(bufPos, valInt, true);\r\n bufPos+=2;\r\n }\r\n }\r\n postMessage({buf:msg.data.buf}, [msg.data.buf]);\r\n //self.close()\r\n }\r\n }\r\n\r\n\r\n writeFmtChunk(audioBuffer:AudioBuffer){\r\n\r\n this.bw.writeUint16(WavFileFormat.PCM,true);\r\n let frameSize=WavWriter.DEFAULT_SAMPLE_SIZE_BYTES*audioBuffer.numberOfChannels; // fixed 16-bit for now\r\n this.bw.writeUint16(audioBuffer.numberOfChannels,true);\r\n this.bw.writeUint32(audioBuffer.sampleRate,true);\r\n // dwAvgBytesPerSec\r\n this.bw.writeUint32(frameSize*audioBuffer.sampleRate,true);\r\n this.bw.writeUint16(frameSize,true);\r\n // sample size in bits (PCM format only)\r\n this.bw.writeUint16(WavWriter.DEFAULT_SAMPLE_SIZE_BYTES*8,true);\r\n }\r\n\r\n writeDataChunk(audioBuffer:AudioBuffer){\r\n\r\n let chData0=audioBuffer.getChannelData(0);\r\n let dataLen=chData0.length;\r\n let hDynIntRange=1 << ((WavWriter.DEFAULT_SAMPLE_SIZE_BYTES*8)-1);\r\n for(let s=0;s<dataLen;s++) {\r\n // interleaved channel data\r\n for (let ch = 0; ch < audioBuffer.numberOfChannels; ch++) {\r\n let chData = audioBuffer.getChannelData(ch);\r\n let valFlt=chData[s];\r\n let valInt=Math.round(valFlt*hDynIntRange);\r\n this.bw.writeInt16(valInt,true);\r\n }\r\n }\r\n\r\n }\r\n\r\n writeChunkHeader(name:string,chkLen:number){\r\n this.bw.writeAscii(name);\r\n this.bw.writeUint32(chkLen,true);\r\n }\r\n\r\n writeAsync(audioBuffer:AudioBuffer,callback: (wavFileData:Uint8Array)=> any){\r\n\r\n let dataChkByteLen=this.writeHeader(audioBuffer);\r\n if (!this.workerURL) {\r\n this.workerURL = WorkerHelper.buildWorkerBlobURL(this.workerFunction)\r\n }\r\n let wo = new Worker(this.workerURL);\r\n\r\n let chs = audioBuffer.numberOfChannels;\r\n\r\n let frameLength = audioBuffer.getChannelData(0).length;\r\n let ad = new Float32Array(chs * frameLength);\r\n for (let ch = 0; ch < chs; ch++) {\r\n ad.set(audioBuffer.getChannelData(ch), ch * frameLength);\r\n }\r\n // ensureCapacity blocks !!!\r\n this.bw.ensureCapacity(dataChkByteLen);\r\n wo.onmessage = (me) => {\r\n callback(me.data.buf);\r\n wo.terminate();\r\n }\r\n //TODO Fixed sample size of 16 bits\r\n wo.postMessage({sampleSizeInBits:16, chs: chs, frameLength: frameLength, audioData: ad,buf:this.bw.buf,bufPos:this.bw.pos}, [ad.buffer,this.bw.buf]);\r\n\r\n }\r\n\r\n write(audioBuffer:AudioBuffer):Uint8Array{\r\n this.writeHeader(audioBuffer);\r\n this.writeDataChunk(audioBuffer);\r\n return this.bw.finish();\r\n }\r\n\r\n\r\n writeHeader(audioBuffer:AudioBuffer):number{\r\n\r\n this.bw.writeAscii(WavFileFormat.RIFF_KEY);\r\n let dataChkByteLen=audioBuffer.getChannelData(0).length*WavWriter.DEFAULT_SAMPLE_SIZE_BYTES*audioBuffer.numberOfChannels;\r\n let wavChunkByteLen=(4+4)*3+16+dataChkByteLen;\r\n let wavFileDataByteLen=wavChunkByteLen+8;\r\n\r\n this.bw.writeUint32(wavChunkByteLen,true); // must be set to file length-8 later\r\n this.bw.writeAscii(WavFileFormat.WAV_KEY);\r\n this.writeChunkHeader('fmt ',16);\r\n this.writeFmtChunk(audioBuffer);\r\n this.writeChunkHeader('data',dataChkByteLen);\r\n return dataChkByteLen;\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n","\r\nexport type Mode = \"MANUAL\" | \"AUTOPROGRESS\" | \"AUTORECORDING\";\r\nexport type PromptPhase = \"IDLE\" | \"PRERECORDING\" | \"RECORDING\";\r\n\r\nexport type Order = 'SEQUENTIAL' | 'RANDOM' | 'RANDOMIZED';\r\n\r\nexport type Decoration ='underline'\r\nexport type Style ='italic' | 'normal'\r\nexport type FontWeight='normal' | 'bold'\r\nexport type BlockType='p';\r\nexport type TextType='text' | 'font';\r\n\r\nexport interface Recinstructions{\r\n recinstructions:string;\r\n}\r\n\r\nexport interface Text {\r\n type: TextType,\r\n color? : string,\r\n decoration? : Decoration,\r\n size?: string,\r\n weight?: FontWeight,\r\n style?: Style,\r\n text : string | Text;\r\n}\r\n\r\nexport interface Block {\r\n type: BlockType,\r\n texts: Array<Text>\r\n}\r\nexport interface Body{\r\n blocks?: Array<Block>,\r\n}\r\n\r\nexport interface PromptDoc{\r\n body?: Body\r\n}\r\n\r\nexport interface Mediaitem {\r\n text?: string,\r\n src?: string,\r\n promptDoc?: PromptDoc,\r\n mimetype?:string,\r\n defaultVirtualViewBox?:VirtualViewBox,\r\n alt?:string\r\n}\r\n\r\nexport interface PromptItem {\r\n type?:string;\r\n itemcode?: string,\r\n prerecording: number,\r\n recduration?: number,\r\n postrecording: number,\r\n recinstructions?: Recinstructions,\r\n mediaitems: Array<Mediaitem>\r\n}\r\n\r\nexport interface Group {\r\n order?:Order;\r\n promptItems: Array<PromptItem>;\r\n _shuffledPromptItems: Array<PromptItem>;\r\n}\r\n\r\nexport interface Section {\r\n mode: Mode;\r\n promptphase: PromptPhase;\r\n order?: Order;\r\n training: boolean;\r\n groups: Array<Group>;\r\n _shuffledGroups: Array<Group>;\r\n}\r\n\r\nexport interface VirtualViewBox{\r\n height:number;\r\n}\r\n\r\nexport interface Script {\r\n virtualViewBox?:VirtualViewBox;\r\n sections: Array<Section>;\r\n}\r\n\r\nexport class PromptDocUtil{\r\n\r\n static toPlainTextString(promptDoc:PromptDoc):string{\r\n let pt=\"\";\r\n let b=promptDoc.body;\r\n if(b!=null) {\r\n let blks=b.blocks\r\n if(blks) {\r\n for(let bli=0;bli<blks.length;bli++){\r\n let blk=blks[bli];\r\n let txts=blk.texts;\r\n for(let ti=0;ti<txts.length;ti++){\r\n let txtEl=txts[ti];\r\n let txt =txtEl.text;\r\n if( txtEl.type === 'font'){\r\n if(typeof txt === 'string'){\r\n pt = pt.concat(<string>txt);\r\n }else{\r\n let subTxtEl=<Text>txt;\r\n let subTxt=subTxtEl.text;\r\n if(typeof subTxt === 'string') {\r\n pt=pt.concat(subTxt);\r\n }\r\n }\r\n }else if(typeof txt === 'string'){\r\n pt = pt.concat(<string>txt);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return pt;\r\n }\r\n}\r\n\r\nexport class MediaitemUtil {\r\n static toPlainTextString(mediaitem: Mediaitem): string|null {\r\n\r\n let txt = mediaitem.text;\r\n let pd = mediaitem.promptDoc;\r\n if (txt == null) {\r\n let pt = null;\r\n if (pd != null) {\r\n pt = PromptDocUtil.toPlainTextString(pd);\r\n }\r\n return pt;\r\n } else {\r\n return txt;\r\n }\r\n }\r\n\r\n static description(mi: Mediaitem): string {\r\n let description = \"\";\r\n\r\n if (mi.alt != null) {\r\n description = description.concat(mi.alt)\r\n } else {\r\n let src = mi.src;\r\n let mimeType = mi.mimetype;\r\n if (!mimeType) {\r\n mimeType = 'text/plain';\r\n }\r\n if (mimeType.startsWith(\"image\")) {\r\n description = description.concat(\"IMAGE: \");\r\n } else if (mimeType.startsWith(\"audio\")) {\r\n description = description.concat(\"AUDIO: \");\r\n } else if (mimeType.startsWith(\"video\")) {\r\n description = description.concat(\"VIDEO: \");\r\n }\r\n let promptText = MediaitemUtil.toPlainTextString(mi);\r\n if (promptText != null) {\r\n description = description.concat(promptText);\r\n } else if (src != null) {\r\n let srcPn;\r\n try {\r\n let srcUrl = new URL(src);\r\n srcPn=srcUrl.pathname;\r\n }catch{\r\n srcPn=src;\r\n }\r\n\r\n // Get filename without extension\r\n let srcFnM=srcPn.match(/([^\\/]*)$/);\r\n if(srcFnM && srcFnM.length==2){\r\n let srcFn=srcFnM[1];\r\n let srcFnNm=srcFn.replace(/[\\.][^\\.]*/,'');\r\n description = description.concat(srcFnNm);\r\n }\r\n }\r\n }\r\n return description;\r\n }\r\n}\r\n\r\nexport class PromptitemUtil {\r\n static toPlainTextString(promptItem: PromptItem): string {\r\n\r\n let mis = promptItem.mediaitems;\r\n let description = \"\";\r\n if (mis) {\r\n\r\n let misSize = mis.length;\r\n for (let i = 0; i < misSize; i++) {\r\n let mi = mis[i];\r\n description = description.concat(MediaitemUtil.description(mi));\r\n if (i + 1 < misSize) {\r\n // not last item\r\n description = description.concat(\", \");\r\n }\r\n }\r\n }\r\n return description;\r\n }\r\n}\r\n\r\n\r\n","import { UUID } from '../utils/utils'\r\nimport {PromptItem} from \"./script/script\";\r\n\r\n\r\nexport class RecordingFileDescriptor {\r\n recording!:PromptItem;\r\n version!:number;\r\n constructor() {}\r\n}\r\n\r\n export class RecordingFile extends RecordingFileDescriptor{\r\n recordingFileId: string | number | null= null;\r\n uuid:string|null=null;\r\n date: string|null=null;\r\n _dateAsDateObj:Date|null=null;\r\n audioBuffer:AudioBuffer|null=null;\r\n session:string|number|null=null;\r\n itemCode:string;\r\n frames:number|null=null;\r\n editSampleRate:number|null=null;\r\n editStartFrame:number|null=null\r\n editEndFrame:number|null=null\r\n\r\n constructor(sessionId:string|number,itemcode:string,version:number,audioBuffer:AudioBuffer|null) {\r\n super()\r\n this.session=sessionId;\r\n this.itemCode=itemcode;\r\n this.version=version;\r\n this.audioBuffer=audioBuffer;\r\n this.uuid=UUID.generate();\r\n }\r\n\r\n filenameString():string{\r\n let fns:string='';\r\n if(this.session){\r\n fns+=this.session;\r\n fns+='_';\r\n }\r\n if(this.itemCode){\r\n fns+=this.itemCode;\r\n fns+='_';\r\n }\r\n fns+=this.uuid;\r\n return fns;\r\n }\r\n }\r\n\r\n","\r\n import {HttpClient, HttpErrorResponse} from \"@angular/common/http\";\r\n import { timeout } from 'rxjs/operators'\r\n\r\n // state of an upload\r\n export enum UploadStatus {IDLE = 1, UPLOADING = 2, ABORT = 3, DONE = 0, ERR = -1}\r\n\r\n // state of the uploader\r\n // TRY_UPLOADING is uploading state after an error (for example if disconnected from server)\r\n export enum UploaderStatus { DONE = 0, UPLOADING = 1, TRY_UPLOADING = 2,NEXT = 3, ERR = -1}\r\n\r\n export class UploaderStatusChangeEvent {\r\n private _sizeQueued:number;\r\n private _sizeDone:number;\r\n private _status: UploaderStatus;\r\n\r\n\r\n constructor(sizeQueued: number, sizeDone: number, status: UploaderStatus) {\r\n this._sizeQueued = sizeQueued;\r\n this._sizeDone = sizeDone;\r\n this._status = status;\r\n }\r\n\r\n get sizeQueued():number {\r\n return this._sizeQueued;\r\n }\r\n\r\n get sizeDone():number {\r\n return this._sizeDone;\r\n }\r\n\r\n get status(): UploaderStatus {\r\n return this._status;\r\n }\r\n\r\n uploadDone(): boolean {\r\n return (this._sizeDone >= this._sizeQueued);\r\n }\r\n\r\n percentDone(): number {\r\n if (this._sizeQueued == 0) {\r\n // no data queued, we are \"done\"\r\n return 100;\r\n }\r\n let percent = Math.floor(this._sizeDone * 100 / this._sizeQueued);\r\n //console.log(\"Upload status: queued: \"+this._sizeQueued+\", done: \"+this._sizeDone+\", \"+percent+\"%\")\r\n return percent;\r\n }\r\n\r\n }\r\n\r\n export class Upload {\r\n\r\n private _data:Blob;\r\n private _url:string;\r\n status: UploadStatus;\r\n\r\n constructor(blob:Blob, url:string) {\r\n this._data = blob;\r\n this._url = url;\r\n this.status = UploadStatus.IDLE;\r\n }\r\n\r\n get url():string {\r\n return this._url;\r\n }\r\n\r\n get data():Blob {\r\n return this._data;\r\n }\r\n\r\n public toString = () : string => {\r\n\r\n return `Upload: Status: ${this.status}, URL: ${this._url}, Size: ${this._data.size}`;\r\n }\r\n }\r\n\r\n export class Uploader {\r\n POST_MIN_TIMEOUT=120000; // 2min plus ...\r\n POST_TIMEOUT_PER_KB=1000; // ... 1s per kB\r\n\r\n RETRY_DELAY: number = 30000; // retry every 30s\r\n DEBUG_DELAY: number = 0;\r\n //DEBUG_DELAY:number=0;\r\n private status: UploaderStatus = UploaderStatus.DONE;\r\n private que:Array<Upload>;\r\n listener: ((ue: UploaderStatusChangeEvent) => void) | null=null;\r\n private _sizeQueued: number = 0;\r\n private _sizeDone: number = 0;\r\n\r\n private retryTimerRunning=false;\r\n private retryTimerId: number|null=null;\r\n\r\n constructor(private http: HttpClient,private withCredentials:boolean=false) {\r\n this.que = new Array<Upload>();\r\n }\r\n\r\n\r\n private uploadDone(ul:Upload) {\r\n\r\n ul.status = UploadStatus.DONE;\r\n\r\n // remove upload from queue\r\n for (let i = 0; i < this.que.length; i++) {\r\n if (this.que[i] === ul) {\r\n // found, remove\r\n this.que.splice(i, 1);\r\n let ulSize = ul.data.size;\r\n this._sizeDone += ulSize;\r\n break;\r\n }\r\n }\r\n // set to done for now...\r\n this.status = UploaderStatus.NEXT;\r\n // continue\r\n this.process();\r\n }\r\n\r\n private startUpload(ul:Upload) {\r\n\r\n ul.status = UploadStatus.UPLOADING;\r\n if (UploaderStatus.ERR === this.status) {\r\n this.status = UploaderStatus.TRY_UPLOADING;\r\n } else {\r\n this.status = UploaderStatus.UPLOADING;\r\n }\r\n\r\n let dSize=ul.data.size\r\n let timeoutForDataSize=dSize*this.POST_TIMEOUT_PER_KB/1000;\r\n let timeoVal:number=Math.round(this.POST_MIN_TIMEOUT+timeoutForDataSize)\r\n // pipe(timeout()) is not the same as xhr.timeout\r\n\r\n let uploadedUpload:Upload|null=null;\r\n //console.debug(\"Post upload: \"+ul)\r\n this.http.post(ul.url,ul.data,{withCredentials:this.withCredentials}).pipe(timeout(timeoVal)).subscribe(\r\n data => {\r\n uploadedUpload = ul;\r\n //console.debug('Next method called for upload: '+uploadedUpload)\r\n },(err: HttpErrorResponse) => {\r\n if (err.error instanceof Error) {\r\n // A client-side or network error occurred. Handle it accordingly.\r\n console.error('Upload error occurred:', err.error.message);\r\n } else {\r\n // The backend returned an unsuccessful response code.\r\n // The response body may contain clues as to what went wrong,\r\n console.error(`Upload error: Server returned code ${err.status}`);\r\n }\r\n this.processError(ul)\r\n },()=>{\r\n //console.debug('Upload complete method called')\r\n if(uploadedUpload) {\r\n if (this.DEBUG_DELAY>0) {\r\n window.setTimeout(() => {\r\n this.uploadDone(ul);\r\n }, this.DEBUG_DELAY);\r\n } else {\r\n this.uploadDone(uploadedUpload)\r\n }\r\n }else{\r\n console.error('Upload post complete, but upload not set in next method!')\r\n }\r\n });\r\n }\r\n\r\n private processError(ul:Upload) {\r\n //console.debug(\"Process upload error...\")\r\n ul.status=UploadStatus.ERR\r\n this.status = UploaderStatus.ERR;\r\n\r\n let ue = new UploaderStatusChangeEvent(this._sizeQueued, this._sizeDone, this.status);\r\n if (this.listener) {\r\n this.listener(ue);\r\n }\r\n\r\n // set retry timer\r\n this.retryTimerId=window.setTimeout(() => {\r\n this.retryTimerRunning=false;\r\n //console.debug(\"Upload retry timer exprired. Continue processing...\")\r\n this.process();\r\n }, this.RETRY_DELAY);\r\n\r\n this.retryTimerRunning=true;\r\n //console.debug(\"Started upload retry timer \"+this.RETRY_DELAY+\"ms ...\")\r\n }\r\n\r\n private process() {\r\n // clear retry timer if set\r\n if(this.retryTimerRunning){\r\n if(this.retryTimerId) {\r\n window.clearTimeout(this.retryTimerId)\r\n }\r\n this.retryTimerRunning=false\r\n //console.debug(\"Cleared retry timer.\")\r\n }\r\n\r\n let pul: Upload | null = null;\r\n\r\n //console.debug(\"Uploader status: \"+this.status)\r\n\r\n let s = this.que.length;\r\n //console.debug(s+\" uploads are in the queue.\")\r\n\r\n if (s>0 && UploaderStatus.UPLOADING != this.status && UploaderStatus.TRY_UPLOADING != this.status) {\r\n\r\n for (let i = 0; i < s; i++) {\r\n let ul = this.que[i];\r\n //console.log(\"Upload \"+ul+\" status:\"+ul.status)\r\n if (ul.status === UploadStatus.IDLE) {\r\n //console.log(\"Upload \"+ul+\" startUpload\")\r\n this.startUpload(ul);\r\n pul = ul;\r\n break;\r\n }\r\n }\r\n if (!pul) {\r\n //console.log(\"Check ERR uploads...\")\r\n // now failed uploads\r\n //console.debug(\"No regular upload found. Looking for error state uploads.\")\r\n for (let i = 0; i < s; i++) {\r\n let ul = this.que[i];\r\n //console.log(\"Upload \"+ul+\" status:\"+ul.status)\r\n if (ul.status === UploadStatus.ERR) {\r\n //console.log(\"Upload (ERR) \"+ul+\" startUpload\")\r\n //console.debug(\"Start error state upload \"+ul)\r\n this.startUpload(ul);\r\n pul = ul;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if(s==0){\r\n //console.debug(\"Upload done.\")\r\n this.status=UploaderStatus.DONE\r\n }\r\n let ue = new UploaderStatusChangeEvent(this._sizeQueued, this._sizeDone, this.status);\r\n if (this.listener) {\r\n this.listener(ue);\r\n }\r\n }\r\n\r\n queueUpload(ul: Upload) {\r\n if (ul) {\r\n let ulSize = ul.data.size;\r\n this.que.push(ul);\r\n this._sizeQueued += ulSize;\r\n this.process();\r\n }\r\n }\r\n }\r\n\r\n\r\n","import {Injectable, InjectionToken} from \"@angular/core\";\r\n\r\nexport const SPEECHRECORDER_CONFIG = new InjectionToken<SpeechRecorderConfig>('speechrecorder.config');\r\n\r\n\r\nexport enum ApiType {\r\n NORMAL,FILES\r\n}\r\n@Injectable()\r\nexport class SpeechRecorderConfig{\r\n apiEndPoint?: string | null=null;\r\n apiType?: ApiType | null=null;\r\n withCredentials?: boolean=false;\r\n enableDownloadRecordings?: boolean=false;\r\n enableUploadRecordings?: boolean=true;\r\n constructor(){\r\n this.apiEndPoint=null;\r\n this.apiType=null;\r\n this.withCredentials=false;\r\n }\r\n}\r\n\r\n","/**\r\n * Created by klausj on 17.06.2017.\r\n */\r\nimport {Inject, Injectable} from '@angular/core';\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {ApiType, SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../../spr.config\";\r\nimport {Project} from \"./project\";\r\nimport {UUID} from \"../../utils/utils\";\r\nimport {Observable} from \"rxjs\";\r\nimport {PlatformLocation} from \"@angular/common\";\r\n\r\n\r\n\r\n@Injectable()\r\nexport class ProjectService {\r\n public static readonly PROJECT_API_CTX='project'\r\n private projectCtxUrl:string;\r\n private withCredentials:boolean=false;\r\n\r\n constructor(private http:HttpClient,private platformLoaction:PlatformLocation,@Inject(SPEECHRECORDER_CONFIG) private config?:SpeechRecorderConfig) {\r\n\r\n console.log(\"Base Href: \"+platformLoaction.getBaseHrefFromDOM());\r\n\r\n let apiEndPoint = ''\r\n\r\n if(config && config.apiEndPoint) {\r\n apiEndPoint=config.apiEndPoint;\r\n }\r\n if(apiEndPoint !== ''){\r\n apiEndPoint=apiEndPoint+'/'\r\n }\r\n if(config!=null && config.withCredentials!=null){\r\n this.withCredentials=config.withCredentials;\r\n }\r\n\r\n this.projectCtxUrl = apiEndPoint + ProjectService.PROJECT_API_CTX;\r\n\r\n }\r\n\r\n private appendRequestUUIDForDevelopmentServer(url:string):string{\r\n let resUrl=url;\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n resUrl = resUrl + '.json?requestUUID='+UUID.generate();\r\n }\r\n return resUrl\r\n }\r\n\r\n projectUrl(id:string):string{\r\n let encPrjId=encodeURIComponent(id);\r\n return this.appendRequestUUIDForDevelopmentServer(this.projectCtxUrl + '/' + encPrjId);\r\n }\r\n\r\n projectResourceUrl(projectId: string,relResourcePath:string):string{\r\n let encPrjId=encodeURIComponent(projectId);\r\n // Use encodeURI here since the relatice resource path from recording scripts is already a URI\r\n // encodeURIComponent function would encode the slashes and fetching the resource would fail\r\n let encRelResPath=encodeURI(relResourcePath);\r\n return this.projectCtxUrl + '/' + encPrjId +'/'+encRelResPath;\r\n }\r\n\r\n projectObservable(id:string):Observable<Project>{\r\n let prjUrl=this.projectUrl(id);\r\n return this.http.get<Project>(prjUrl,{withCredentials: this.withCredentials})\r\n }\r\n\r\n}\r\n\r\n\r\n","import {Inject, Injectable} from '@angular/core';\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {ApiType, SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../../spr.config\";\r\nimport {Session} from \"./session\";\r\nimport {UUID} from \"../../utils/utils\";\r\nimport {Observable} from \"rxjs\";\r\nimport {ProjectService} from \"../project/project.service\";\r\n\r\n\r\n\r\n@Injectable()\r\nexport class SessionService {\r\n get uploadCount(): number {\r\n return this._uploadCount;\r\n }\r\n public static readonly SESSION_API_CTX='session';\r\n private apiEndPoint='';\r\n private sessionsUrl:string;\r\n private withCredentials:boolean=false;\r\n private _uploadCount=0;\r\n\r\n constructor(private http:HttpClient,@Inject(SPEECHRECORDER_CONFIG) private config?:SpeechRecorderConfig) {\r\n\r\n if(config && config.apiEndPoint) {\r\n this.apiEndPoint=config.apiEndPoint;\r\n }\r\n if(this.apiEndPoint !== ''){\r\n this.apiEndPoint=this.apiEndPoint+'/'\r\n }\r\n if(config!=null && config.withCredentials!=null){\r\n this.withCredentials=config.withCredentials;\r\n }\r\n this.sessionsUrl = this.apiEndPoint + SessionService.SESSION_API_CTX;\r\n }\r\n\r\n sessionObserver(id: string): Observable<Session> {\r\n\r\n let sessUrl = this.sessionsUrl + '/' + id;\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n sessUrl = sessUrl + '.json?requestUUID='+UUID.generate();\r\n }\r\n return this.http.get<Session>(sessUrl,{ withCredentials: this.withCredentials });\r\n\r\n }\r\n\r\n patchSessionObserver(session:Session,body:any): Observable<Session> {\r\n\r\n let sesssUrl = this.apiEndPoint + ProjectService.PROJECT_API_CTX + '/' + session.project + '/' + SessionService.SESSION_API_CTX + '/' + session.sessionId\r\n\r\n let wrapObs = new Observable<Session>(subscriber => {\r\n this._uploadCount++;\r\n let obs = this.http.patch<Session>(sesssUrl, body, {withCredentials: this.withCredentials});\r\n obs.subscribe((value) => {\r\n subscriber.next(value);\r\n }, error => {\r\n this._uploadCount--;\r\n subscriber.error(error);\r\n }, () => {\r\n this._uploadCount--;\r\n subscriber.complete();\r\n });\r\n });\r\n return wrapObs;\r\n }\r\n\r\n // putSessionObserver(session: Session): Observable<Session> {\r\n //\r\n // let sesssUrl = this.apiEndPoint + ProjectService.PROJECT_API_CTX + '/' + session.project + '/' + SessionService.SESSION_API_CTX + '/' + session.session\r\n //\r\n // let wrapObs = new Observable<Session>(subscriber => {\r\n // this._uploadCount++;\r\n // let obs = this.http.put<Session>(sesssUrl, session, {withCredentials: this.withCredentials});\r\n // obs.subscribe((value) => {\r\n // subscriber.next(value);\r\n // }, error => {\r\n // this._uploadCount--;\r\n // subscriber.error(error);\r\n // }, () => {\r\n // this._uploadCount--;\r\n // subscriber.complete();\r\n // });\r\n // });\r\n // return wrapObs;\r\n // }\r\n //\r\n\r\n\r\n}\r\n\r\n\r\n\r\n","import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, HostListener, Input, ViewChild} from \"@angular/core\"\r\nimport {LevelInfo, LevelInfos, LevelListener} from \"../dsp/level_measure\";\r\n\r\nexport const DEFAULT_WARN_DB_LEVEL = -2;\r\nexport const MIN_DB_LEVEL = -60.0;\r\nexport const CONSIDERED_SILENCE_DB_LEVEL = MIN_DB_LEVEL*2;\r\nexport const LINE_WIDTH = 2;\r\nexport const LINE_DISTANCE = 2;\r\nexport const LEVEL_INDICATOR_HEIGHT=3;\r\n\r\nexport const OVERFLOW_THRESHOLD = 0.25;\r\nexport const OVERFLOW_INCR_FACTOR = 0.5;\r\n\r\n\r\n@Component({\r\n\r\n selector: 'audio-levelbar',\r\n template: `\r\n <div #virtualCanvas>\r\n <canvas #levelbar></canvas>\r\n <canvas #markerCanvas></canvas>\r\n </div>\r\n `,\r\n styles: [`:host {\r\n\r\n width: 100%;\r\n background: darkgray;\r\n box-sizing: border-box;\r\n height: 100%;\r\n position: relative;\r\n overflow-x: scroll;\r\n overflow-y: auto;\r\n }`, `div {\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n\r\n /*position: absolute;*/\r\n box-sizing: border-box;\r\n }`, `canvas {\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n }`]\r\n\r\n})\r\nexport class LevelBar implements LevelListener,AfterViewInit {\r\n\r\n @ViewChild('virtualCanvas', { static: true }) virtualCanvasRef!: ElementRef;\r\n virtualCanvas!: HTMLDivElement;\r\n @ViewChild('levelbar', { static: true }) liveLevelCanvasRef!: ElementRef;\r\n liveLevelCanvas!: HTMLCanvasElement;\r\n @ViewChild('markerCanvas', { static: true }) markerCanvasRef!: ElementRef;\r\n markerCanvas!: HTMLCanvasElement;\r\n ce!: HTMLDivElement;\r\n dbValues: Array<Array<number>>;\r\n peakDbLvl = MIN_DB_LEVEL;\r\n private _streamingMode = false;\r\n private _staticLevelInfos: LevelInfos | null = null;\r\n private _playFramePosition: number|null=null;\r\n\r\n warnDBLevel = DEFAULT_WARN_DB_LEVEL;\r\n\r\n constructor(private ref: ElementRef, private changeDetectorRef: ChangeDetectorRef) {\r\n this.dbValues = new Array<Array<number>>();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.ce = this.ref.nativeElement;\r\n this.liveLevelCanvas = this.liveLevelCanvasRef.nativeElement;\r\n this.markerCanvas = this.markerCanvasRef.nativeElement;\r\n this.markerCanvas.style.zIndex = '4';\r\n this.virtualCanvas = this.virtualCanvasRef.nativeElement;\r\n this.layout();\r\n this.drawAll();\r\n }\r\n\r\n\r\n @HostListener('scroll', ['$event'])\r\n onScroll(se: Event) {\r\n setTimeout(()=>{\r\n this.updateViewportPosition();\r\n this.drawAll();\r\n this.drawPlayPosition();\r\n });\r\n }\r\n\r\n private updateViewportPosition(){\r\n // Move canvases to visible viewport position\r\n let viewPortStyleLeft=this.ce.scrollLeft + 'px';\r\n this.liveLevelCanvas.style.left = viewPortStyleLeft;\r\n this.markerCanvas.style.left = viewPortStyleLeft;\r\n }\r\n\r\n @Input()\r\n set streamingMode(streamingMode: boolean) {\r\n if (this._streamingMode !== streamingMode) {\r\n this._streamingMode = streamingMode;\r\n this.reset();\r\n this.layoutStatic();\r\n }\r\n }\r\n\r\n @Input()\r\n set displayLevelInfos(levelInfos: LevelInfos | null) {\r\n this._staticLevelInfos = levelInfos;\r\n if (levelInfos) {\r\n\r\n this.dbValues = levelInfos.bufferLevelInfos.map((li) => {\r\n return li.powerLevelsDB()\r\n });\r\n } else {\r\n this.dbValues = new Array<Array<number>>();\r\n }\r\n this.layoutStatic();\r\n }\r\n\r\n set channelCount(channelCount: number) {\r\n this.reset();\r\n }\r\n\r\n set playFramePosition(playFramePosition: number) {\r\n this._playFramePosition = playFramePosition;\r\n this.drawPlayPosition();\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event: Event) {\r\n\r\n this.layout();\r\n this.drawAll();\r\n }\r\n\r\n layout() {\r\n\r\n // set Canvas size to viewport size\r\n this.liveLevelCanvas.width = this.ce.offsetWidth;\r\n this.liveLevelCanvas.height = this.ce.offsetHeight;\r\n\r\n this.markerCanvas.width = this.ce.offsetWidth;\r\n this.markerCanvas.height = this.ce.offsetHeight;\r\n\r\n // and move to viewport position\r\n this.updateViewportPosition();\r\n\r\n this.drawAll();\r\n this.drawPlayPosition();\r\n }\r\n\r\n update(levelInfos: LevelInfo) {\r\n if (this._streamingMode) {\r\n let dbVals = levelInfos.powerLevelsDB();\r\n let peakDBVal = levelInfos.powerLevelDB();\r\n if (this.peakDbLvl < peakDBVal) {\r\n this.peakDbLvl = peakDBVal;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n this.dbValues.push(dbVals);\r\n let i = this.dbValues.length - 1;\r\n let x = i * (LINE_DISTANCE + LINE_WIDTH);\r\n this.drawPushValue(x, dbVals);\r\n this.checkWidth();\r\n }\r\n }\r\n\r\n streamFinished() {\r\n this.layoutStatic();\r\n }\r\n\r\n private layoutStatic() {\r\n\r\n let requiredWidth = Math.round(this.dbValues.length * (LINE_DISTANCE + LINE_WIDTH));\r\n if (this.virtualCanvas && this.ce) {\r\n\r\n this.virtualCanvas.style.width = requiredWidth + 'px';\r\n this.ce.scrollLeft = requiredWidth - this.ce.offsetWidth;\r\n this.layout();\r\n }\r\n\r\n }\r\n\r\n private checkWidth() {\r\n let requiredWidth = this.dbValues.length * (LINE_DISTANCE + LINE_WIDTH);\r\n if (this.virtualCanvas.offsetWidth - requiredWidth < this.ce.offsetWidth * OVERFLOW_THRESHOLD) {\r\n let newWidth = Math.floor(this.virtualCanvas.offsetWidth + (this.ce.offsetWidth * OVERFLOW_INCR_FACTOR));\r\n this.virtualCanvas.style.width = newWidth + 'px';\r\n this.ce.scrollLeft = newWidth - this.ce.offsetWidth;\r\n\r\n // do not call layout here it is triggered by the scroll event\r\n //this.layout();\r\n }\r\n }\r\n\r\n reset() {\r\n this.peakDbLvl = MIN_DB_LEVEL;\r\n this.dbValues = new Array<Array<number>>();\r\n this.layout();\r\n this.drawAll();\r\n this.drawPlayPosition();\r\n }\r\n\r\n private drawLevelBackground(g: CanvasRenderingContext2D, x: number, h: number){\r\n g.strokeStyle = 'black';\r\n g.fillStyle = 'black';\r\n g.fillRect(x,0,LINE_WIDTH+LINE_DISTANCE,h)\r\n }\r\n\r\n // private drawLevelLine(g: CanvasRenderingContext2D, x: number, h: number, dbVal: number) {\r\n // //translate to viewport\r\n // let xc = x - this.ce.scrollLeft;\r\n //\r\n // this.drawLevelBackground(g,xc,h);\r\n // g.lineWidth = LINE_WIDTH;\r\n // if (dbVal >= this.warnDBLevel) {\r\n // g.strokeStyle = 'red';\r\n // g.fillStyle = 'red';\r\n //\r\n // } else {\r\n // g.strokeStyle = '#00c853';\r\n // g.fillStyle = '#00c853';\r\n // }\r\n // g.beginPath();\r\n // g.moveTo(xc, h);\r\n // let pVal = ((dbVal - MIN_DB_LEVEL) / -MIN_DB_LEVEL) * h;\r\n //\r\n // g.lineTo(xc, h - pVal);\r\n // g.closePath();\r\n // g.stroke();\r\n //\r\n // }\r\n\r\n private drawLevelLines(g: CanvasRenderingContext2D, x: number, h: number, dbVals: Array<number>) {\r\n //translate to viewport\r\n let xc = x - this.ce.scrollLeft;\r\n this.drawLevelBackground(g,xc,h);\r\n\r\n let chH = Math.floor(h / dbVals.length);\r\n g.lineWidth = LINE_WIDTH;\r\n for (let ch = 0; ch < dbVals.length; ch++) {\r\n let dbVal = dbVals[ch];\r\n\r\n let y = Math.floor(ch * chH);\r\n if (dbVal >= this.warnDBLevel) {\r\n g.strokeStyle = 'red';\r\n g.fillStyle = 'red';\r\n } else if(dbVal < CONSIDERED_SILENCE_DB_LEVEL) {\r\n g.strokeStyle='grey';\r\n g.fillStyle='grey'\r\n } else{\r\n g.strokeStyle = '#00c853';\r\n g.fillStyle = '#00c853'\r\n }\r\n g.beginPath();\r\n g.moveTo(xc, y + chH);\r\n g.lineTo(xc, y + chH - LEVEL_INDICATOR_HEIGHT);\r\n let pnVal=((dbVal - MIN_DB_LEVEL) / -MIN_DB_LEVEL);\r\n let lvlIndicatorSpace=LEVEL_INDICATOR_HEIGHT+LINE_DISTANCE;\r\n let levelH=chH-lvlIndicatorSpace;\r\n let pVal = pnVal * levelH;\r\n if(pVal>levelH-1){\r\n pVal=levelH-1\r\n }else if(pVal<0){\r\n pVal=0\r\n }\r\n g.moveTo(xc, y + chH - lvlIndicatorSpace );\r\n g.lineTo(xc, y + chH - lvlIndicatorSpace - pVal);\r\n g.closePath();\r\n g.stroke();\r\n }\r\n }\r\n\r\n private drawPushValue(x: number, dbVals: Array<number>) {\r\n\r\n if (this.liveLevelCanvas) {\r\n let h = this.liveLevelCanvas.height;\r\n let g = this.liveLevelCanvas.getContext(\"2d\");\r\n if (g) {\r\n this.drawLevelLines(g, x, h, dbVals);\r\n }\r\n }\r\n }\r\n\r\n private drawAll() {\r\n if (this.liveLevelCanvas) {\r\n let w = this.liveLevelCanvas.width;\r\n let h = this.liveLevelCanvas.height;\r\n let g = this.liveLevelCanvas.getContext(\"2d\");\r\n if (g) {\r\n // clear canvas\r\n g.fillStyle = 'grey';\r\n g.fillRect(0, 0, w, h);\r\n\r\n g.lineWidth = LINE_WIDTH;\r\n\r\n if (this.dbValues.length > 0) {\r\n // draw only viewport part:\r\n\r\n // draw from x1 to x2\r\n let x1 = this.ce.scrollLeft;\r\n let x2 = x1 + this.ce.offsetWidth;\r\n\r\n // corresponds to this level values:\r\n let i1 = Math.floor(x1 / (LINE_DISTANCE + LINE_WIDTH));\r\n let i2 = Math.ceil(x2 / (LINE_DISTANCE + LINE_WIDTH));\r\n // some values around\r\n i1 -= 2;\r\n i2 += 2;\r\n // limits\r\n if (i1 < 0) {\r\n i1 = 0;\r\n }\r\n if (i2 > this.dbValues.length) {\r\n i2 = this.dbValues.length;\r\n }\r\n\r\n var c=0;\r\n for (let i = i1; i < i2; i++) {\r\n let x = i * (LINE_DISTANCE + LINE_WIDTH);\r\n let dbVals = this.dbValues[i];\r\n if (dbVals) {\r\n this.drawLevelLines(g, x, h, dbVals);\r\n c++;\r\n }\r\n\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n\r\n private framesPerPixel(): number | null {\r\n // one buffer\r\n if (this._staticLevelInfos) {\r\n let framesPerBuffer = this._staticLevelInfos.framesPerBuffer();\r\n let pixelsPerBuffer = LINE_DISTANCE + LINE_WIDTH;\r\n\r\n return framesPerBuffer / pixelsPerBuffer;\r\n }\r\n return null;\r\n }\r\n\r\n\r\n private drawPlayPosition() {\r\n if (this.markerCanvas) {\r\n let w = this.markerCanvas.width;\r\n let h = this.markerCanvas.height;\r\n let g = this.markerCanvas.getContext(\"2d\");\r\n if (g) {\r\n g.clearRect(0, 0, w, h);\r\n let framesPerPixel = this.framesPerPixel();\r\n if (framesPerPixel && this._playFramePosition) {\r\n let x = this._playFramePosition / framesPerPixel;\r\n\r\n // Get position in viewport\r\n let xc = x - this.ce.scrollLeft;\r\n // Only draw if inside marker (viewport) canvas\r\n if(xc>=0 && xc<=w) {\r\n g.fillStyle = 'red';\r\n g.strokeStyle = 'red';\r\n g.lineWidth = LINE_WIDTH;\r\n g.beginPath();\r\n // paint over all channels\r\n g.moveTo(xc, 0);\r\n g.lineTo(xc, h);\r\n g.closePath();\r\n g.stroke();\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnDestroy, Output,\r\n ViewChild\r\n} from \"@angular/core\"\r\nimport {LevelInfo, LevelInfos, LevelListener} from \"../audio/dsp/level_measure\";\r\nimport {LevelBar} from \"../audio/ui/livelevel\";\r\nimport {Action} from \"../action/action\";\r\n\r\n\r\nexport const MIN_DB_LEVEL = -40.0;\r\nexport const DEFAULT_WARN_DB_LEVEL = -2;\r\n\r\n@Component({\r\n selector: 'spr-recordingitemcontrols',\r\n template: `\r\n <button matTooltip=\"Start playback\" (click)=\"playStartAction?.perform()\"\r\n [disabled]=\"playStartAction?.disabled\"\r\n [style.color]=\"playStartAction?.disabled ? 'grey' : 'green'\">\r\n <mat-icon>play_arrow</mat-icon>\r\n </button>\r\n <button matTooltip=\"Stop playback\" (click)=\"playStopAction?.perform()\"\r\n [disabled]=\"playStopAction?.disabled\"\r\n [style.color]=\"playStopAction?.disabled ? 'grey' : 'yellow'\">\r\n <mat-icon>stop</mat-icon>\r\n </button>\r\n <button fxHide.xs matTooltip=\"Toggle detailed audio display\" [disabled]=\"!audioLoaded\"\r\n (click)=\"showRecordingDetails()\">\r\n <mat-icon>{{(audioSignalCollapsed) ? \"expand_less\" : \"expand_more\"}}</mat-icon>\r\n </button>\r\n <button matTooltip=\"Download current recording\" *ngIf=\"enableDownload\" [disabled]=\"!audioLoaded\"\r\n (click)=\"downloadRecording()\">\r\n <mat-icon>file_download</mat-icon>\r\n </button>\r\n <div style=\"min-width: 14ch;padding:2px\"><table style=\"border-style: none\"><tr><td>Peak:</td><td><span matTooltip=\"Peak level\"\r\n [style.color]=\"(peakDbLvl > warnDbLevel)?'red':'black'\">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>\r\n <tr *ngIf=\"_agc\"><td>AGC:</td><td><span matTooltip=\"Auto gain control\">{{agcString}}</span></td></tr></table></div>\r\n `,\r\n styles: [`:host {\r\n flex: 0; /* only required vertical space */\r\n width: 100%;\r\n background: darkgray;\r\n padding: 4px;\r\n box-sizing: border-box;\r\n height: 100%;\r\n\r\n display: flex; /* flex container: left level bar, right decimal peak level value */\r\n flex-direction: row;\r\n flex-wrap: nowrap; /* wrap could completely destroy the layout */\r\n }`, `span {\r\n flex: 0;\r\n font-weight: bold;\r\n display: inline-block;\r\n white-space: nowrap;\r\n box-sizing: border-box;\r\n }`]\r\n\r\n})\r\nexport class RecordingItemControls implements OnDestroy {\r\n\r\n ce: HTMLDivElement|null=null;\r\n @Input() audioSignalCollapsed: boolean=true;\r\n private _displayAudioBuffer: AudioBuffer | null|undefined;\r\n @Input() enableDownload: boolean=false;\r\n\r\n @Input() peakDbLvl = MIN_DB_LEVEL;\r\n\r\n _displayLevelInfos: LevelInfos | null=null;\r\n\r\n _agc:boolean|null|undefined=undefined;\r\n agcString='n/a';\r\n\r\n @Input() set agc(agc:boolean|null|undefined){\r\n this._agc=agc;\r\n if(this._agc===undefined || this._agc===null){\r\n this.agcString='n/a';\r\n }else{\r\n if(this._agc===true){\r\n this.agcString='On';\r\n }else{\r\n this.agcString='Off';\r\n }\r\n }\r\n }\r\n\r\n @Output() onShowRecordingDetails: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() onDownloadRecording: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n @Input() audioLoaded=false;\r\n //@Input() controlAudioPlayer: AudioPlayer;\r\n @Input() playStartAction:Action<void>|undefined;\r\n @Input() playStopAction:Action<void>|undefined;\r\n playStartEnabled = false;\r\n playStopEnabled = false;\r\n private updateTimerId: number|null=null;\r\n\r\n private destroyed = false;\r\n\r\n warnDbLevel = DEFAULT_WARN_DB_LEVEL;\r\n\r\n constructor(private ref: ElementRef, private changeDetectorRef: ChangeDetectorRef) {\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroyed = true;\r\n }\r\n\r\n showRecordingDetails() {\r\n this.onShowRecordingDetails.emit();\r\n }\r\n\r\n downloadRecording() {\r\n this.onDownloadRecording.emit();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.ce = this.ref.nativeElement;\r\n }\r\n\r\n @Input()\r\n set displayLevelInfos(levelInfos: LevelInfos | null) {\r\n this._displayLevelInfos = levelInfos;\r\n }\r\n\r\n error() {\r\n // this.status = 'ERROR';\r\n }\r\n\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'spr-recordingitemdisplay',\r\n template: `\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" [ngStyle]=\"{'height.px':100,'min-height.px': 100}\" [ngStyle.xs]=\"{'height.px':125,'min-height.px': 125}\">\r\n <audio-levelbar fxFlex=\"1 0 1\" [streamingMode]=\"streamingMode\" [displayLevelInfos]=\"_displayLevelInfos\"></audio-levelbar>\r\n <spr-recordingitemcontrols fxFlex=\"0 0 0\" [audioLoaded]=\"displayAudioBuffer!==null\" [playStartAction]=\"playStartAction\" [playStopAction]=\"playStopAction\" [peakDbLvl]=\"peakDbLvl\" [agc]=\"_agc\" (onShowRecordingDetails)=\"onShowRecordingDetails.emit()\"></spr-recordingitemcontrols>\r\n </div>\r\n `,\r\n styles: [`div {\r\n width: 100%;\r\n background: darkgray;\r\n padding: 4px;\r\n box-sizing: border-box;\r\n flex-wrap: nowrap; /* wrap could completely destroy the layout */\r\n }`, `audio-levelbar {\r\n box-sizing: border-box;\r\n }`]\r\n\r\n})\r\nexport class RecordingItemDisplay implements LevelListener, OnDestroy {\r\n\r\n ce: HTMLDivElement|null=null;\r\n @ViewChild(LevelBar, { static: true }) liveLevel!: LevelBar;\r\n @Input() streamingMode: boolean=false;\r\n @Input() audioSignalCollapsed: boolean=true;\r\n private _displayAudioBuffer: AudioBuffer | null|undefined;\r\n @Input() enableDownload: boolean=false;\r\n\r\n peakDbLvl = MIN_DB_LEVEL;\r\n\r\n _displayLevelInfos: LevelInfos | null=null;\r\n\r\n _agc:boolean|null|undefined=undefined;\r\n agcString='n/a';\r\n\r\n @Input() set agc(agc:boolean|null|undefined){\r\n this._agc=agc;\r\n }\r\n\r\n @Output() onShowRecordingDetails: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() onDownloadRecording: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n //@Input() controlAudioPlayer: AudioPlayer;\r\n @Input() playStartAction:Action<void>|undefined;\r\n @Input() playStopAction:Action<void>|undefined;\r\n playStartEnabled = false;\r\n playStopEnabled = false;\r\n private updateTimerId: number|null=null;\r\n\r\n private destroyed = false;\r\n\r\n warnDbLevel = DEFAULT_WARN_DB_LEVEL;\r\n\r\n constructor(private ref: ElementRef, private changeDetectorRef: ChangeDetectorRef) {\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroyed = true;\r\n }\r\n\r\n\r\n @Input()\r\n set displayAudioBuffer(displayAudioBuffer: AudioBuffer | null| undefined) {\r\n this._displayAudioBuffer = displayAudioBuffer;\r\n }\r\n\r\n get displayAudioBuffer() {\r\n return this._displayAudioBuffer;\r\n }\r\n\r\n showRecordingDetails() {\r\n this.onShowRecordingDetails.emit();\r\n }\r\n\r\n downloadRecording() {\r\n this.onDownloadRecording.emit();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.ce = this.ref.nativeElement;\r\n //this.controlAudioPlayer.listener=this;\r\n }\r\n\r\n @Input()\r\n set displayLevelInfos(levelInfos: LevelInfos | null) {\r\n this._displayLevelInfos = levelInfos;\r\n }\r\n\r\n set channelCount(channelCount: number) {\r\n this.reset();\r\n this.liveLevel.channelCount = channelCount;\r\n }\r\n\r\n set playFramePosition(playFramePosition: number) {\r\n this.liveLevel.playFramePosition=playFramePosition;\r\n }\r\n\r\n update(levelInfo: LevelInfo, peakLevelInfo: LevelInfo) {\r\n let peakDBVal = levelInfo.powerLevelDB();\r\n if (this.peakDbLvl < peakDBVal) {\r\n this.peakDbLvl = peakDBVal;\r\n // the event comes from outside of an Angular zone\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n this.liveLevel.update(levelInfo);\r\n }\r\n\r\n error() {\r\n // this.status = 'ERROR';\r\n }\r\n\r\n streamFinished() {\r\n this.liveLevel.streamFinished();\r\n }\r\n\r\n reset() {\r\n this.peakDbLvl = MIN_DB_LEVEL;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n\r\n}\r\n","\n export class DSPUtils {\n\n private static OCTAVE_FACTOR: number = 1.0 / (Math.log(2) / Math.log(10));\n\n /**\n * Get normalized amplitude level in dB\n * @param linearLevel a normalized positive linear level (1.0 corresponds to 0dB)\n * @return level in dB\n */\n public static toLevelInDB(linearLevel: number): number {\n if (linearLevel < 0) {\n throw new RangeError('Linear level argument must be positive.');\n }\n\n return 10 * Math.log(linearLevel) / Math.log(10);\n }\n\n\n public static toLinearLevel(dbLevel: number): number {\n return Math.pow(10, (dbLevel / 10));\n }\n\n /**\n * Get normalized amplitude power level in dB\n * @param linearLevel a normalized positive linear level (1.0 corresponds to 0dB)\n * @return power level in dB\n */\n public static toPowerLevelInDB(linearLevel: number): number {\n if (linearLevel < 0) {\n throw new RangeError('Linear level argument must be positive.');\n }\n return 20 * Math.log(linearLevel) / Math.log(10);\n }\n\n public static toPowerLinearLevel(dbLevel: number): number {\n return Math.pow(10, (dbLevel / 20));\n }\n\n public static toOctaves(fq: number): number {\n return DSPUtils.OCTAVE_FACTOR * Math.log(fq) / Math.log(10);\n }\n\n public static maxLevel(audioBuffer: AudioBuffer): number {\n let ml = 0.0;\n for (let ch = 0; ch < audioBuffer.numberOfChannels; ch++) {\n const chArr = audioBuffer.getChannelData(ch);\n for (let s = 0; s < chArr.length; s++) {\n const l = Math.abs(chArr[s]);\n if (l > ml) {\n ml = l;\n }\n }\n }\n return ml;\n }\n\n }\n","import {DSPUtils} from \"../../dsp/utils\";\r\nimport {SequenceAudioFloat32OutStream} from \"../io/stream\";\r\nimport {Arrays, WorkerHelper} from \"../../utils/utils\";\r\n\r\nexport const MIN_DB_LEVEL = -40.0;\r\n\r\n\r\n\r\nexport class LevelInfo {\r\n\r\n private readonly _minLinLevels: Array<number>;\r\n private readonly _maxLinLevels: Array<number>;\r\n\r\n constructor(public readonly channelCount: number,\r\n public startFrame: number = 0,\r\n public frameLength: number = 0,\r\n minLinLevels?: Array<number>,\r\n maxLinLevels?: Array<number>) {\r\n this._minLinLevels = this.checkOrInitArray(minLinLevels);\r\n this._maxLinLevels = this.checkOrInitArray(maxLinLevels);\r\n }\r\n\r\n get minLinLevels() {\r\n return this._minLinLevels;\r\n }\r\n\r\n get maxLinLevels() {\r\n return this._maxLinLevels;\r\n }\r\n\r\n private checkOrInitArray(arr: Array<number> | undefined): Array<number> {\r\n if (arr) {\r\n if (arr.length !== this.channelCount)\r\n throw new Error(\"Level arrays must be equal to channel count \" + this.channelCount);\r\n return arr;\r\n } else {\r\n return new Array<number>(this.channelCount)\r\n }\r\n }\r\n\r\n merge(levelInfo: LevelInfo) {\r\n if (levelInfo === null) {\r\n return;\r\n }\r\n if (this.channelCount !== levelInfo.channelCount) {\r\n throw new Error(\"Channel count of level info to merge must be equal. (\" + this.channelCount + \" != \" + levelInfo.channelCount + \")\");\r\n }\r\n\r\n let endFrame = this.startFrame + this.frameLength;\r\n let mergeEndFrame = levelInfo.startFrame + levelInfo.frameLength;\r\n\r\n if (levelInfo.startFrame < this.startFrame) {\r\n this.startFrame = levelInfo.startFrame;\r\n }\r\n\r\n if (mergeEndFrame > endFrame) {\r\n this.frameLength = mergeEndFrame - this.startFrame;\r\n }\r\n\r\n for (let ch = 0; ch < this.channelCount; ch++) {\r\n\r\n if (levelInfo.minLinLevels[ch] < this.minLinLevels[ch]) {\r\n this.minLinLevels[ch] = levelInfo.minLinLevels[ch];\r\n }\r\n if (levelInfo.maxLinLevels[ch] > this.maxLinLevels[ch]) {\r\n this.maxLinLevels[ch] = levelInfo.maxLinLevels[ch];\r\n }\r\n }\r\n }\r\n\r\n levelsLin(): Array<number> {\r\n let lvlsLin = new Array<number>(this.channelCount);\r\n for (let ch = 0; ch < this.channelCount; ch++) {\r\n lvlsLin[ch] = Math.max(Math.abs(this.minLinLevels[ch]), Math.abs(this.maxLinLevels[ch]));\r\n }\r\n return lvlsLin;\r\n }\r\n\r\n powerLevelsDB(): Array<number> {\r\n let lvlsDb = new Array<number>(this.channelCount);\r\n for (let ch = 0; ch < this.channelCount; ch++) {\r\n lvlsDb[ch] = DSPUtils.toPowerLevelInDB(this.levelsLin()[ch]);\r\n }\r\n return lvlsDb;\r\n }\r\n\r\n powerLevelDB(): number {\r\n let pLvlsDb = this.powerLevelsDB();\r\n return Math.max(...pLvlsDb);\r\n }\r\n\r\n clone(): LevelInfo {\r\n return new LevelInfo(this.channelCount, this.startFrame, this.frameLength, Arrays.cloneNumberArray(this.minLinLevels),\r\n Arrays.cloneNumberArray(this.maxLinLevels));\r\n }\r\n}\r\n\r\nexport class LevelInfos {\r\n constructor(public readonly bufferLevelInfos: Array<LevelInfo>, public readonly peakLevelInfo: LevelInfo) {\r\n }\r\n\r\n framesPerBuffer():number{\r\n if(this.bufferLevelInfos.length>0){\r\n return this.bufferLevelInfos[0].frameLength;\r\n }\r\n return this.peakLevelInfo.frameLength/this.bufferLevelInfos.length;\r\n }\r\n}\r\n\r\n\r\nexport interface LevelListener {\r\n channelCount: number;\r\n\r\n update(levelInfo: LevelInfo, peakLevelInfo: LevelInfo): void;\r\n\r\n streamFinished(): void;\r\n\r\n reset(): void;\r\n}\r\n\r\nexport interface PeakLevelListener {\r\n update(peakLevel:number): void;\r\n}\r\n\r\nexport interface PeakLevelListener {\r\n\r\n update(levelInfo: LevelInfo, peakLevelInfo: LevelInfo): void;\r\n\r\n streamFinished(): void;\r\n\r\n reset(): void;\r\n}\r\n\r\nexport class PeakLevelInterceptor implements LevelListener{\r\n get peakDbLvl(): number {\r\n return this._peakDbLvl;\r\n }\r\n get channelCount(): number {\r\n return this._channelCount;\r\n }\r\n\r\n set channelCount(value: number) {\r\n this._channelCount = value;\r\n if(this.levelListener){\r\n this.levelListener.channelCount=value;\r\n }\r\n }\r\n\r\n private _channelCount: number=0;\r\n\r\n private _peakDbLvl = MIN_DB_LEVEL;\r\n\r\n\r\n\r\n constructor(private levelListener?:LevelListener) {}\r\n\r\n update(levelInfo: LevelInfo, peakLevelInfo: LevelInfo): void{\r\n let peakDBVal = levelInfo.powerLevelDB();\r\n if (this.peakDbLvl < peakDBVal) {\r\n this._peakDbLvl = peakDBVal;\r\n }\r\n }\r\n\r\n streamFinished(): void{\r\n if(this.levelListener){\r\n this.levelListener.streamFinished();\r\n }\r\n }\r\n\r\n reset(): void{\r\n this._peakDbLvl = MIN_DB_LEVEL;\r\n if(this.levelListener){\r\n this.levelListener.reset();\r\n }\r\n }\r\n}\r\n\r\ndeclare function postMessage(message: any, transfer?: Array<any>): void;\r\n\r\n\r\nexport class LevelMeasure {\r\n\r\n private readonly workerURL: string;\r\n private worker: Worker|null=null;\r\n\r\n constructor() {\r\n this.workerURL = WorkerHelper.buildWorkerBlobURL(this.workerFunction)\r\n }\r\n\r\n calcBufferLevelInfos(audioBuffer: AudioBuffer, bufferTimeLength: number): Promise<LevelInfos> {\r\n return new Promise<LevelInfos>((resolve)=>{\r\n let chs = audioBuffer.numberOfChannels;\r\n let bufferFrameLength=Math.round(audioBuffer.sampleRate*bufferTimeLength);\r\n let buffers = new Array<any>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n let adCh=audioBuffer.getChannelData(ch);\r\n let adChCopy=new Float32Array(adCh.length);\r\n adChCopy.set(adCh);\r\n buffers[ch] = adChCopy.buffer;\r\n }\r\n\r\n this.worker = new Worker(this.workerURL);\r\n this.worker.onmessage = (me) => {\r\n\r\n let linLevelArrs=new Array<Float32Array>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n linLevelArrs[ch] = new Float32Array(me.data.linLevelBuffers[ch]);\r\n }\r\n\r\n let bufferCount=Math.ceil(me.data.frameLength/me.data.bufferFrameLength);\r\n let framePos=0;\r\n let bufferLevelInfos=new Array<LevelInfo>();\r\n let peakLevelInfo=new LevelInfo(chs);\r\n for(let bi=0;bi<bufferCount;bi++) {\r\n let minLevels = new Array<number>(chs);\r\n let maxLevels = new Array<number>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n let linLvlArrPos=bi*2;\r\n minLevels[ch]=linLevelArrs[ch][linLvlArrPos];\r\n maxLevels[ch]=linLevelArrs[ch][linLvlArrPos+1];\r\n }\r\n let bli = new LevelInfo(chs, framePos, me.data.bufferFrameLength, minLevels, maxLevels);\r\n bufferLevelInfos.push(bli);\r\n peakLevelInfo.merge(bli);\r\n }\r\n this.terminateWorker();\r\n resolve(new LevelInfos(bufferLevelInfos, peakLevelInfo));\r\n };\r\n\r\n this.worker.postMessage({bufferFrameLength:bufferFrameLength,audioData: buffers, chs: chs}, buffers);\r\n\r\n });\r\n\r\n }\r\n\r\n\r\n private terminateWorker() {\r\n this.worker?.terminate();\r\n\r\n }\r\n\r\n /*\r\n * Method used as worker code.\r\n */\r\n workerFunction() {\r\n self.onmessage = function (msg:MessageEvent) {\r\n\r\n let chs = msg.data.chs;\r\n let bufferFrameLength = msg.data.bufferFrameLength;\r\n\r\n let audioData = new Array<Float32Array>(chs);\r\n let linLevels = new Array<Float32Array>(chs);\r\n\r\n for (let ch = 0; ch < chs; ch++) {\r\n audioData[ch] = new Float32Array(msg.data.audioData[ch]);\r\n }\r\n let frameLength = audioData[0].length;\r\n let bufferCount=Math.ceil(frameLength/bufferFrameLength);\r\n for (let ch = 0; ch < chs; ch++) {\r\n linLevels[ch] = new Float32Array(bufferCount*2);\r\n }\r\n if (audioData && chs > 0) {\r\n for (let ch = 0; ch < chs; ch++) {\r\n let chData = audioData[ch];\r\n\r\n for (let s = 0; s < frameLength; s++) {\r\n let bi = Math.floor(s / bufferFrameLength);\r\n let lvlArrPos = bi * 2;\r\n //let bs = s % bufferFrameLength;\r\n let chSample=chData[s];\r\n if (chSample < linLevels[ch][lvlArrPos]) {\r\n linLevels[ch][lvlArrPos] = chSample;\r\n }\r\n lvlArrPos++;\r\n if (chSample > linLevels[ch][lvlArrPos]) {\r\n linLevels[ch][lvlArrPos] = chSample;\r\n }\r\n }\r\n }\r\n const linLevelBufs = new Array<any>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n linLevelBufs[ch] = linLevels[ch].buffer;\r\n }\r\n postMessage({bufferFrameLength:bufferFrameLength,frameLength:frameLength,linLevelBuffers: linLevelBufs}, linLevelBufs);\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\nexport class StreamLevelMeasure implements SequenceAudioFloat32OutStream {\r\n\r\n currentLevelInfos: LevelInfo|null=null;\r\n peakLevelInfo: LevelInfo|null=null;\r\n\r\n private readonly workerURL: string;\r\n private worker: Worker|null=null;\r\n private channelCount: number=0;\r\n private bufferIndex: number = 0;\r\n private frameCount: number = 0;\r\n\r\n levelListener: LevelListener|null=null;\r\n peakLevelListener: ((peakLvlInDb:number)=>void)|null=null;\r\n private peakLevelInDb:number=MIN_DB_LEVEL;\r\n\r\n constructor() {\r\n this.workerURL = WorkerHelper.buildWorkerBlobURL(this.workerFunction)\r\n }\r\n\r\n setFormat(channels: number, sampleRate: number) {\r\n this.channelCount = channels;\r\n this.currentLevelInfos = new LevelInfo(this.channelCount);\r\n this.peakLevelInfo = new LevelInfo(this.channelCount);\r\n this.worker = new Worker(this.workerURL);\r\n this.worker.onmessage = (me) => {\r\n let streamFinished = me.data.streamFinished;\r\n if (streamFinished) {\r\n if (this.levelListener) {\r\n this.levelListener.streamFinished()\r\n }\r\n } else {\r\n\r\n let minLevels = new Array<number>(this.channelCount);\r\n let maxLevels = new Array<number>(this.channelCount);\r\n for (let ch = 0; ch < this.channelCount; ch++) {\r\n let fls = new Float32Array(me.data.linLevelBuffers[ch]);\r\n minLevels[ch] = fls[0];\r\n maxLevels[ch] = fls[1];\r\n }\r\n let bi = new LevelInfo(this.channelCount, this.frameCount, me.data.fraemLength, minLevels, maxLevels);\r\n this.updateLevels(bi);\r\n }\r\n }\r\n }\r\n\r\n\r\n nextStream() {\r\n this.reset();\r\n }\r\n\r\n private reset() {\r\n this.currentLevelInfos = new LevelInfo(this.channelCount);\r\n this.peakLevelInfo = new LevelInfo(this.channelCount);\r\n if (this.levelListener) {\r\n this.levelListener.reset();\r\n this.levelListener.channelCount = this.channelCount;\r\n }\r\n if (this.peakLevelListener) {\r\n this.peakLevelInDb=MIN_DB_LEVEL;\r\n this.peakLevelListener(this.peakLevelInDb);\r\n }\r\n }\r\n\r\n write(bufferData: Array<Float32Array>): number {\r\n let bufArrCopies = new Array<Float32Array>(bufferData.length);\r\n let buffers = new Array<any>(bufferData.length);\r\n for (let ch = 0; ch < bufferData.length; ch++) {\r\n bufArrCopies[ch] = bufferData[ch].slice();\r\n buffers[ch] = bufArrCopies[ch].buffer;\r\n }\r\n this.worker?.postMessage({\r\n streamFinished: false,\r\n audioData: buffers,\r\n chs: this.channelCount,\r\n bufferIndex: this.bufferIndex\r\n }, buffers);\r\n this.bufferIndex++;\r\n return bufArrCopies[0].length;\r\n }\r\n\r\n flush() {\r\n this.worker?.postMessage({streamFinished: true});\r\n\r\n }\r\n\r\n close() {\r\n this.worker?.terminate();\r\n }\r\n\r\n /*\r\n * Method used as worker code.\r\n */\r\n workerFunction() {\r\n self.onmessage = function (msg:MessageEvent) {\r\n let streamFinished = msg.data.streamFinished;\r\n if (streamFinished) {\r\n postMessage({streamFinished: true});\r\n } else {\r\n let chs = msg.data.chs;\r\n let frameLength = null;\r\n let audioData = new Array<Float32Array>(chs);\r\n let linLevels = new Array<Float32Array>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n linLevels[ch] = new Float32Array(2);\r\n audioData[ch] = new Float32Array(msg.data.audioData[ch]);\r\n }\r\n\r\n if (audioData) {\r\n for (let ch = 0; ch < chs; ch++) {\r\n let chData = audioData[ch];\r\n if (frameLength === null) {\r\n frameLength = chData.length;\r\n }\r\n for (let s = 0; s < frameLength; s++) {\r\n let chSample=chData[s];\r\n if (chSample < linLevels[ch][0]) {\r\n linLevels[ch][0] = chSample;\r\n }\r\n if (chSample > linLevels[ch][1]) {\r\n linLevels[ch][1] = chSample;\r\n }\r\n }\r\n }\r\n }\r\n let linLevelBufs = new Array<any>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n linLevelBufs[ch] = linLevels[ch].buffer;\r\n }\r\n postMessage({streamFinished: false, frameLength: frameLength, linLevelBuffers: linLevelBufs}, linLevelBufs);\r\n }\r\n }\r\n }\r\n\r\n updateLevels(bufferLevelInfo: LevelInfo) {\r\n\r\n this.currentLevelInfos = bufferLevelInfo;\r\n if(this.peakLevelInfo) {\r\n this.peakLevelInfo.merge(bufferLevelInfo);\r\n if (this.levelListener) {\r\n this.levelListener.update(this.currentLevelInfos, this.peakLevelInfo.clone());\r\n }\r\n if(this.peakLevelListener){\r\n let peakDBVal = bufferLevelInfo.powerLevelDB();\r\n if (this.peakLevelInDb < peakDBVal) {\r\n this.peakLevelInDb = peakDBVal;\r\n // the event comes from outside of an Angular zone\r\n this.peakLevelListener(this.peakLevelInDb);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n stop() {\r\n this.worker?.terminate();\r\n }\r\n\r\n\r\n}\r\n","import {Component,Input} from '@angular/core'\r\nimport {StartStopSignal, State} from '../startstopsignal'\r\n\r\n@Component({\r\n\r\n selector: 'app-simpletrafficlight',\r\n\r\n template: `\r\n\r\n <div>\r\n <div class=\"circle {{lighttop}}\"></div>\r\n <div class=\"circle {{lightmid}}\"></div>\r\n <div class=\"circle {{lightbottom}}\"></div>\r\n </div>\r\n `\r\n ,\r\n styles: [`.circle {\r\n width: 50px;\r\n height: 50px;\r\n border-radius: 50%;\r\n margin: 5px;\r\n background: grey;\r\n }`, `.red {\r\n background: red;\r\n }\r\n `, `\r\n .yellow {\r\n background: yellow;\r\n }\r\n `, `\r\n .green {\r\n background: green;\r\n }\r\n `, `\r\n .black {\r\n background: black;\r\n }`,\r\n `:host {\r\n display: flex;\r\n flex-direction: column;\r\n background: black;\r\n \r\n padding: 2px;\r\n height: 170px;\r\n max-height: 170px;\r\n flex: 0 0 content;\r\n }\r\n `]\r\n})\r\nexport class SimpleTrafficLight implements StartStopSignal {\r\n\r\n lighttop!: string;\r\n lightmid!: string;\r\n lightbottom!: string;\r\n\r\n constructor() {\r\n this.status=State.OFF;\r\n }\r\n\r\n @Input()\r\n set status(status: State) {\r\n if (State.OFF === status) {\r\n this.lighttop = 'grey';\r\n this.lightmid = 'grey';\r\n this.lightbottom = 'grey';\r\n } else if (State.IDLE === status) {\r\n this.lighttop = 'red';\r\n this.lightmid = 'grey';\r\n this.lightbottom = 'grey';\r\n } else if (State.PRERECORDING == status) {\r\n this.lighttop = 'red';\r\n this.lightmid = 'yellow';\r\n this.lightbottom = 'grey';\r\n } else if (State.RECORDING == status) {\r\n this.lighttop = 'grey';\r\n this.lightmid = 'grey';\r\n this.lightbottom = 'green';\r\n } else if (State.POSTRECORDING == status) {\r\n this.lighttop = 'grey';\r\n this.lightmid = 'yellow';\r\n this.lightbottom = 'grey';\r\n }\r\n }\r\n}\r\n\r\n\r\n","export class Position{\r\n constructor(public left:number,public top:number){\r\n\r\n }\r\n toString():string{\r\n return this.left+\",\"+this.top\r\n }\r\n}\r\n\r\n\r\nexport class Dimension {\r\n constructor(public width:number,public height:number){\r\n\r\n }\r\n toString():string{\r\n return this.width+\"x\"+this.height\r\n }\r\n}\r\n\r\n\r\nexport class Rectangle{\r\n\r\n constructor(public position:Position,public dimension:Dimension){\r\n\r\n }\r\n toString():string{\r\n return this.position+\":\"+this.dimension\r\n }\r\n}\r\n","import {Position,Dimension, Rectangle} from \"../math/2d/geometry\";\r\nimport { Directive } from \"@angular/core\";\r\n\r\n@Directive()\r\nexport abstract class CanvasLayerComponent{\r\n\r\n protected bounds:Rectangle|null=null;\r\n protected virtualDimension!:Dimension;\r\n protected canvasLayers:Array<HTMLCanvasElement>;\r\n\r\n constructor(){\r\n\r\n // TODO make clear that first element is background canvas\r\n this.canvasLayers=new Array<HTMLCanvasElement>();\r\n }\r\n\r\n toXViewPortPixelPosition(virtualX:number){\r\n let pixelPos=virtualX;\r\n if(this.bounds){\r\n pixelPos=Math.round(virtualX-this.bounds.position.left);\r\n }\r\n return pixelPos;\r\n }\r\n\r\n toXVirtualPixelPosition(viewPortX:number){\r\n let pixelPos=viewPortX;\r\n if(this.bounds){\r\n pixelPos=Math.round(viewPortX+this.bounds.position.left);\r\n }\r\n return pixelPos;\r\n }\r\n\r\n toViewPortPosition(virtualPos:Position):Position{\r\n\r\n if(this.bounds){\r\n return new Position(virtualPos.left-this.bounds.position.left,virtualPos.top-this.bounds.position.top);\r\n }else{\r\n return virtualPos;\r\n }\r\n }\r\n\r\n\r\n}\r\n"," export class AudioClip {\r\n private _buffer: AudioBuffer;\r\n private _selection:Selection|null=null;\r\n private selectionObservers:Array<(audioClip:AudioClip)=>void>;\r\n\r\n constructor(buffer: AudioBuffer) {\r\n this.selectionObservers=new Array<(audioClip:AudioClip)=>void>()\r\n this._buffer = buffer;\r\n }\r\n\r\n get buffer() {\r\n return this._buffer;\r\n };\r\n\r\n get selection(): Selection|null{\r\n return this._selection;\r\n }\r\n\r\n set selection(value: Selection|null) {\r\n this._selection = value;\r\n // let obsCnt=this.selectionObservers.length\r\n // this.selectionObservers.forEach((obs)=> {\r\n // console.log(\"Calling observer\")\r\n // obs(this)\r\n // });\r\n for(let selObs of this.selectionObservers){\r\n selObs(this)\r\n }\r\n }\r\n\r\n addSelectionObserver(selectionObserver:(audioClip:AudioClip)=>void,init=false){\r\n let obsAlreadyInList=this.selectionObservers.find((obs)=>(obs===selectionObserver))\r\n if(!obsAlreadyInList) {\r\n this.selectionObservers.push(selectionObserver)\r\n }\r\n if(init){\r\n selectionObserver(this)\r\n }\r\n }\r\n\r\n removeSelectionObserver(selectionObserver:(audioClip:AudioClip)=>void){\r\n this.selectionObservers=this.selectionObservers.filter((obs)=>{obs!==selectionObserver})\r\n }\r\n }\r\n\r\n export interface Reader {\r\n read(data: Blob): AudioClip;\r\n }\r\n export interface Writer {\r\n write(audioData: AudioClip): Blob;\r\n }\r\n\r\n export class Selection{\r\n private _sampleRate:number;\r\n private _startFrame:number;\r\n private _endFrame:number;\r\n\r\n constructor(sampleRate:number,startFrame:number,endFrame:number){\r\n this._sampleRate=sampleRate;\r\n this._startFrame=startFrame\r\n this._endFrame=endFrame;\r\n }\r\n\r\n get sampleRate(): number {\r\n return this._sampleRate;\r\n }\r\n get endFrame():number{\r\n return this._endFrame;\r\n }\r\n get startFrame(): number {\r\n return this._startFrame;\r\n }\r\n\r\n get leftFrame(): number {\r\n return (this._startFrame <= this._endFrame) ? this._startFrame : this._endFrame\r\n }\r\n get rightFrame(): number {\r\n return (this._startFrame <= this._endFrame) ? this._endFrame : this._startFrame\r\n }\r\n\r\n equals(otherSelection:Selection|null|undefined):boolean{\r\n if(otherSelection) {\r\n return (this._sampleRate == otherSelection._sampleRate && this._startFrame === otherSelection._startFrame && this._endFrame === otherSelection._endFrame);\r\n }\r\n return false;\r\n }\r\n\r\n toString(){\r\n return \"Selection: from: \"+this.leftFrame+\" to: \"+this.rightFrame+\" frame. Refers to sample rate :\"+this._sampleRate;\r\n }\r\n }\r\n\r\n\r\n","\r\n export class Point {\r\n constructor(private _x:number,private _y:number) {\r\n }\r\n get x():number{\r\n return this._x;\r\n }\r\n get y():number{\r\n return this._y;\r\n }\r\n }\r\n export class Marker {\r\n name: string|null=null;\r\n framePosition: number|null=null;\r\n\r\n }\r\n\r\n\r\n","import {CanvasLayerComponent} from \"../../ui/canvas_layer_comp\";\r\nimport {Selection} from '../persistor'\r\nimport { ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, Directive } from \"@angular/core\";\r\nimport {Marker} from \"./common\";\r\nimport {Dimension, Rectangle} from \"../../math/2d/geometry\";\r\n\r\n\r\nexport class ViewSelection{\r\n get startX(): number {\r\n return this._startX;\r\n }\r\n\r\n get endX(): number {\r\n return this._endX;\r\n }\r\n\r\n width():number{\r\n return this._endX-this._startX\r\n }\r\n\r\n constructor(private _startX:number, private _endX:number){}\r\n}\r\n\r\n@Directive()\r\nexport abstract class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {\r\n protected _audioData: AudioBuffer|null=null;\r\n protected _bgColor:string|null='white';\r\n protected _selectColor='rgba(0%,0%,100%,25%)';\r\n\r\n /**\r\n * Returns pixel position depending on current zoom setting.\r\n * @param framePos audio frame (sample) position\r\n */\r\n frameToXPixelPosition(framePos: number): number | null {\r\n let pixelPos=null;\r\n if (this._audioData && this._audioData.numberOfChannels > 0) {\r\n let ch0 = this._audioData.getChannelData(0);\r\n let frameLength = ch0.length;\r\n let vw;\r\n if(this.bounds) {\r\n vw = this.bounds.dimension.width;\r\n }\r\n if (this.virtualDimension) {\r\n vw = this.virtualDimension.width;\r\n }\r\n if(vw !== undefined) {\r\n pixelPos = framePos * vw / frameLength;\r\n }\r\n }\r\n return pixelPos;\r\n}\r\n\r\n /**\r\n * Returns pixel position in view port (visible window of scroll pane).\r\n * @param framePos audio frame (sample) position\r\n */\r\n frameToViewPortXPixelPosition(framePos: number): number | null {\r\n let pixelPos=this.frameToXPixelPosition(framePos);\r\n if(pixelPos!=null){\r\n let vPixelPos = this.toXViewPortPixelPosition(pixelPos);\r\n return vPixelPos;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n viewPortXPixelToFramePosition(xViewPortPixelPos: number): number | null {\r\n let vpXramePos=null;\r\n if (this._audioData && this._audioData.numberOfChannels > 0) {\r\n let ch0 = this._audioData.getChannelData(0);\r\n let frameLength = ch0.length;\r\n let vw;\r\n if (this.bounds) {\r\n vw= this.bounds.dimension.width;\r\n }\r\n if (this.virtualDimension) {\r\n vw = this.virtualDimension.width;\r\n }\r\n if(vw!== undefined) {\r\n let xVirtualPixelPos = this.toXVirtualPixelPosition(xViewPortPixelPos)\r\n let framesPerPixel = frameLength / vw;\r\n let framePos = framesPerPixel * xVirtualPixelPos;\r\n if (framePos < 0) {\r\n framePos = 0\r\n }\r\n if (framePos >= frameLength) {\r\n framePos = frameLength - 1\r\n }\r\n vpXramePos = Math.round(framePos);\r\n }\r\n }\r\n return vpXramePos;\r\n }\r\n\r\n layoutBounds(bounds:Rectangle, virtualDimension:Dimension,redraw: boolean) {\r\n\r\n this.bounds=bounds;\r\n this.virtualDimension=virtualDimension;\r\n //this.canvasLayers.forEach(cl=>{\r\n for(let ci=0;ci<this.canvasLayers.length;ci++) {\r\n let cl = this.canvasLayers[ci];\r\n const leftStyle=bounds.position.left+ 'px';\r\n const topStyle=bounds.position.top + 'px';\r\n cl.style.left = leftStyle;\r\n cl.style.top = topStyle;\r\n }\r\n if (bounds.dimension.width) {\r\n let intW=Math.round(bounds.dimension.width);\r\n if (redraw) {\r\n // Do not set width of background canvas (causes flicker on start render)\r\n for(let ci=1;ci<this.canvasLayers.length;ci++) {\r\n let cl = this.canvasLayers[ci];\r\n cl.width = intW;\r\n }\r\n }\r\n let wStr = intW.toString() + 'px';\r\n for(let ci=0;ci<this.canvasLayers.length;ci++) {\r\n let cl = this.canvasLayers[ci];\r\n cl.style.width = wStr;\r\n }\r\n }\r\n if (bounds.dimension.height) {\r\n let intH=Math.round(bounds.dimension.height)\r\n if (redraw) {\r\n // Do not set height of background canvas (causes flicker on start render)\r\n for(let ci=1;ci<this.canvasLayers.length;ci++) {\r\n let cl = this.canvasLayers[ci];\r\n cl.height = intH;\r\n }\r\n }\r\n let hStr = intH + 'px';\r\n for(let ci=0;ci<this.canvasLayers.length;ci++) {\r\n let cl = this.canvasLayers[ci];\r\n cl.style.height = hStr;\r\n }\r\n }\r\n //});\r\n\r\n\r\n }\r\n}\r\n\r\n@Directive()\r\nexport abstract class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {\r\n _pointerPosition:Marker|null=null;\r\n\r\n protected selectStartX:number|null=null;\r\n\r\n @ViewChild('bg', { static: true }) bgCanvasRef!: ElementRef;\r\n bgCanvas!: HTMLCanvasElement;\r\n\r\n @ViewChild('cursor', { static: true }) cursorCanvasRef!: ElementRef;\r\n cursorCanvas!: HTMLCanvasElement;\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n onMouseup(me: MouseEvent) {\r\n this.selectionCommit(me)\r\n }\r\n\r\n layoutBounds(bounds:Rectangle, virtualDimension:Dimension,redraw: boolean,clear:boolean=true) {\r\n super.layoutBounds(bounds,virtualDimension,redraw)\r\n if (redraw) {\r\n this.startDraw(clear);\r\n }\r\n }\r\n\r\n @Input() set pointerPosition(pointerPosition:Marker|null){\r\n this._pointerPosition=pointerPosition\r\n this.drawCursorLayer()\r\n }\r\n\r\n _selecting: Selection|null =null;\r\n @Input() set selecting(selecting:Selection| null){\r\n this._selecting=selecting\r\n this.drawBg()\r\n this.drawCursorLayer()\r\n }\r\n\r\n get selecting():Selection|null{\r\n return this._selecting\r\n }\r\n\r\n _selection: Selection|null =null\r\n @Input() set selection(selection:Selection|null){\r\n this._selection=selection;\r\n this.selecting=null;\r\n this.drawBg()\r\n this.drawCursorLayer()\r\n }\r\n\r\n get selection():Selection|null{\r\n return this._selection\r\n }\r\n\r\n selectionStart(me:MouseEvent){\r\n this.selectStartX=me.offsetX;\r\n }\r\n\r\n selectionCommit(me:MouseEvent){\r\n let vs:ViewSelection|null=null;\r\n if(this.selectStartX!=null) {\r\n vs=new ViewSelection(this.selectStartX,me.offsetX)\r\n this.selectStartX=null;\r\n this.select(vs);\r\n }\r\n }\r\n\r\n abstract startDraw(clear:boolean):void;\r\n\r\n updateCursorCanvas(me:MouseEvent,showCursorPosition=true){\r\n\r\n if (this.cursorCanvas) {\r\n\r\n let w = this.cursorCanvas.width;\r\n let h = this.cursorCanvas.height;\r\n let g = this.cursorCanvas.getContext(\"2d\");\r\n\r\n // if (!showCursorPosition) {\r\n // this.selectStartX = null\r\n // this.selectingChange(null)\r\n // }\r\n if (me) {\r\n if (this.selectStartX) {\r\n this.pointerPositionChanged(null)\r\n this.selectingChange(new ViewSelection(this.selectStartX, me.offsetX));\r\n } else {\r\n if (showCursorPosition) {\r\n this.pointerPositionChanged(me.offsetX)\r\n }else{\r\n this.pointerPositionChanged(null)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n @Output() pointerPositionEventEmitter = new EventEmitter<Marker>();\r\n @Output() selectingEventEmitter = new EventEmitter<Selection>();\r\n @Output() selectedEventEmitter = new EventEmitter<Selection>();\r\n\r\n\r\n pointerPositionChanged(xPosition:number| null){\r\n let pointerPosition:Marker|undefined=undefined;\r\n if(xPosition){\r\n pointerPosition=new Marker();\r\n let vpXPos=this.viewPortXPixelToFramePosition(xPosition);\r\n if(vpXPos!=null) {\r\n pointerPosition.framePosition =vpXPos;\r\n }\r\n }\r\n this.pointerPositionEventEmitter.emit(pointerPosition);\r\n }\r\n\r\n selectingChange(viewSel:ViewSelection| null){\r\n let ns:Selection|undefined=undefined;\r\n if(viewSel) {\r\n let frameStart = this.viewPortXPixelToFramePosition(viewSel.startX)\r\n let frameEnd = this.viewPortXPixelToFramePosition(viewSel.endX)\r\n if(this._audioData && frameStart!=null && frameEnd!=null) {\r\n ns = new Selection(this._audioData.sampleRate, frameStart, frameEnd);\r\n }\r\n }\r\n this.selectingEventEmitter.emit(ns)\r\n }\r\n\r\n select(viewSel:ViewSelection| null){\r\n let ns:Selection|undefined=undefined;\r\n if(viewSel) {\r\n let frameStart = this.viewPortXPixelToFramePosition(viewSel.startX)\r\n let frameEnd = this.viewPortXPixelToFramePosition(viewSel.endX)\r\n if(this._audioData && frameStart!=null && frameEnd!=null) {\r\n ns = new Selection(this._audioData.sampleRate, frameStart, frameEnd);\r\n }\r\n }\r\n this.selectedEventEmitter.emit(ns)\r\n }\r\n\r\n viewSelection():ViewSelection|null{\r\n let vs:ViewSelection|null=null;\r\n let s:Selection|null=null;\r\n if(this._selecting){\r\n s=this._selecting\r\n }else if(this._selection){\r\n s=this._selection\r\n }\r\n if(s){\r\n let sf=s.startFrame;\r\n let ef=s.endFrame;\r\n let xs=this.frameToViewPortXPixelPosition(sf)\r\n let xe=this.frameToViewPortXPixelPosition(ef)\r\n if(xs!=null && xe!=null) {\r\n vs = new ViewSelection(xs, xe)\r\n }\r\n }\r\n return vs;\r\n }\r\n\r\n\r\n drawBg(){\r\n if(this.bgCanvas && this.bounds) {\r\n this.bgCanvas.style.left = Math.round(this.bounds.position.left).toString() + 'px';\r\n this.bgCanvas.width = Math.round(this.bounds.dimension.width);\r\n this.bgCanvas.height = Math.round(this.bounds.dimension.height);\r\n let g1 = this.bgCanvas.getContext(\"2d\");\r\n if (g1) {\r\n let w = this.bgCanvas.width;\r\n let h = this.bgCanvas.height;\r\n g1.clearRect(0, 0, w, h);\r\n if(this._bgColor) {\r\n g1.fillStyle = this._bgColor;\r\n g1.fillRect(0, 0, w, h);\r\n }\r\n let vs = this.viewSelection()\r\n if (vs) {\r\n g1.fillStyle = this._selectColor;\r\n g1.fillRect(vs.startX, 0, vs.width(), h);\r\n }\r\n }\r\n }\r\n }\r\n drawCursorLayer(){\r\n if (this.cursorCanvas) {\r\n let w = this.cursorCanvas.width;\r\n let h = this.cursorCanvas.height;\r\n let g = this.cursorCanvas.getContext(\"2d\");\r\n if(g) {\r\n g.clearRect(0, 0, w, h);\r\n // let s:Selection=null;\r\n // if(this._selecting){\r\n // s=this._selecting\r\n // }else if(this._selection){\r\n // s=this._selection\r\n // }\r\n // if(s){\r\n // let sf=s.startFrame\r\n // let ef=s.endFrame\r\n // let xs=this.frameToViewPortXPixelPosition(sf)\r\n // let xe=this.frameToViewPortXPixelPosition(ef)\r\n // let sw=xe-xs\r\n // g.fillStyle = 'rgba(0%,0%,100%,25%)';\r\n // g.fillRect(xs,0,sw,h);\r\n // }\r\n\r\n if(this._pointerPosition){\r\n\r\n let framePos=this._pointerPosition.framePosition\r\n if(framePos) {\r\n let xViewPortPixelpos = this.frameToViewPortXPixelPosition(framePos)\r\n if (xViewPortPixelpos) {\r\n\r\n g.fillStyle = 'yellow';\r\n g.strokeStyle = 'yellow';\r\n g.beginPath();\r\n g.moveTo(xViewPortPixelpos, 0);\r\n g.lineTo(xViewPortPixelpos, h);\r\n g.closePath();\r\n\r\n g.stroke();\r\n\r\n if (this._audioData) {\r\n g.font = '14px sans-serif';\r\n g.fillStyle = 'yellow';\r\n g.fillText(framePos.toString(), xViewPortPixelpos + 2, 50);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n","import {Component, ViewChild, ElementRef} from '@angular/core';\r\nimport {AudioCanvasLayerComponent} from \"./audio_canvas_layer_comp\";\r\nimport {WorkerHelper} from \"../../utils/utils\";\r\n\r\ndeclare function postMessage(message: any, transfer: Array<any>): void;\r\n\r\n@Component({\r\n\r\n selector: 'audio-signal',\r\n template: `\r\n <canvas #bg height=\"10\"></canvas>\r\n <canvas #audioSignal height=\"10\"></canvas>\r\n <canvas #cursor height=\"10\" (mousedown)=\"selectionStart($event)\" (mouseover)=\"updateCursorCanvas($event)\" (mousemove)=\"updateCursorCanvas($event)\"\r\n (mouseleave)=\"updateCursorCanvas($event, false)\"></canvas>\r\n <canvas #marker height=\"10\"></canvas>`,\r\n\r\n styles: [`:host{\r\n min-height: 0px;\r\n }`,`canvas {\r\n top: 0;\r\n left: 0;\r\n width: 0;\r\n height: 0;\r\n min-height: 0px;\r\n position: absolute;\r\n }`]\r\n\r\n})\r\nexport class AudioSignal extends AudioCanvasLayerComponent{\r\n\r\n n: any;\r\n ce!: HTMLDivElement;\r\n @ViewChild('audioSignal', { static: true }) audioSignalCanvasRef!: ElementRef;\r\n @ViewChild('marker', { static: true }) playPosCanvasRef!: ElementRef;\r\n signalCanvas!: HTMLCanvasElement;\r\n\r\n markerCanvas!: HTMLCanvasElement;\r\n\r\n private _playFramePosition: number|null=null;\r\n private worker: Worker | null;\r\n private workerURL: string;\r\n\r\n constructor(private ref: ElementRef) {\r\n super();\r\n this.worker = null;\r\n this.workerURL = WorkerHelper.buildWorkerBlobURL(this.workerFunction)\r\n this._audioData = null;\r\n this._bgColor='black';\r\n this._selectColor='rgba(255,255,0,0.8)'\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n this.ce = this.ref.nativeElement;\r\n this.bgCanvas = this.bgCanvasRef.nativeElement;\r\n this.bgCanvas.style.zIndex = '1';\r\n this.signalCanvas = this.audioSignalCanvasRef.nativeElement;\r\n this.signalCanvas.style.zIndex = '2';\r\n this.markerCanvas = this.playPosCanvasRef.nativeElement;\r\n this.markerCanvas.style.zIndex = '3';\r\n this.cursorCanvas = this.cursorCanvasRef.nativeElement;\r\n this.cursorCanvas.style.zIndex = '4';\r\n\r\n this.canvasLayers[0]=this.bgCanvas;\r\n this.canvasLayers[1]=this.signalCanvas;\r\n this.canvasLayers[2]=this.cursorCanvas;\r\n this.canvasLayers[3]=this.markerCanvas;\r\n\r\n }\r\n\r\n get playFramePosition(): number |null{\r\n return this._playFramePosition;\r\n }\r\n\r\n set playFramePosition(playFramePosition: number|null) {\r\n this._playFramePosition = playFramePosition;\r\n this.drawPlayPosition();\r\n }\r\n\r\n\r\n\r\n drawPlayPosition() {\r\n if (this.markerCanvas) {\r\n let w = this.markerCanvas.width;\r\n let h = this.markerCanvas.height;\r\n let g = this.markerCanvas.getContext(\"2d\");\r\n if (g) {\r\n g.clearRect(0, 0, w, h);\r\n if(this._playFramePosition) {\r\n let pixelPos = this.frameToViewPortXPixelPosition(this._playFramePosition);\r\n if (pixelPos) {\r\n g.fillStyle = 'red';\r\n g.strokeStyle = 'red';\r\n g.beginPath();\r\n g.moveTo(pixelPos, 0);\r\n g.lineTo(pixelPos, h);\r\n g.closePath();\r\n g.stroke();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /*\r\n * Method used as worker code.\r\n */\r\n workerFunction() {\r\n addEventListener('message', ({ data }) => {\r\n\r\n let audioData = data.audioData;\r\n let l= data.l;\r\n let w = data.w;\r\n let h = data.h;\r\n let vw = data.vw;\r\n let chs = data.chs;\r\n let frameLength = data.frameLength;\r\n let psMinMax= new Float32Array(0);\r\n\r\n if(audioData && w>=0 && vw>0) {\r\n\r\n let framesPerPixel = frameLength / vw;\r\n\r\n let y = 0;\r\n let pointsLen = w * chs;\r\n // one for min one for max\r\n let arrLen = pointsLen * 2;\r\n psMinMax = new Float32Array(arrLen);\r\n let chFramePos = 0;\r\n for (let ch = 0; ch < chs; ch++) {\r\n let x = 0;\r\n\r\n chFramePos = ch * frameLength;\r\n for (let pii = 0; pii < w; pii++) {\r\n let virtPii=l+pii;\r\n let pMin = Infinity;\r\n let pMax = -Infinity;\r\n let pixelFramePos = Math.round(chFramePos + (virtPii * framesPerPixel));\r\n\r\n // calculate pixel min/max amplitude\r\n for (let ai = 0; ai < framesPerPixel; ai++) {\r\n let framePos = pixelFramePos + ai;\r\n\r\n let a = 0;\r\n if(framePos>=0 && framePos<audioData.length){\r\n a=audioData[framePos];\r\n }\r\n if (a < pMin) {\r\n pMin = a;\r\n }\r\n if (a > pMax) {\r\n pMax = a;\r\n }\r\n }\r\n\r\n let psMinPos = ch * w + pii;\r\n psMinMax[psMinPos] = pMin;\r\n let psMaxPos = pointsLen + psMinPos;\r\n psMinMax[psMaxPos] = pMax;\r\n\r\n }\r\n\r\n }\r\n }\r\n\r\n\r\n postMessage({psMinMax: psMinMax, l:data.l,t:data.t,w: data.w, h: data.h, chs: data.chs}, [psMinMax.buffer]);\r\n })\r\n }\r\n\r\n startDraw(clear = true) {\r\n if (clear) {\r\n if(this.bounds) {\r\n this.signalCanvas.style.left = Math.round(this.bounds.position.left).toString() + 'px';\r\n this.signalCanvas.width = Math.round(this.bounds.dimension.width);\r\n this.signalCanvas.height = Math.round(this.bounds.dimension.height);\r\n\r\n let g = this.signalCanvas.getContext(\"2d\");\r\n if (g) {\r\n //g.clearRect(0, 0,w, h);\r\n g.fillStyle = \"black\";\r\n g.fillRect(0, 0, Math.round(this.bounds.dimension.width), Math.round(this.bounds.dimension.height));\r\n }\r\n }\r\n }\r\n this.startRender();\r\n this.drawCursorLayer()\r\n }\r\n\r\n\r\n private startRender() {\r\n\r\n if (this.worker) {\r\n this.worker.terminate();\r\n this.worker = null;\r\n }\r\n if (this.bounds && this.bounds.dimension) {\r\n\r\n let w = Math.round(this.bounds.dimension.width);\r\n let h = Math.round(this.bounds.dimension.height);\r\n\r\n if (this._audioData && w>0 && h>0) {\r\n //this.wo = new Worker('./audiosignal.worker.js',{type: 'module'});\r\n this.worker = new Worker(this.workerURL);\r\n //this.wo = new Worker('worker/audiosignal.worker.ts');\r\n\r\n //let Worker = require('worker!../../../workers/uploader/main');\r\n let chs = this._audioData.numberOfChannels;\r\n\r\n let frameLength = this._audioData.getChannelData(0).length;\r\n // if(frameLength != this.audioData.getChannelData(1).length){\r\n // alert(\"Ungleiche Länge\");\r\n // }\r\n let ad = new Float32Array(chs * frameLength);\r\n for (let ch = 0; ch < chs; ch++) {\r\n ad.set(this._audioData.getChannelData(ch), ch * frameLength);\r\n }\r\n //let start = Date.now();\r\n if (this.worker) {\r\n this.worker.onmessage = (me) => {\r\n //console.log(\"As rendertime: \", Date.now() - start);\r\n this.drawRendered(me);\r\n if (this.worker) {\r\n this.worker.terminate();\r\n }\r\n this.worker = null;\r\n }\r\n }\r\n this.worker.postMessage({\r\n l: Math.round(this.bounds.position.left),\r\n t: Math.round(this.bounds.position.top),\r\n w: w,\r\n h: h,\r\n vw: Math.round(this.virtualDimension.width),\r\n chs: chs,\r\n frameLength: frameLength,\r\n audioData: ad\r\n }, [ad.buffer]);\r\n } else {\r\n let g = this.signalCanvas.getContext(\"2d\");\r\n if (g) {\r\n g.clearRect(0, 0, w, h);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n drawRendered(me: MessageEvent) {\r\n this.drawBg();\r\n this.signalCanvas.style.left=me.data.l.toString()+'px';\r\n this.signalCanvas.width = me.data.w;\r\n this.signalCanvas.height = me.data.h;\r\n let g = this.signalCanvas.getContext(\"2d\");\r\n if (g) {\r\n g.clearRect(0, 0, me.data.w, me.data.h);\r\n //g.fillStyle = \"black\";\r\n //g.fillRect(0, 0, me.data.w, me.data.h);\r\n let pointsLen = me.data.w * me.data.chs;\r\n // one for min one for max\r\n let arrLen = pointsLen * 2;\r\n if (this._audioData) {\r\n let std = Date.now();\r\n\r\n let chH = me.data.h / me.data.chs;\r\n\r\n let y = 0;\r\n for (let ch = 0; ch < me.data.chs; ch++) {\r\n let x = 0;\r\n\r\n let psMinPos = ch * me.data.w;\r\n let psMaxPos = pointsLen + psMinPos;\r\n\r\n g.fillStyle = 'green';\r\n g.strokeStyle = 'green';\r\n\r\n // draw audio signal as single polygon\r\n g.beginPath();\r\n g.moveTo(0, y + (chH / 2) + me.data.psMinMax[psMaxPos] * chH / 2);\r\n\r\n for (let pii = 0; pii < me.data.w; pii++) {\r\n let psMax = me.data.psMinMax[psMaxPos + pii];\r\n let pv = psMax * chH / 2;\r\n let yd=y + (chH / 2) - pv;\r\n //console.log(\"LineTo: : \"+pii+\" \"+yd)\r\n g.lineTo(pii, yd);\r\n }\r\n let revPixelStart=me.data.w-1;\r\n\r\n for (let pii = revPixelStart; pii >= 0; pii--) {\r\n let psMin = me.data.psMinMax[psMinPos + pii];\r\n let pv = psMin * chH / 2;\r\n let yd=y + (chH / 2) - pv;\r\n //console.log(\"LineTo: : \"+pii+\" \"+yd)\r\n g.lineTo(pii, yd);\r\n }\r\n g.closePath();\r\n\r\n g.fill();\r\n g.stroke();\r\n y += chH;\r\n }\r\n\r\n //this.drawPlayPosition();\r\n }\r\n }\r\n }\r\n\r\n redraw() {\r\n this.drawBg()\r\n let g = this.signalCanvas.getContext(\"2d\");\r\n if (g) {\r\n let w = this.signalCanvas.width;\r\n let h = this.signalCanvas.height;\r\n g.clearRect(0, 0, w, h);\r\n //g.fillStyle = \"black\";\r\n //g.fillRect(0, 0, w, h);\r\n if (this._audioData) {\r\n let std = Date.now();\r\n let chs = this._audioData.numberOfChannels;\r\n let chH = h / chs;\r\n\r\n let frameLength = this._audioData.getChannelData(0).length;\r\n\r\n let framesPerPixel = frameLength / w;\r\n let y = 0;\r\n for (let ch = 0; ch < chs; ch++) {\r\n let x = 0;\r\n let psMin = new Float32Array(w);\r\n let psMax = new Float32Array(w);\r\n let framePos = 0;\r\n for (let pii = 0; pii < w; pii++) {\r\n let pMin = 0;\r\n let pMax = 0;\r\n\r\n // calculate pixel min/max amplitude\r\n for (let ai = 0; ai < framesPerPixel; ai++) {\r\n //let framePos=(pii*framesPerPixel)+ai;\r\n let a = this._audioData.getChannelData(ch)[framePos++];\r\n\r\n if (a < pMin) {\r\n pMin = a;\r\n }\r\n if (a > pMax) {\r\n pMax = a;\r\n }\r\n }\r\n psMin[pii] = pMin;\r\n psMax[pii] = pMax;\r\n //console.log(\"Min: \", pMin, \" max: \", pMax);\r\n\r\n }\r\n\r\n g.fillStyle = 'green';\r\n g.strokeStyle = 'green';\r\n\r\n // draw audio signal as single polygon\r\n g.beginPath();\r\n g.moveTo(0, y + (chH / 2) + psMin[0] * chH / 2);\r\n\r\n for (let pii = 0; pii < w; pii++) {\r\n let pv = psMin[pii] * chH / 2;\r\n //console.log(\"Min: \",pv);\r\n g.lineTo(pii, y + (chH / 2) + pv);\r\n }\r\n for (let pii = w; pii >= 0; pii--) {\r\n let pv = psMax[pii] * chH / 2;\r\n //console.log(\"Max: \",pv);\r\n g.lineTo(pii, y + (chH / 2) + pv);\r\n }\r\n g.closePath();\r\n //g.lineTo()\r\n g.fill();\r\n g.stroke();\r\n g.fillStyle = \"yellow\";\r\n g.stroke();\r\n y += chH;\r\n }\r\n\r\n //this.drawPlayPosition();\r\n }\r\n }\r\n }\r\n\r\n setData(audioData: AudioBuffer | null) {\r\n this._audioData = audioData;\r\n this.playFramePosition = 0;\r\n }\r\n}\r\n\r\n","\n export class Complex {\n\n real: number;\n img: number;\n\n public static fromPolarForm(magnitude: number, argument: number): Complex {\n const r = Math.cos(argument) * magnitude;\n const i = Math.sin(argument) * magnitude;\n return new Complex(r, i);\n }\n constructor(real: number, img: number) {\n this.real = real;\n this.img = img;\n }\n public magnitude(): number {\n return Math.sqrt((this.real * this.real) + (this.img * this.img));\n }\n\n public argument(): number {\n return Math.atan2(this.img, this.real);\n }\n\n public add(addC: Complex): Complex {\n return new Complex(this.real + addC.real, this.img + addC.img);\n }\n\n public sub(subC: Complex): Complex {\n return new Complex(this.real - subC.real, this.img - subC.img);\n }\n\n public mult(multC: Complex): Complex {\n const multR = (this.real * multC.real) - (this.img * multC.img);\n const multI = (this.real * multC.img) + (multC.real * this.img);\n return new Complex(multR, multI);\n }\n\n public multReal(multF: number): Complex {\n return new Complex(this.real * multF, this.img * multF);\n }\n\n public div(divisor: Complex): Complex {\n const divReal = divisor.real;\n const divImg = divisor.img;\n const div = (divReal * divReal) + (divImg * divImg);\n const divisionReal = ((this.real * divReal) + (this.img * divImg)) / div;\n const divisionImg = ((divReal * this.img) - (this.real * divImg)) / div;\n\n return new Complex(divisionReal, divisionImg);\n }\n\n public divReal(divisor: number): Complex {\n const div = divisor * divisor;\n const divsionReal = (this.real * divisor) / div;\n const divsionImg = (divisor * this.img) / div;\n\n return new Complex(divsionReal, divsionImg);\n }\n\n public conjugate(): Complex {\n return new Complex(this.real, -this.img);\n }\n\n public equals(c: Complex): boolean {\n if (c === null) {\n return false;\n }\n return (this.real === c.real && this.img === c.img);\n }\n\n public toString(): string {\n return 'Real: ' + this.real + ', Img: ' + this.img;\n }\n }\n","import { Complex } from './complex';\n\n export class DFTFloat32 {\n\n private n: number;\n private m: number;\n\n private cosLookup: Float32Array;\n private sinLookup: Float32Array;\n\n constructor(n: number) {\n this.n = n;\n this.m = Math.log(n) / Math.log(2);\n\n // if(n != (1 << m))throw new RuntimeException(\"length N must be power of 2\");\n\n // lookup tables\n this.cosLookup = new Float32Array(n / 2);\n this.sinLookup = new Float32Array(n / 2);\n\n for (let i = 0; i < n / 2; i++) {\n const arc = (-2 * Math.PI * i) / n;\n this.cosLookup[i] = Math.cos(arc);\n this.sinLookup[i] = Math.sin(arc);\n }\n }\n\n public processReal(srcBuf: Float32Array): Array<Complex> {\n const x = srcBuf.slice();\n const y = new Float32Array(srcBuf.length);\n for (let yi = 0; yi < y.length; yi++) {\n y[yi] = 0.0;\n }\n this.fftCooleyTukey(x, y);\n const rc = new Array<Complex>(x.length);\n for (let i = 0; i < x.length; i++) {\n rc[i] = new Complex(x[i], y[i]);\n }\n return rc;\n }\n\n public processRealMagnitude(srcBuf: Float32Array): Float32Array {\n const x = srcBuf.slice();\n const y = new Float32Array(srcBuf.length);\n for (let yi = 0; yi < y.length; yi++) {\n y[yi] = 0.0;\n }\n this.fftCooleyTukey(x, y);\n const rc = new Float32Array(x.length);\n for (let i = 0; i < x.length; i++) {\n const rcc = new Complex(x[i], y[i]);\n rc[i] = rcc.magnitude();\n }\n return rc;\n }\n\n public fftCooleyTukey(real: Float32Array, img: Float32Array): void {\n let i: number;\n let j = 0;\n let k: number;\n let n1: number;\n let n2: number = this.n / 2;\n let a: number;\n let c: number;\n let s: number;\n let t1: number;\n let t2: number;\n\n for (i = 1; i < this.n - 1; i++) {\n n1 = n2;\n while (j >= n1) {\n j = j - n1;\n n1 = n1 / 2;\n }\n j = j + n1;\n\n if (i < j) {\n t1 = real[i];\n real[i] = real[j];\n real[j] = t1;\n t1 = img[i];\n img[i] = img[j];\n img[j] = t1;\n }\n }\n\n n1 = 0;\n n2 = 1;\n for (i = 0; i < this.m; i++) {\n n1 = n2;\n n2 = n2 + n2;\n a = 0;\n for (j = 0; j < n1; j++) {\n c = this.cosLookup[a];\n s = this.sinLookup[a];\n a += ( 1 << (this.m - i - 1));\n\n for (k = j; k < this.n; k = k + n2) {\n t1 = c * real[k + n1] - s * img[k + n1];\n t2 = s * real[k + n1] + c * img[k + n1];\n real[k + n1] = real[k] - t1;\n img[k + n1] = img[k] - t2;\n real[k] = real[k] + t1;\n img[k] = img[k] + t2;\n }\n }\n }\n }\n\n\n public process(t: Array<Complex>): Array<Complex> {\n const reals: Float32Array = new Float32Array(this.n);\n const imgs: Float32Array = new Float32Array(this.n);\n const trans: Array<Complex> = new Array<Complex>(this.n);\n for (let i = 0; i < this.n; i++) {\n reals[i] = t[i].real;\n imgs[i] = t[i].img;\n }\n this.fftCooleyTukey(reals, imgs);\n for (let i = 0; i < this.n; i++) {\n trans[i] = new Complex(reals[i], imgs[i]);\n }\n return trans;\n\n\n }\n\n }\n export class DFT {\n\n private n: number;\n private m: number;\n\n private cosLookup: Array<number>;\n private sinLookup: Array<number>;\n\n constructor(n: number) {\n this.n = n;\n this.m = Math.log(n) / Math.log(2);\n\n // if(n != (1 << m))throw new RuntimeException(\"length N must be power of 2\");\n\n // lookup tables\n this.cosLookup = new Array<number>(n / 2);\n this.sinLookup = new Array<number>(n / 2);\n\n for (let i = 0; i < n / 2; i++) {\n const arc = (-2 * Math.PI * i) / n;\n this.cosLookup[i] = Math.cos(arc);\n this.sinLookup[i] = Math.sin(arc);\n }\n }\n\n public processReal(srcBuf: Array<number>): Array<Complex> {\n const x = srcBuf.slice();\n const y = new Array<number>(srcBuf.length);\n for (let yi = 0; yi < y.length; yi++) {\n y[yi] = 0.0;\n }\n this.fftCooleyTukey(x, y);\n const rc = new Array<Complex>(x.length);\n for (let i = 0; i < x.length; i++) {\n rc[i] = new Complex(x[i], y[i]);\n }\n return rc;\n }\n\n public fftCooleyTukey(real: Array<number>, img: Array<number>): void {\n let i: number;\n let j = 0;\n let k: number;\n let n1: number;\n let n2: number = this.n / 2;\n let a: number;\n let c: number;\n let s: number;\n let t1: number;\n let t2: number;\n\n for (i = 1; i < this.n - 1; i++) {\n n1 = n2;\n while (j >= n1) {\n j = j - n1;\n n1 = n1 / 2;\n }\n j = j + n1;\n\n if (i < j) {\n t1 = real[i];\n real[i] = real[j];\n real[j] = t1;\n t1 = img[i];\n img[i] = img[j];\n img[j] = t1;\n }\n }\n\n n1 = 0;\n n2 = 1;\n for (i = 0; i < this.m; i++) {\n n1 = n2;\n n2 = n2 + n2;\n a = 0;\n for (j = 0; j < n1; j++) {\n c = this.cosLookup[a];\n s = this.sinLookup[a];\n a += 1 << (this.m - i - 1);\n\n for (k = j; k < this.n; k = k + n2) {\n t1 = c * real[k + n1] - s * img[k + n1];\n t2 = s * real[k + n1] + c * img[k + n1];\n real[k + n1] = real[k] - t1;\n img[k + n1] = img[k] - t2;\n real[k] = real[k] + t1;\n img[k] = img[k] + t2;\n }\n }\n }\n }\n\n\n public process(t: Array<Complex>): Array<Complex> {\n const reals: Array<number> = new Array<number>(this.n);\n const imgs: Array<number> = new Array<number>(this.n);\n const trans: Array<Complex> = new Array<Complex>(this.n);\n for (let i = 0; i < this.n; i++) {\n reals[i] = t[i].real;\n imgs[i] = t[i].img;\n }\n this.fftCooleyTukey(reals, imgs);\n for (let i = 0; i < this.n; i++) {\n trans[i] = new Complex(reals[i], imgs[i]);\n }\n return trans;\n }\n\n }\n\n","\n\n export class Utils {\n public static toHexString(val: number, radix: number, numberOfDigits: number): string {\n const intVal = Math.round(val);\n let str = intVal.toString(radix);\n const countFillChars = numberOfDigits - str.length;\n if (countFillChars > 0) {\n for (let i = 0; i < countFillChars; i++) {\n str = str + 0;\n }\n }\n return str;\n }\n }\n\n","import { Utils } from '../math/utils';\n\n export class CSSUtils {\n\n static toColorString(red: number, green: number, blue: number): string {\n return '#' + Utils.toHexString(red, 16, 2) + Utils.toHexString(green, 16, 2) + Utils.toHexString(blue, 16, 2);\n }\n }\n","import {DFTFloat32} from '../../math/dft';\r\nimport {DSPUtils} from '../../dsp/utils'\r\nimport {CSSUtils} from '../../utils/css_utils'\r\nimport {Marker, Point} from './common';\r\nimport {Component, ElementRef, ViewChild} from \"@angular/core\";\r\nimport {AudioCanvasLayerComponent} from \"./audio_canvas_layer_comp\";\r\nimport {WorkerHelper} from \"../../utils/utils\";\r\n\r\ndeclare function postMessage(message: any, transfer: Array<any>): void;\r\n\r\nconst DEFAULT_DFT_SIZE = 1024;\r\n\r\n@Component({\r\n\r\n selector: 'audio-sonagram',\r\n template: `\r\n <canvas #sonagram height=\"10\"></canvas>\r\n <canvas #bg height=\"10\"></canvas>\r\n <canvas #cursor height=\"10\" (mousedown)=\"selectionStart($event)\" (mouseover)=\"updateCursorCanvas($event)\" (mousemove)=\"updateCursorCanvas($event)\"\r\n (mouseleave)=\"updateCursorCanvas($event, false)\"></canvas>\r\n <canvas #marker height=\"10\"></canvas>`,\r\n\r\n styles: [`:host{\r\n min-height: 0px;\r\n }`,`canvas {\r\n top: 0;\r\n left: 0;\r\n width: 0;\r\n height: 0;\r\n min-height: 0px;\r\n position: absolute;\r\n }`]\r\n\r\n})\r\nexport class Sonagram extends AudioCanvasLayerComponent {\r\n\r\n dft: DFTFloat32;\r\n n: any;\r\n ce!: HTMLDivElement;\r\n sonagramCanvas!: HTMLCanvasElement;\r\n //cursorCanvas: HTMLCanvasElement;\r\n markerCanvas!: HTMLCanvasElement;\r\n @ViewChild('sonagram', { static: true }) sonagramCanvasRef!: ElementRef;\r\n\r\n @ViewChild('marker', { static: true }) markerCanvasRef!: ElementRef;\r\n markers: Array<Marker>;\r\n private _playFramePosition: number|null=null;\r\n\r\n private worker: Worker | null;\r\n private workerURL: string;\r\n private dftSize = DEFAULT_DFT_SIZE;\r\n\r\n constructor(private ref: ElementRef) {\r\n super();\r\n this.worker = null;\r\n this._audioData = null;\r\n this.markers = new Array<Marker>();\r\n this.dft = new DFTFloat32(this.dftSize);\r\n\r\n this.workerURL = WorkerHelper.buildWorkerBlobURL(this.workerFunction)\r\n this._bgColor=null;\r\n this._selectColor='rgba(255,255,0,0.1)'\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n this.ce = this.ref.nativeElement;\r\n this.sonagramCanvas = this.sonagramCanvasRef.nativeElement;\r\n this.sonagramCanvas.style.zIndex = '1';\r\n this.bgCanvas = this.bgCanvasRef.nativeElement;\r\n this.bgCanvas.style.zIndex = '2';\r\n this.cursorCanvas = this.cursorCanvasRef.nativeElement;\r\n this.cursorCanvas.style.zIndex = '4';\r\n this.markerCanvas = this.markerCanvasRef.nativeElement;\r\n this.markerCanvas.style.zIndex = '3';\r\n\r\n this.canvasLayers[0] = this.sonagramCanvas;\r\n this.canvasLayers[1] = this.bgCanvas;\r\n this.canvasLayers[2] = this.cursorCanvas;\r\n this.canvasLayers[3] = this.markerCanvas;\r\n\r\n }\r\n\r\n get playFramePosition(): number|null {\r\n return this._playFramePosition;\r\n }\r\n\r\n set playFramePosition(playFramePosition: number|null) {\r\n this._playFramePosition = playFramePosition;\r\n // this.redraw();\r\n this.drawPlayPosition();\r\n }\r\n\r\n private canvasMousePos(c: HTMLCanvasElement, e: MouseEvent): Point {\r\n const cr = c.getBoundingClientRect();\r\n\r\n const x = e.x - cr.left;\r\n const y = e.y - cr.top;\r\n return new Point(x,y);\r\n }\r\n\r\n drawCursorPosition(e: MouseEvent, show: boolean) {\r\n\r\n if (this.cursorCanvas) {\r\n const w = this.cursorCanvas.width;\r\n const h = this.cursorCanvas.height;\r\n const g = this.cursorCanvas.getContext('2d');\r\n if (g) {\r\n g.clearRect(0, 0, w, h);\r\n if (show) {\r\n const pp = this.canvasMousePos(this.cursorCanvas, e);\r\n let xViewPortPixelpos = e.offsetX;\r\n\r\n g.fillStyle = 'yellow';\r\n g.strokeStyle = 'yellow';\r\n g.beginPath();\r\n g.moveTo(xViewPortPixelpos, 0);\r\n g.lineTo(xViewPortPixelpos, h);\r\n g.closePath();\r\n\r\n g.stroke();\r\n\r\n if (this._audioData) {\r\n\r\n let framePosRound = this.viewPortXPixelToFramePosition(xViewPortPixelpos);\r\n if(framePosRound!=null) {\r\n g.font = '14px sans-serif';\r\n g.fillStyle = 'yellow';\r\n g.fillText(framePosRound.toString(), xViewPortPixelpos + 2, 50);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n drawPlayPosition() {\r\n if (this.markerCanvas) {\r\n var w = this.markerCanvas.width;\r\n var h = this.markerCanvas.height;\r\n var g = this.markerCanvas.getContext(\"2d\");\r\n if (g) {\r\n\r\n g.clearRect(0, 0, w, h);\r\n if(this._playFramePosition!=null) {\r\n let pixelPos = this.frameToViewPortXPixelPosition(this._playFramePosition);\r\n if (pixelPos) {\r\n g.fillStyle = 'red';\r\n g.strokeStyle = 'red';\r\n g.beginPath();\r\n g.moveTo(pixelPos, 0);\r\n g.lineTo(pixelPos, h);\r\n g.closePath();\r\n g.stroke();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // layout() {\r\n //\r\n //\r\n // var offW = this.sonagramCanvas.offsetWidth;\r\n // var offH = this.sonagramCanvas.offsetHeight;\r\n // this.layoutBounds(0, 0, offW, offH, true);\r\n // }\r\n\r\n\r\n // layoutBounds(left: number, top: number, offW: number, offH: number, virtualWidth:number,redraw: boolean) {\r\n //\r\n // const leftStr = left.toString() + 'px';\r\n // this.sonagramCanvas.style.left = leftStr;\r\n // const topStr = top.toString() + 'px';\r\n // this.sonagramCanvas.style.top = topStr;\r\n // this.cursorCanvas.style.top = topStr;\r\n // this.markerCanvas.style.top = topStr;\r\n //\r\n // if (offW) {\r\n // const wStr = offW.toString() + 'px';\r\n // if (redraw) {\r\n //\r\n // this.cursorCanvas.width = offW;\r\n // this.markerCanvas.width = offW;\r\n // }\r\n // this.sonagramCanvas.style.width = wStr;\r\n // this.cursorCanvas.style.width = wStr;\r\n // this.markerCanvas.style.width = wStr;\r\n // }\r\n // if (offH) {\r\n // const hStr = offH.toString() + 'px';\r\n // if (redraw) {\r\n // this.cursorCanvas.height = offH;\r\n // this.markerCanvas.height = offH;\r\n // }\r\n // this.sonagramCanvas.style.height = hStr;\r\n // this.cursorCanvas.style.height = hStr;\r\n // this.markerCanvas.style.height = hStr;\r\n //\r\n // }\r\n // if (redraw) {\r\n // //this.redraw();\r\n // if (offW > 0) {\r\n // if (offH > 0) {\r\n // this.startDraw(left,top,offW, offH,virtualWidth);\r\n // }\r\n // }\r\n // }\r\n // }\r\n\r\n\r\n /*\r\n * Method used as worker code.\r\n */\r\n workerFunction() {\r\n\r\n // Redefine some DSP classes for worker function\r\n // See e.g. audio.math.Complex\r\n class Complex {\r\n\r\n real: number;\r\n img: number;\r\n\r\n public static fromPolarForm(magnitude: number, argument: number): Complex {\r\n const r = Math.cos(argument) * magnitude;\r\n const i = Math.sin(argument) * magnitude;\r\n return new Complex(r, i);\r\n }\r\n\r\n constructor(real: number, img: number) {\r\n this.real = real;\r\n this.img = img;\r\n }\r\n\r\n public magnitude(): number {\r\n return Math.sqrt((this.real * this.real) + (this.img * this.img));\r\n }\r\n\r\n public argument(): number {\r\n return Math.atan2(this.img, this.real);\r\n }\r\n\r\n public add(addC: Complex): Complex {\r\n return new Complex(this.real + addC.real, this.img + addC.img);\r\n }\r\n\r\n public sub(subC: Complex): Complex {\r\n return new Complex(this.real - subC.real, this.img - subC.img);\r\n }\r\n\r\n public mult(multC: Complex): Complex {\r\n const multR = (this.real * multC.real) - (this.img * multC.img);\r\n const multI = (this.real * multC.img) + (multC.real * this.img);\r\n return new Complex(multR, multI);\r\n }\r\n\r\n public multReal(multF: number): Complex {\r\n return new Complex(this.real * multF, this.img * multF);\r\n }\r\n\r\n public div(divisor: Complex): Complex {\r\n const divReal = divisor.real;\r\n const divImg = divisor.img;\r\n const div = (divReal * divReal) + (divImg * divImg);\r\n const divisionReal = ((this.real * divReal) + (this.img * divImg)) / div;\r\n const divisionImg = ((divReal * this.img) - (this.real * divImg)) / div;\r\n\r\n return new Complex(divisionReal, divisionImg);\r\n }\r\n\r\n public divReal(divisor: number): Complex {\r\n const div = divisor * divisor;\r\n const divsionReal = (this.real * divisor) / div;\r\n const divsionImg = (divisor * this.img) / div;\r\n\r\n return new Complex(divsionReal, divsionImg);\r\n }\r\n\r\n public conjugate(): Complex {\r\n return new Complex(this.real, -this.img);\r\n }\r\n\r\n public equals(c: Complex): boolean {\r\n if (c === null) {\r\n return false;\r\n }\r\n return (this.real === c.real && this.img === c.img);\r\n }\r\n\r\n public toString(): string {\r\n return 'Real: ' + this.real + ', Img: ' + this.img;\r\n }\r\n }\r\n\r\n class DFTFloat32 {\r\n\r\n private n: number;\r\n private m: number;\r\n\r\n private cosLookup: Float32Array;\r\n private sinLookup: Float32Array;\r\n\r\n constructor(n: number) {\r\n this.n = n;\r\n this.m = Math.log(n) / Math.log(2);\r\n\r\n // if(n != (1 << m))throw new RuntimeException(\"length N must be power of 2\");\r\n\r\n // lookup tables\r\n this.cosLookup = new Float32Array(n / 2);\r\n this.sinLookup = new Float32Array(n / 2);\r\n\r\n for (let i = 0; i < n / 2; i++) {\r\n const arc = (-2 * Math.PI * i) / n;\r\n this.cosLookup[i] = Math.cos(arc);\r\n this.sinLookup[i] = Math.sin(arc);\r\n }\r\n }\r\n\r\n public processReal(srcBuf: Float32Array): Array<Complex> {\r\n const x = srcBuf.slice();\r\n const y = new Float32Array(srcBuf.length);\r\n for (let yi = 0; yi < y.length; yi++) {\r\n y[yi] = 0.0;\r\n }\r\n this.fftCooleyTukey(x, y);\r\n const rc = new Array<Complex>(x.length);\r\n for (let i = 0; i < x.length; i++) {\r\n rc[i] = new Complex(x[i], y[i]);\r\n }\r\n return rc;\r\n }\r\n\r\n public processRealMagnitude(srcBuf: Float32Array): Float32Array {\r\n const x = srcBuf.slice();\r\n const y = new Float32Array(srcBuf.length);\r\n for (let yi = 0; yi < y.length; yi++) {\r\n y[yi] = 0.0;\r\n }\r\n this.fftCooleyTukey(x, y);\r\n const rc = new Float32Array(x.length);\r\n for (let i = 0; i < x.length; i++) {\r\n const rcc = new Complex(x[i], y[i]);\r\n rc[i] = rcc.magnitude();\r\n }\r\n return rc;\r\n }\r\n\r\n public fftCooleyTukey(real: Float32Array, img: Float32Array): void {\r\n let i: number;\r\n let j = 0;\r\n let k: number;\r\n let n1: number;\r\n let n2: number = this.n / 2;\r\n let a: number;\r\n let c: number;\r\n let s: number;\r\n let t1: number;\r\n let t2: number;\r\n\r\n for (i = 1; i < this.n - 1; i++) {\r\n n1 = n2;\r\n while (j >= n1) {\r\n j = j - n1;\r\n n1 = n1 / 2;\r\n }\r\n j = j + n1;\r\n\r\n if (i < j) {\r\n t1 = real[i];\r\n real[i] = real[j];\r\n real[j] = t1;\r\n t1 = img[i];\r\n img[i] = img[j];\r\n img[j] = t1;\r\n }\r\n }\r\n\r\n n1 = 0;\r\n n2 = 1;\r\n for (i = 0; i < this.m; i++) {\r\n n1 = n2;\r\n n2 = n2 + n2;\r\n a = 0;\r\n for (j = 0; j < n1; j++) {\r\n c = this.cosLookup[a];\r\n s = this.sinLookup[a];\r\n a += (1 << (this.m - i - 1));\r\n\r\n for (k = j; k < this.n; k = k + n2) {\r\n t1 = c * real[k + n1] - s * img[k + n1];\r\n t2 = s * real[k + n1] + c * img[k + n1];\r\n real[k + n1] = real[k] - t1;\r\n img[k + n1] = img[k] - t2;\r\n real[k] = real[k] + t1;\r\n img[k] = img[k] + t2;\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n public process(t: Array<Complex>): Array<Complex> {\r\n const reals: Float32Array = new Float32Array(this.n);\r\n const imgs: Float32Array = new Float32Array(this.n);\r\n const trans: Array<Complex> = new Array<Complex>(this.n);\r\n for (let i = 0; i < this.n; i++) {\r\n reals[i] = t[i].real;\r\n imgs[i] = t[i].img;\r\n }\r\n this.fftCooleyTukey(reals, imgs);\r\n for (let i = 0; i < this.n; i++) {\r\n trans[i] = new Complex(reals[i], imgs[i]);\r\n }\r\n return trans;\r\n\r\n\r\n }\r\n\r\n }\r\n\r\n interface WindowFunction {\r\n getScale(i: number): number;\r\n }\r\n\r\n class GaussianWindow implements WindowFunction {\r\n\r\n public static DEFAULT_SIGMA = 0.3;\r\n // Gaussian window function,\r\n // http://reference.wolfram.com/language/ref/GaussianWindow.html\r\n // val=exp(-50*x*x/9) => sigma=0.3\r\n\r\n private buf: Float32Array;\r\n\r\n constructor(size: number, sigma: number = GaussianWindow.DEFAULT_SIGMA) {\r\n this.buf = new Float32Array(size);\r\n const center = (size - 1) / 2;\r\n for (let i = 0; i < size; i++) {\r\n const quot = (i - center) / (sigma * center);\r\n const exp = -0.5 * quot * quot;\r\n this.buf[i] = Math.exp(exp);\r\n }\r\n }\r\n\r\n getScale(i: number): number {\r\n return this.buf[i];\r\n }\r\n\r\n }\r\n\r\n self.onmessage = function (msg:MessageEvent) {\r\n\r\n let l = msg.data.l;\r\n let w = msg.data.w;\r\n let h = msg.data.h;\r\n let vw = msg.data.vw;\r\n let chs = msg.data.chs;\r\n let audioData = new Array(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n audioData[ch] = new Float32Array(msg.data['audioData'][ch]);\r\n }\r\n\r\n let frameLength = msg.data.frameLength;\r\n let dftSize = msg.data.dftSize;\r\n\r\n let dftBands = dftSize / 2;\r\n let dft = new DFTFloat32(dftSize);\r\n let wf = new GaussianWindow(dftSize);\r\n\r\n let arrSize=w*h*4;\r\n if(arrSize<0){\r\n arrSize=0\r\n }\r\n let imgData = new Uint8ClampedArray(arrSize);\r\n //console.log(\"Render method:\");\r\n if (audioData && arrSize>0) {\r\n let chH = Math.round(h / chs);\r\n let framesPerPixel = frameLength / vw;\r\n //console.log(\"Render: \", w, \"x\", h);\r\n\r\n let b = new Float32Array(dftSize);\r\n let sona = new Array(chs);\r\n\r\n let maxPsd = -Infinity;\r\n let p = 0;\r\n for (let ch = 0; ch < chs; ch++) {\r\n p = ch * frameLength;\r\n let chDataLen=audioData[ch].length;\r\n let x = 0;\r\n // initialize DFT array buffer\r\n sona[ch] = new Array(w);\r\n let framePos = 0;\r\n for (let pii = 0; pii < w; pii++) {\r\n let virtPii = l + pii;\r\n // Position of sample data frame is pixel position mapped to audio frame position.\r\n // Then \"center\" the frame by shifting left by half the DFT size (=dftBands)\r\n framePos = Math.round((virtPii * framesPerPixel)-dftBands);\r\n // fill DFT buffer with windowed sample values\r\n for (let i = 0; i < dftSize; i++) {\r\n let samplePos=framePos + i;\r\n // initialize for negative sample positions and out of bounds positions\r\n let chDat=0;\r\n\r\n // Set audio sample if available\r\n if(samplePos>=0 && samplePos < chDataLen) {\r\n chDat = audioData[ch][samplePos];\r\n }\r\n\r\n // apply Window\r\n b[i] = chDat * wf.getScale(i);\r\n }\r\n // Calc DFT magnitudes\r\n let spectr = dft.processRealMagnitude(b);\r\n\r\n // Get maximum value of spectral energy\r\n for (let s = 0; s < dftBands; s++) {\r\n let psd = (2 * Math.pow(spectr[s], 2)) / dftBands;\r\n if (psd > maxPsd) {\r\n maxPsd = psd;\r\n }\r\n }\r\n // Set render model data for this pixel\r\n sona[ch][pii] = spectr;\r\n }\r\n }\r\n //maxPsd = (2 * Math.pow(max, 2)) / dftBands;\r\n\r\n for (let ch = 0; ch < chs; ch++) {\r\n\r\n for (let pii = 0; pii < w; pii++) {\r\n let allBlack = true;\r\n for (let y = 0; y < chH; y++) {\r\n let freqIdx = Math.round(y * dftBands / chH);\r\n // calculate the one sided power spectral density PSD (f, t) in Pa2/Hz\r\n // PSD(f) proportional to 2|X(f)|2 / (t2 - t1)\r\n let val = sona[ch][pii][freqIdx];\r\n let psd = (2 * Math.pow(val, 2)) / dftBands;\r\n // Calculate logarithmic value\r\n //let psdLog = ips.dsp.DSPUtils.toLevelInDB(psd / maxPsd);\r\n let linearLevel = psd / maxPsd;\r\n let psdLog = 10 * Math.log(linearLevel) / Math.log(10);\r\n // Fixed dynamic Range value of 70dB for now\r\n let dynRangeInDb = 70;\r\n let scaledVal = (psdLog + dynRangeInDb) / dynRangeInDb;\r\n\r\n // are the following checks necessary for clamped array ?\r\n if (scaledVal > 1.0)\r\n scaledVal = 1;\r\n if (scaledVal < 0.0) {\r\n scaledVal = 0;\r\n }\r\n let rgbVal = Math.round(255 * scaledVal);\r\n if (rgbVal < 0) {\r\n //\t\t\t\t\t\t\tSystem.out.println(\"Neg RGB val: \"+rgbVal);\r\n rgbVal = 0;\r\n }\r\n if (rgbVal > 255) {\r\n rgbVal = 255;\r\n }\r\n rgbVal = 255 - rgbVal;\r\n if (rgbVal > 0) {\r\n allBlack = false;\r\n }\r\n let py = chH - y;\r\n let dataPos = ((((ch * chH) + py) * w) + pii) * 4;\r\n imgData[dataPos + 0] = rgbVal; //R\r\n imgData[dataPos + 1] = rgbVal; //G\r\n imgData[dataPos + 2] = rgbVal; //B\r\n imgData[dataPos + 3] = 255; //A (alpha: fully opaque)\r\n }\r\n // if (allBlack) {\r\n // console.log(\"Black: \", pii, \" \", ch);\r\n // }\r\n }\r\n }\r\n }\r\n postMessage({imgData: imgData, l: l, w: msg.data.w, h: msg.data.h, vw: vw}, [imgData.buffer]);\r\n }\r\n }\r\n\r\n startDraw(clear = true) {\r\n if (clear) {\r\n if(this.bounds) {\r\n this.sonagramCanvas.style.left = Math.round(this.bounds.position.left).toString() + 'px';\r\n let intW = Math.round(this.bounds.dimension.width)\r\n let intH = Math.round(this.bounds.dimension.height)\r\n this.sonagramCanvas.width = intW;\r\n this.sonagramCanvas.height = intH;\r\n\r\n let g = this.sonagramCanvas.getContext(\"2d\");\r\n if (g) {\r\n //g.clearRect(0, 0,w, h);\r\n g.fillStyle = \"white\";\r\n g.fillRect(0, 0, intW, intH);\r\n }\r\n }\r\n }\r\n this.startRender();\r\n this.drawCursorLayer()\r\n }\r\n\r\n private startRender() {\r\n\r\n if (this.worker) {\r\n this.worker.terminate();\r\n this.worker = null;\r\n\r\n }\r\n if (this.bounds) {\r\n let w = Math.round(this.bounds.dimension.width);\r\n let h = Math.round(this.bounds.dimension.height);\r\n\r\n\r\n if (this._audioData && w>0 && h>0) {\r\n\r\n this.worker = new Worker(this.workerURL);\r\n //this.wo = new Worker('./worker/sonagram.worker', { type: `module` });\r\n\r\n let chs = this._audioData.numberOfChannels;\r\n\r\n let frameLength = this._audioData.getChannelData(0).length;\r\n let ada = new Array<ArrayBuffer>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n // Need a copy here for the worker, otherwise this.audioData is not accessible after posting to the worker\r\n ada[ch] = this._audioData.getChannelData(ch).buffer.slice(0);\r\n }\r\n let start = Date.now();\r\n if (this.worker) {\r\n this.worker.onmessage = (me) => {\r\n this.drawRendered(me);\r\n if (this.worker) {\r\n this.worker.terminate();\r\n }\r\n this.worker = null;\r\n }\r\n }\r\n if (this.markerCanvas) {\r\n let g = this.markerCanvas.getContext(\"2d\");\r\n if (g) {\r\n g.fillText(\"Rendering...\", 10, 20);\r\n }\r\n\r\n }\r\n this.worker.postMessage({\r\n audioData: ada,\r\n l: Math.round(this.bounds.position.left),\r\n w: w,\r\n h: h,\r\n vw: Math.round(this.virtualDimension.width),\r\n chs: chs,\r\n frameLength: frameLength,\r\n dftSize: this.dftSize\r\n }, ada);\r\n } else {\r\n let g = this.sonagramCanvas.getContext(\"2d\");\r\n if (g) {\r\n g.clearRect(0, 0, w, h);\r\n }\r\n }\r\n }\r\n }\r\n\r\n drawRendered(me: MessageEvent) {\r\n if (this.sonagramCanvas) {\r\n\r\n this.sonagramCanvas.width = me.data.w;\r\n this.sonagramCanvas.height = me.data.h;\r\n let g = this.sonagramCanvas.getContext(\"2d\");\r\n if (g) {\r\n let imgDataArr: Uint8ClampedArray = me.data.imgData;\r\n if (me.data.w > 0 && me.data.h > 0) {\r\n let imgData = g.createImageData(me.data.w, me.data.h);\r\n imgData.data.set(imgDataArr);\r\n g.putImageData(imgData, 0, 0);\r\n }\r\n }\r\n }\r\n this.drawBg()\r\n this.drawPlayPosition();\r\n }\r\n\r\n // synchronous draw (not used anymore)\r\n redraw() {\r\n\r\n let g = this.sonagramCanvas.getContext(\"2d\");\r\n\r\n let w = this.sonagramCanvas.width;\r\n let h = this.sonagramCanvas.height;\r\n if (g) {\r\n g.clearRect(0, 0, w, h);\r\n g.fillStyle = \"white\";\r\n g.fillRect(0, 0, w, h);\r\n if (this._audioData) {\r\n let spectSize = Math.floor(this.dftSize / 2)\r\n let chs = this._audioData.numberOfChannels;\r\n let chH = h / chs;\r\n\r\n let frameLength = this._audioData.getChannelData(0).length;\r\n\r\n let framesPerPixel = frameLength / w;\r\n let y = 0;\r\n // TODO\r\n let b = new Float32Array(this.dftSize)\r\n\r\n let sona = new Array<Array<Float32Array>>(chs);\r\n let max = 0;\r\n let maxPsd = -Infinity;\r\n for (let ch = 0; ch < chs; ch++) {\r\n let x = 0;\r\n sona[ch] = new Array<Float32Array>(w);\r\n\r\n let chData = this._audioData.getChannelData(ch);\r\n // TODO center buffer\r\n\r\n let framePos = 0;\r\n for (let pii = 0; pii < w; pii++) {\r\n framePos = Math.round(pii * framesPerPixel);\r\n // calculate DFT at pixel position\r\n for (let i = 0; i < this.dftSize; i++) {\r\n let chDat = chData[framePos + i];\r\n b[i] = chDat;\r\n }\r\n let spectr = this.dft.processRealMagnitude(b);\r\n sona[ch][pii] = spectr;\r\n // @ts-ignore\r\n let pMax = Math.max.apply(null, spectr);\r\n if (pMax > max) {\r\n max = pMax;\r\n }\r\n\r\n for (let s = 0; s < spectSize; s++) {\r\n let psd = (2 * Math.pow(spectr[s], 2)) / spectSize;\r\n if (psd > maxPsd) {\r\n maxPsd = psd;\r\n }\r\n }\r\n }\r\n }\r\n //console.log(\"max: \", max);\r\n maxPsd = (2 * Math.pow(max, 2)) / spectSize;\r\n for (let ch = 0; ch < chs; ch++) {\r\n\r\n let framePos = 0;\r\n for (let pii = 0; pii < w; pii++) {\r\n framePos = pii * framesPerPixel;\r\n\r\n for (let y = 0; y < h; y++) {\r\n let freqIdx = Math.round(y * spectSize / h);\r\n\r\n // calculate the one sided power spectral density PSD (f, t) in Pa2/Hz\r\n // PSD(f) proportional to 2|X(f)|2 / (t2 - t1)\r\n let val = sona[ch][pii][freqIdx];\r\n let psd = (2 * Math.pow(val, 2)) / spectSize;\r\n\r\n // Calculate logarithmic\r\n let psdLog = DSPUtils.toLevelInDB(psd / maxPsd);\r\n let dynRangeInDb = 70;\r\n let scaledVal = (psdLog + dynRangeInDb) / dynRangeInDb;\r\n\r\n if (scaledVal > 1)\r\n scaledVal = 1;\r\n if (scaledVal < 0) {\r\n scaledVal = 0;\r\n }\r\n let rgbVal = (255 * scaledVal);\r\n if (rgbVal < 0) {\r\n//\t\t\t\t\t\t\tSystem.out.println(\"Neg RGB val: \"+rgbVal);\r\n rgbVal = 0;\r\n }\r\n if (rgbVal > 255) {\r\n rgbVal = 255;\r\n }\r\n rgbVal = 255 - rgbVal;\r\n let colorStr = CSSUtils.toColorString(rgbVal, rgbVal, rgbVal);\r\n g.fillStyle = colorStr;\r\n g.fillRect(pii, chH - y, 1, 1);\r\n }\r\n }\r\n }\r\n this.drawPlayPosition();\r\n }\r\n }\r\n }\r\n\r\n\r\n setData(audioData: AudioBuffer | null) {\r\n this._audioData = audioData;\r\n this.playFramePosition = 0;\r\n //this.redraw();\r\n //this.startRender();\r\n }\r\n\r\n\r\n}\r\n\r\n","import {\r\n ElementRef, AfterViewInit, HostListener, Input, OnInit, Output, EventEmitter\r\n} from '@angular/core'\r\nimport {AudioSignal} from './audiosignal'\r\nimport {Sonagram} from './sonagram'\r\nimport {Marker, Point} from './common'\r\n\r\nimport {Component, ViewChild} from '@angular/core';\r\nimport {Position,Dimension, Rectangle} from \"../../math/2d/geometry\";\r\nimport {AudioClip,Selection} from \"../persistor\";\r\nimport {BasicAudioCanvasLayerComponent} from \"./audio_canvas_layer_comp\";\r\nimport {Element} from \"@angular/compiler\";\r\n\r\n/*\r\n ResizeObserver not yet available in official Typescript declaration\r\n Crreated declaration from IDL until its available.\r\n See specs:\r\n https://www.w3.org/TR/resize-observer\r\n\r\n */\r\n\r\ninterface ResizeObserverSize {\r\n readonly inlineSize:number;\r\n readonly blockSize:number;\r\n};\r\n\r\ndeclare interface ResizeObserverEntry{\r\n readonly target: Element;\r\n readonly contentRect: DOMRectReadOnly ;\r\n readonly borderBoxSize: Array<ResizeObserverSize> ;\r\n readonly contentBoxSize: Array<ResizeObserverSize> ;\r\n readonly devicePixelContentBoxSize: Array<ResizeObserverSize> ;\r\n}\r\n\r\ndeclare interface ResizeObserverCallback {\r\n (entries: Array<ResizeObserverEntry>, observer: ResizeObserver):void;\r\n}\r\n\r\ndeclare enum ResizeObserverBoxOptions {\r\n \"border-box\", \"content-box\", \"device-pixel-content-box\"\r\n};\r\n\r\n// // Declare Resizeobserver\r\n// declare class ResizeObserver{\r\n// constructor(callback: ResizeObserverCallback);\r\n// observe: (el:Element,opts: ResizeObserverBoxOptions | null)=>void;\r\n// unobserve: (el:Element)=>void;\r\n// disconnect: ()=>void;\r\n// }\r\n\r\n/*\r\n * Container component for audio display.\r\n * The display elements are children of a virtual canvas. The virtual canvas makes it possible to have high zoom factors with very wide virtual audio displays.\r\n * Only the visible part of the virtual canvas is implemented as a browser canvas and therefore consuming memory.\r\n * The visible part has the same width as the viewport of the scroll pane parent.\r\n * The virtual canvas itself is implemented as a HTML div element.\r\n * The layout of the component is updated on resize of the parent or changes of the zoom factor.\r\n */\r\n@Component({\r\n\r\n selector: 'app-audio',\r\n template: `\r\n <div #virtualCanvas>\r\n <canvas #divider (mousedown)=\"mousedown($event)\" (mouseover)=\"mouseover($event)\"\r\n (mouseleave)=\"mouseleave($event)\" height=\"10\"></canvas>\r\n <audio-signal [pointerPosition]=\"pointer\" [selecting]=\"selecting\" [selection]=\"selection\" (pointerPositionEventEmitter)=\"pointerPositionChanged($event)\" (selectingEventEmitter)=\"selectingChanged($event)\" (selectedEventEmitter)=\"selectionChanged($event)\"></audio-signal>\r\n <audio-sonagram [pointerPosition]=\"pointer\" [selecting]=\"selecting\" [selection]=\"selection\" (pointerPositionEventEmitter)=\"pointerPositionChanged($event)\" (selectingEventEmitter)=\"selectingChanged($event)\" (selectedEventEmitter)=\"selectionChanged($event)\"></audio-sonagram>\r\n </div>\r\n `,\r\n styles: [`div {\r\n\r\n margin: 0;\r\n padding: 0;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n position: relative; /* TODO container div position must not be 'static' (default) to act as reference for the canvases */\r\n box-sizing: border-box;\r\n transform: none;\r\n }`, `canvas{\r\n top: 0;\r\n left: 0;\r\n width: 0;\r\n height: 0;\r\n cursor: ns-resize;\r\n position: absolute;\r\n zIndex: 1;\r\n transform: none;\r\n }`, `audio-signal {\r\n top: 0;\r\n left: 0;\r\n position: absolute;\r\n zIndex: 1;\r\n transform: none;\r\n }`, `audio-sonagram {\r\n top: 0;\r\n left: 0;\r\n position: absolute;\r\n zIndex: 1;\r\n transform: none;\r\n }`]\r\n\r\n})\r\nexport class AudioClipUIContainer extends BasicAudioCanvasLayerComponent implements OnInit,AfterViewInit{\r\n\r\n private static DIVIDER_PIXEL_SIZE = 10;\r\n\r\n parentE: HTMLElement;\r\n\r\n // Divider canvas\r\n @ViewChild('divider', { static: true }) canvasRef!: ElementRef;\r\n dc!: HTMLCanvasElement;\r\n\r\n // Virtual container\r\n @ViewChild('virtualCanvas', { static: true }) ceRef!: ElementRef;\r\n ce!: HTMLDivElement;\r\n\r\n @ViewChild(AudioSignal, { static: true }) as!: AudioSignal;\r\n @ViewChild(Sonagram, { static: true }) so!: Sonagram;\r\n\r\n private _audioClip:AudioClip | null=null;\r\n pointer: Marker|null=null;\r\n selecting: Selection|null=null;\r\n selection: Selection|null=null;\r\n @Output() selectionEventEmitter = new EventEmitter<Selection>();\r\n private _playFramePosition: number|null=null;\r\n private dragStartMouseY: number | null = null;\r\n private dragStartY: number | null = null;\r\n private dividerPosition = 0.5;\r\n\r\n userAction=false;\r\n\r\n private _xZoom: number | null = null; // pixels per second\r\n\r\n get xZoom(): number | null {\r\n return this._xZoom;\r\n }\r\n\r\n set xZoom(value: number | null) {\r\n this.userAction=true;\r\n this._xZoom = value;\r\n this.layout()\r\n this.userAction=false;\r\n }\r\n\r\n // if true the complete audio file is shown, the display fits to the visible panel, the x-zoom factor is variable, this is the default\r\n private _fixFitToPanel = true;\r\n\r\n set fixFitToPanel(value: boolean) {\r\n this._fixFitToPanel = value;\r\n if (value) {\r\n // we don't need clip bounds\r\n this.bounds=null;\r\n this._xZoom = null;\r\n } else {\r\n // hold current zoom value\r\n //this._xZoom=this.ce.offsetWidth/this._audioData.duration;\r\n }\r\n this.layout()\r\n }\r\n\r\n constructor(private ref: ElementRef) {\r\n super()\r\n this.parentE = this.ref.nativeElement;\r\n }\r\n\r\n ngOnInit() {\r\n this.ce = this.ceRef.nativeElement;\r\n this.dc = this.canvasRef.nativeElement;\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.layout();\r\n let heightListener = new MutationObserver((mrs: Array<MutationRecord>, mo: MutationObserver) => {\r\n\r\n let layout=false;\r\n mrs.forEach((mr: MutationRecord) => {\r\n if (!this.userAction && 'attributes' === mr.type && ('class' === mr.attributeName || 'style' === mr.attributeName)) {\r\n layout=true;\r\n }\r\n });\r\n if(layout){\r\n // re-layout required\r\n this.layout(false);\r\n }\r\n });\r\n\r\n heightListener.observe(this.ce, {attributes: true, childList: true, characterData: true});\r\n heightListener.observe(this.dc, {attributes: true, childList: true, characterData: true});\r\n\r\n let resizeObserver = new ResizeObserver((entries,obs) => {\r\n //console.log(\"Resize observed:\");\r\n entries.forEach((e)=>{\r\n //console.log(e.contentRect.width+\"x\"+e.contentRect.height);\r\n this.layout();\r\n })\r\n });\r\n\r\n resizeObserver.observe(this.ce);\r\n\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event: Event): void {\r\n this.layout();\r\n }\r\n\r\n mouseover(me: MouseEvent) {\r\n this.dividerCursorPosition(me, true);\r\n }\r\n\r\n mouseleave(me: MouseEvent) {\r\n this.dividerCursorPosition(me, false);\r\n }\r\n\r\n mousedown(me: MouseEvent) {\r\n this.dragStartMouseY = me.clientY;\r\n this.dragStartY = this.dc.offsetTop;\r\n this.dragStartMouseY = me.clientY;\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n onMouseup(me: MouseEvent) {\r\n if (this.dragStartY != null) {\r\n this.userAction=true;\r\n this.dividerDrag(me);\r\n this.layout(false);\r\n this.dragStartY = null;\r\n this.userAction=false;\r\n }\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMousemove(me: MouseEvent) {\r\n if (this.dragStartY != null) {\r\n this.userAction=true;\r\n this.dividerDrag(me);\r\n this.layoutScaled();\r\n this.userAction=true;\r\n }\r\n }\r\n\r\n pointerPositionChanged(pp:Marker){\r\n this.pointer=pp\r\n }\r\n\r\n selectingChanged(s:Selection| null){\r\n this.selecting=s\r\n }\r\n\r\n selectionChanged(s:Selection){\r\n this.selection=s\r\n if(this._audioClip){\r\n this._audioClip.selection=s\r\n }\r\n this.selectionEventEmitter.emit(this.selection)\r\n }\r\n\r\n private canvasMousePos(c: HTMLCanvasElement, e: MouseEvent): Point {\r\n const cr = c.getBoundingClientRect();\r\n const x = e.x - cr.left;\r\n const y = e.y - cr.top;\r\n return new Point(x,y);\r\n }\r\n\r\n dividerCursorPosition(e: MouseEvent, show: boolean) {\r\n if (this.dc) {\r\n\r\n const w = this.dc.width;\r\n const h = this.dc.height;\r\n const g = this.dc.getContext('2d');\r\n\r\n const pp = this.canvasMousePos(this.dc, e);\r\n const offX = e.offsetX - this.dc.offsetLeft;\r\n const offY = e.offsetY - this.dc.offsetTop;\r\n\r\n }\r\n }\r\n\r\n dividerDrag(e: MouseEvent) {\r\n if (this.dc && this.dragStartMouseY && this.dragStartY) {\r\n\r\n const dragOffset = e.clientY - this.dragStartMouseY;\r\n const ceHeight = this.ce.offsetHeight;\r\n\r\n let newTop = (this.dragStartY + dragOffset);\r\n if (newTop < 0) {\r\n newTop = 0;\r\n }\r\n if (newTop > ceHeight - AudioClipUIContainer.DIVIDER_PIXEL_SIZE) {\r\n newTop = ceHeight - AudioClipUIContainer.DIVIDER_PIXEL_SIZE;\r\n }\r\n this.dc.style.top = newTop.toString() + 'px';\r\n this.dividerPosition = (this.dc.offsetTop + AudioClipUIContainer.DIVIDER_PIXEL_SIZE / 2) / ceHeight;\r\n if (this.dividerPosition > 1.0) {\r\n this.dividerPosition = 1.0;\r\n }\r\n if (this.dividerPosition < 0.0) {\r\n this.dividerPosition = 0.0;\r\n }\r\n this.drawDivider();\r\n }\r\n }\r\n\r\n\r\n drawDivider() {\r\n const w = this.dc.width;\r\n const h = this.dc.height;\r\n const g = this.dc.getContext('2d');\r\n if (g && w>10 && h>=1) {\r\n g.fillStyle = 'white';\r\n g.fillRect(0, 0, w, h);\r\n g.fillStyle = 'black';\r\n g.fillRect(5, 5, w - 10, 1);\r\n }\r\n }\r\n\r\n clipBounds(clipBounds: Rectangle) {\r\n this.bounds = clipBounds;\r\n this.layout();\r\n }\r\n\r\n currentXZoom(): number | null {\r\n let xz = this._xZoom;\r\n if (xz==null && this._audioData) {\r\n let ow = this.ce.offsetWidth;\r\n if (ow < 1) {\r\n // at least one pixel width to avoid x-zoom zero values\r\n ow = 1;\r\n }\r\n xz = ow / this._audioData.duration;\r\n }\r\n return xz;\r\n }\r\n\r\n private _layout(clear: boolean, redraw: boolean) {\r\n let ceBcr = this.ce.getBoundingClientRect();\r\n\r\n const ceBcrIntW = Math.floor(ceBcr.width);\r\n const ceBcrIntH = Math.floor(ceBcr.height);\r\n\r\n // height available for plugins (audiosignal and sonagram)\r\n let psH = ceBcrIntH - AudioClipUIContainer.DIVIDER_PIXEL_SIZE;\r\n if (psH < 0) {\r\n psH = 0;\r\n }\r\n // audio signal height\r\n const asH = Math.round(psH * this.dividerPosition);\r\n\r\n // sonagram height (rest: available height minus divider height minus audiosignal height)\r\n let soH = ceBcrIntH - AudioClipUIContainer.DIVIDER_PIXEL_SIZE - asH;\r\n if (soH < 0) {\r\n soH = 0;\r\n }\r\n\r\n // sonagram top position\r\n const soTop = asH + AudioClipUIContainer.DIVIDER_PIXEL_SIZE;\r\n\r\n // Visible bounds\r\n // left position\r\n let vbLeft = 0;\r\n // width\r\n let vbWidth = ceBcrIntW;\r\n if (!this._fixFitToPanel && this.bounds) {\r\n vbLeft = Math.round(this.bounds.position.left);\r\n vbWidth = Math.round(this.bounds.dimension.width);\r\n }\r\n\r\n // Divider\r\n // left position\r\n this.dc.style.left = vbLeft + 'px';\r\n // top position\r\n const dTop = asH;\r\n const dTopStr = dTop + 'px';\r\n this.dc.style.top = dTopStr;\r\n // width\r\n this.dc.style.width = vbWidth + 'px';\r\n this.dc.width = vbWidth;\r\n // height\r\n this.dc.height = AudioClipUIContainer.DIVIDER_PIXEL_SIZE;\r\n this.dc.style.height = AudioClipUIContainer.DIVIDER_PIXEL_SIZE.toString() + 'px';\r\n\r\n this.drawDivider();\r\n\r\n\r\n // Virtual dimension, only width is used\r\n let virtualDim = new Dimension(ceBcrIntW, 0)\r\n\r\n // Visible bounds of container\r\n let br = new Rectangle(new Position(vbLeft, 0), new Dimension(vbWidth, ceBcrIntH));\r\n\r\n // Set container bounds\r\n this.layoutBounds(br, virtualDim, false);\r\n\r\n // Visible bounds of audiosignal\r\n let asR = new Rectangle(new Position(vbLeft, 0), new Dimension(vbWidth, asH));\r\n\r\n // Set audiosignal bounds\r\n this.as.layoutBounds(asR, virtualDim, redraw, clear);\r\n\r\n // Visible bounds of sonagram\r\n let soR = new Rectangle(new Position(vbLeft, soTop), new Dimension(vbWidth, soH));\r\n\r\n // Set sonagram bounds\r\n this.so.layoutBounds(soR, virtualDim, redraw, clear);\r\n }\r\n\r\n layoutScaled() {\r\n this._layout(false, false);\r\n }\r\n\r\n layout(clear=true) {\r\n\r\n if(this.ce && this.dc) {\r\n const clientW=this.ce.clientWidth;\r\n if(this._audioData){\r\n if(this._fixFitToPanel) {\r\n // Set the virtual canvas width to the visible width\r\n this.ce.style.width = '100%';\r\n }else{\r\n if (this._xZoom) {\r\n // Set the virtual canvas width according to the value of the user selected xZoom value\r\n const newClW = Math.round( this._xZoom*this._audioData.duration );\r\n this.ce.style.width = newClW + 'px';\r\n } else {\r\n // Set the virtual canvas width to the visible width only\r\n this.ce.style.width = clientW + 'px';\r\n }\r\n }\r\n }\r\n this._layout(clear,true);\r\n }\r\n }\r\n\r\n @Input()\r\n set audioData(audioData: AudioBuffer | null) {\r\n this._audioClip=null\r\n this._audioData=audioData;\r\n this.as.setData(audioData);\r\n this.so.setData(audioData);\r\n this.layout();\r\n }\r\n\r\n get audioData():AudioBuffer|null{\r\n return this._audioData\r\n }\r\n\r\n @Input()\r\n set audioClip(audioClip: AudioClip | null) {\r\n this._audioClip=audioClip\r\n let audioData:AudioBuffer|null=null;\r\n let sel:Selection|null=null;\r\n if(audioClip) {\r\n audioData = audioClip.buffer;\r\n if (this._audioClip) {\r\n this._audioClip.addSelectionObserver((clip) => {\r\n this.selection = clip.selection\r\n });\r\n }\r\n sel=audioClip.selection;\r\n }\r\n this._audioData = audioData;\r\n this.as.setData(this._audioData);\r\n this.so.setData(this._audioData);\r\n this.selecting=null\r\n this.selection=sel\r\n this.layout();\r\n }\r\n\r\n get playFramePosition(): number |null {\r\n return this._playFramePosition;\r\n }\r\n\r\n set playFramePosition(playFramePosition: number|null) {\r\n this._playFramePosition = playFramePosition;\r\n this.as.playFramePosition = playFramePosition;\r\n this.so.playFramePosition = playFramePosition;\r\n }\r\n}\r\n\r\n","import {\r\n Component,\r\n ViewChild,\r\n HostListener, ElementRef, Output, Input,\r\n} from '@angular/core'\r\n\r\n\r\nimport {AudioClipUIContainer} from '../ui/container'\r\nimport {Action} from \"../../action/action\";\r\nimport {Position,Dimension, Rectangle} from \"../../math/2d/geometry\";\r\nimport {AudioClip, Selection} from \"../persistor\";\r\n\r\n@Component({\r\n\r\n selector: 'audio-display-scroll-pane',\r\n\r\n template: `\r\n\r\n <app-audio #audioSignalContainer (selectionEventEmitter)=\"selectionChanged($event)\"></app-audio>\r\n\r\n `,\r\n styles: [\r\n `:host {\r\n flex: 2;\r\n width: 100%;\r\n background: darkgray;\r\n box-sizing: border-box;\r\n height: 100%;\r\n position: relative;\r\n overflow-x: scroll;\r\n overflow-y: auto;\r\n }`,\r\n `app-audio {\r\n\r\n margin: 0;\r\n padding: 0;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n\r\n /*position: absolute;*/\r\n box-sizing: border-box;\r\n }`]\r\n\r\n})\r\nexport class AudioDisplayScrollPane {\r\n\r\n private spEl!:HTMLElement;\r\n\r\n @Output() zoomInAction:Action<void>=new Action('+');\r\n @Output() zoomOutAction:Action<void>=new Action('-');\r\n @Output() zoomSelectedAction:Action<void>=new Action(\"Selected\");\r\n @Output() zoomFitToPanelAction:Action<void>=new Action(\"Fit to panel\");\r\n zoomFixFitToPanelAction:Action<void>=new Action(\"Fix fit to panel\");\r\n\r\n\r\n @ViewChild(AudioClipUIContainer, { static: true })\r\n private ac!: AudioClipUIContainer;\r\n\r\n\r\n\r\n constructor( private ref: ElementRef) {\r\n this.spEl = this.ref.nativeElement;\r\n\r\n this.zoomInAction.onAction = (e) => {\r\n this.ac.fixFitToPanel = false\r\n let oldXZoom = this.ac.currentXZoom()\r\n if(oldXZoom === null){\r\n return;\r\n }\r\n let newXzoom = oldXZoom * 2;\r\n this.ac.xZoom = newXzoom;\r\n\r\n let cbr = new Rectangle(new Position(this.spEl.scrollLeft, this.spEl.scrollTop), new Dimension(this.spEl.clientWidth, this.spEl.clientHeight));\r\n this.ac.clipBounds(cbr);\r\n this.zoomFitToPanelAction.disabled=false\r\n }\r\n this.zoomOutAction.onAction = (e) => {\r\n this.ac.fixFitToPanel = false\r\n let cbr1 = new Rectangle(new Position((this.spEl.scrollLeft / 2) - this.spEl.clientWidth, this.spEl.scrollTop), new Dimension(this.spEl.clientWidth, this.spEl.clientHeight));\r\n this.ac.clipBounds(cbr1);\r\n let oldXZoom = this.ac.currentXZoom()\r\n if(oldXZoom === null){\r\n return;\r\n }\r\n let newXzoom = oldXZoom / 2;\r\n this.ac.xZoom = newXzoom;\r\n\r\n let cbr = new Rectangle(new Position(this.spEl.scrollLeft, this.spEl.scrollTop), new Dimension(this.spEl.clientWidth, this.spEl.clientHeight));\r\n this.ac.clipBounds(cbr);\r\n this.zoomFitToPanelAction.disabled=false\r\n }\r\n\r\n this.zoomFitToPanelAction.onAction = (e) => {\r\n\r\n this.zoomFitToPanelAction.disabled=true\r\n\r\n // set container div width to this (viewport) width\r\n this.ac.ce.style.width=this.spEl.offsetWidth+'px';\r\n\r\n this.ac.fixFitToPanel=true;\r\n }\r\n\r\n this.zoomSelectedAction.onAction = (e) => {\r\n //alert(\"not implemented yet\")\r\n\r\n let s = this.ac.selection\r\n if (s) {\r\n // reset auto fit to panel mode\r\n this.ac.fixFitToPanel = false\r\n\r\n // calculate selection length in seconds\r\n if(this.ac.audioData) {\r\n let sr = this.ac.audioData.sampleRate;\r\n let selFrLen = s.endFrame - s.startFrame;\r\n let selLenInSecs = selFrLen / sr;\r\n // calculate corresponding xZoom value\r\n let newXZoom = this.spEl.clientWidth / selLenInSecs\r\n // apply xZoom\r\n this.ac.xZoom = newXZoom\r\n\r\n // Move viewport to show selection\r\n let x1 = this.ac.frameToXPixelPosition(s.startFrame);\r\n if (x1 !== null) {\r\n this.spEl.scrollLeft = x1;\r\n }\r\n }\r\n this.updateClipBounds()\r\n this.zoomFitToPanelAction.disabled = false\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n updateClipBounds(){\r\n let cbr=new Rectangle(new Position(this.spEl.scrollLeft,this.spEl.scrollTop), new Dimension(this.spEl.clientWidth,this.spEl.clientHeight));\r\n this.ac.clipBounds(cbr);\r\n }\r\n\r\n @HostListener('scroll', ['$event'])\r\n onScroll(se: Event) {\r\n this.updateClipBounds()\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event: Event): void {\r\n this.updateClipBounds()\r\n }\r\n\r\n layout(){\r\n this.ac.layout();\r\n }\r\n\r\n selectionChanged(s:Selection| null){\r\n this.zoomSelectedAction.disabled=(s==null)\r\n }\r\n\r\n set audioData(audioData: AudioBuffer | null) {\r\n this.ac.audioData=audioData;\r\n this.zoomOutAction.disabled=(!audioData)\r\n this.zoomInAction.disabled=(!audioData)\r\n }\r\n\r\n @Input()\r\n set audioClip(audioClip: AudioClip | null) {\r\n\r\n let audioData:AudioBuffer|null=null;\r\n let sel:Selection|null=null;\r\n if(audioClip){\r\n audioData=audioClip.buffer;\r\n sel=audioClip.selection;\r\n audioClip.addSelectionObserver((clip)=>{\r\n this.zoomSelectedAction.disabled=(clip.selection==null)\r\n })\r\n }\r\n\r\n this.selectionChanged(sel)\r\n this.ac.audioClip=audioClip\r\n this.zoomOutAction.disabled=(!audioData)\r\n this.zoomInAction.disabled=(!audioData)\r\n window.setTimeout(()=>{\r\n this.layout();\r\n })\r\n }\r\n\r\n\r\n set playFramePosition(framePos:number){\r\n this.ac.playFramePosition=framePos;\r\n }\r\n\r\n\r\n}\r\n\r\n","import {Component, AfterContentInit, ChangeDetectorRef, Input, ViewChild} from '@angular/core'\r\nimport {Action} from \"../../action/action\";\r\nimport {MatCheckbox, MatCheckboxChange} from \"@angular/material/checkbox\";\r\nimport {AudioClip} from \"../persistor\";\r\n\r\n\r\n @Component({\r\n\r\n selector: 'audio-display-control',\r\n\r\n template: `\r\n <div #controlPanel style=\"display:flex;flex-direction: row;\">\r\n <fieldset>\r\n\r\n <legend>Play</legend>\r\n\r\n <button (click)=\"playStartAction?.perform()\" [disabled]=\"playStartAction?.disabled\"\r\n [style.color]=\"playStartAction?.disabled ? 'grey' : 'green'\" matTooltip=\"Play all\">\r\n <mat-icon>play_arrow</mat-icon>\r\n </button>\r\n <button (click)=\"playSelectionAction?.perform()\" [disabled]=\"playSelectionAction?.disabled\"\r\n [style.color]=\"playSelectionAction?.disabled ? 'grey' : 'green'\" matTooltip=\"Play selection\">\r\n <mat-icon>play_circle_outline</mat-icon>\r\n </button>\r\n <button (click)=\"playStopAction?.perform()\" [disabled]=\"playStopAction?.disabled\"\r\n [style.color]=\"playStopAction?.disabled ? 'grey' : 'yellow'\">\r\n <mat-icon>stop</mat-icon>\r\n </button> \r\n <mat-checkbox #autoplaySelectionCheckbox (change)=\"autoPlaySelectionChange($event)\">Autoplay on select\r\n </mat-checkbox>\r\n </fieldset>\r\n <fieldset>\r\n\r\n <legend>Zoom</legend>\r\n <button (click)=\"zoomFitToPanelAction?.perform()\"\r\n [disabled]=\"zoomFitToPanelAction?.disabled\">{{zoomFitToPanelAction?.name}}</button>\r\n <button (click)=\"zoomOutAction?.perform()\"\r\n [disabled]=\"zoomOutAction?.disabled\">{{zoomOutAction?.name}}</button>\r\n <button (click)=\"zoomInAction?.perform()\"\r\n [disabled]=\"zoomInAction?.disabled\">{{zoomInAction?.name}}</button>\r\n <button (click)=\"zoomSelectedAction?.perform()\"\r\n [disabled]=\"zoomSelectedAction?.disabled\">{{zoomSelectedAction?.name}}</button>\r\n </fieldset>\r\n <fieldset>\r\n <legend>Selection</legend>\r\n {{audioClip?.selection?.leftFrame}} <span\r\n *ngIf=\"audioClip?.selection\">to</span> {{audioClip?.selection?.rightFrame}}\r\n <button (click)=\"clearSelection()\" [disabled]=\"audioClip?.selection==null\"\r\n [style.color]=\"hasSelection() ? 'red' : 'grey'\" matTooltip=\"Clear selection\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n\r\n </fieldset>\r\n </div>`,\r\n styles: [\r\n `:host {\r\n flex: 0;\r\n\r\n }`]\r\n\r\n })\r\n\texport class AudioDisplayControl implements AfterContentInit {\r\n\r\n @Input() audioClip: AudioClip|null=null;\r\n\r\n @ViewChild(MatCheckbox, { static: true })\r\n private autoplaySelectedCheckbox: MatCheckbox|null=null;\r\n @Input() playStartAction: Action<void>|undefined;\r\n @Input() playSelectionAction: Action<void>|undefined;\r\n @Input() playStopAction: Action<void>|undefined;\r\n @Input() zoomInAction: Action<void>|null=null;\r\n @Input() zoomOutAction: Action<void>|null=null;\r\n @Input() zoomFitToPanelAction: Action<void>|undefined;\r\n @Input() zoomSelectedAction: Action<void>|undefined;\r\n @Input() autoPlayOnSelectToggleAction: Action<boolean>|undefined;\r\n\t status:string|null=null;\r\n\r\n\t\taudio:any;\r\n\r\n\t\tconstructor(private ref: ChangeDetectorRef) {\r\n\r\n\t\t}\r\n\r\n ngAfterContentInit() {\r\n\r\n\t\t}\r\n\r\n clearSelection(){\r\n if(this.audioClip!=null){\r\n this.audioClip.selection=null\r\n }\r\n }\r\n\r\n hasSelection():boolean{\r\n let hs=false;\r\n if(this.audioClip){\r\n hs=(this.audioClip.selection!=null);\r\n }\r\n return hs;\r\n }\r\n\r\n autoPlaySelectionChange(ch: MatCheckboxChange) {\r\n if (this.autoPlayOnSelectToggleAction) {\r\n this.autoPlayOnSelectToggleAction.perform(ch.checked)\r\n }\r\n }\r\n\r\n\t\terror(){\r\n\t\t\tthis.status = 'ERROR';\r\n\t\t}\r\n\r\n\r\n }\r\n\r\n","import {\r\n Component,\r\n ViewChild,\r\n ChangeDetectorRef,\r\n AfterViewInit, Input, OnInit, ElementRef,\r\n} from '@angular/core'\r\n\r\nimport {AudioClip, Selection} from './persistor'\r\nimport {ActivatedRoute} from \"@angular/router\";\r\nimport {Action} from \"../action/action\";\r\nimport {AudioDisplayScrollPane} from \"./ui/audio_display_scroll_pane\";\r\n\r\n@Component({\r\n\r\n selector: 'app-audiodisplay',\r\n\r\n template: `\r\n\r\n <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>\r\n\r\n <audio-display-control [audioClip]=\"audioClip\"\r\n [playStartAction]=\"playStartAction\"\r\n [playSelectionAction]=\"playSelectionAction\"\r\n [playStopAction]=\"playStopAction\"\r\n [autoPlayOnSelectToggleAction]=\"autoPlayOnSelectToggleAction\"\r\n [zoomInAction]=\"zoomInAction\"\r\n [zoomOutAction]=\"zoomOutAction\"\r\n [zoomSelectedAction]=\"zoomSelectedAction\"\r\n [zoomFitToPanelAction]=\"zoomFitToPanelAction\"></audio-display-control>\r\n `,\r\n styles: [\r\n `:host {\r\n display: flex;\r\n flex-direction: column;\r\n position: absolute;\r\n bottom: 0px;\r\n height: 100%;\r\n width: 100%;\r\n overflow: hidden;\r\n padding: 20px;\r\n z-index: 5;\r\n box-sizing: border-box;\r\n background-color: rgba(230, 230, 230, 1.0)\r\n }`,`\r\n legend{\r\n margin-left: 1em; padding: 0.2em 0.8em;font-size: 0.8em;\r\n }`,`\r\n fieldset{\r\n border: 1px darkgray solid\r\n }\r\n `]\r\n\r\n})\r\nexport class AudioDisplay implements OnInit,AfterViewInit {\r\n\r\n parentE: HTMLElement;\r\n private _audioClip:AudioClip|null=null\r\n\r\n @Input()\r\n playStartAction: Action<void>|undefined;\r\n @Input()\r\n playStopAction: Action<void>|undefined;\r\n @Input()\r\n playSelectionAction:Action<void>|undefined;\r\n @Input()\r\n autoPlayOnSelectToggleAction!:Action<boolean>|undefined;\r\n\r\n zoomFitToPanelAction!:Action<void>;\r\n zoomSelectedAction!:Action<void>\r\n zoomInAction!:Action<void>;\r\n zoomOutAction!:Action<void>;\r\n\r\n clearSelectionAction!:Action<void>\r\n\r\n status: string;\r\n\r\n audio: any;\r\n\r\n @ViewChild(AudioDisplayScrollPane, { static: true })\r\n audioDisplayScrollPane!: AudioDisplayScrollPane;\r\n\r\n constructor(private route: ActivatedRoute, private ref: ChangeDetectorRef,private eRef:ElementRef) {\r\n //console.log(\"constructor: \"+this.ac);\r\n this.parentE=this.eRef.nativeElement;\r\n this.playStartAction = new Action(\"Start\");\r\n this.playSelectionAction=new Action(\"Play selected\");\r\n this.playStopAction = new Action(\"Stop\");\r\n this.status=\"Player created.\";\r\n\r\n }\r\n\r\n ngOnInit(){\r\n this.zoomSelectedAction=this.audioDisplayScrollPane.zoomSelectedAction\r\n this.zoomFitToPanelAction=this.audioDisplayScrollPane.zoomFitToPanelAction\r\n this.zoomOutAction=this.audioDisplayScrollPane.zoomOutAction\r\n this.zoomInAction=this.audioDisplayScrollPane.zoomInAction\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n this.layout();\r\n let heightListener=new MutationObserver((mrs:Array<MutationRecord>,mo:MutationObserver)=>{\r\n mrs.forEach((mr:MutationRecord)=>{\r\n if('attributes'===mr.type && ('class'===mr.attributeName || 'style'===mr.attributeName)){\r\n this.layout();\r\n }\r\n })\r\n });\r\n heightListener.observe(this.parentE,{attributes: true,childList: true, characterData: true});\r\n }\r\n\r\n\r\n layout(){\r\n this.audioDisplayScrollPane.layout();\r\n }\r\n\r\n\r\n started() {\r\n console.log(\"Play started\");\r\n this.status = 'Playing...';\r\n }\r\n\r\n\r\n @Input()\r\n set audioData(audioBuffer: AudioBuffer){\r\n this.audioDisplayScrollPane.audioData = audioBuffer;\r\n if(this.playStartAction) {\r\n this.playStartAction.disabled = (audioBuffer == null)\r\n }\r\n }\r\n\r\n @Input()\r\n set audioClip(audioClip: AudioClip | null) {\r\n\r\n let audioData:AudioBuffer|null=null;\r\n let sel:Selection|null=null;\r\n if(audioClip){\r\n audioData=audioClip.buffer;\r\n sel=audioClip.selection;\r\n }\r\n this._audioClip=audioClip\r\n this.audioDisplayScrollPane.audioClip = audioClip;\r\n //this.playStartAction.disabled = (audioData!==null)\r\n }\r\n\r\n get audioClip():AudioClip|null{\r\n return this._audioClip\r\n }\r\n\r\n set playFramePosition(playFramePosition:number){\r\n this.audioDisplayScrollPane.playFramePosition = playFramePosition\r\n }\r\n\r\n error() {\r\n this.status = 'ERROR';\r\n }\r\n\r\n}\r\n\r\n","\n\nimport {Directive, ElementRef, Input} from \"@angular/core\";\n@Directive({\n selector: \"[scrollIntoViewToBottom]\"\n})\nexport class ScrollIntoViewDirective{\n\n constructor(private elRef:ElementRef){}\n @Input()\n set scrollIntoViewToBottom(siv:boolean){\n if(siv){\n this.elRef.nativeElement.scrollIntoView(false);\n }\n }\n\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core'\r\nimport {Item} from './item';\r\n\r\n\r\n@Component({\r\n\r\n selector: 'app-sprprogress',\r\n\r\n template: `\r\n\r\n <table class=\"mat-typography\">\r\n <thead>\r\n <tr>\r\n <th>#</th><!--<th>Code</th>-->\r\n <th>Prompt</th>\r\n <th>Status</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngIf=\"items\">\r\n\r\n <tr *ngFor=\"let item of items; let itIdx=index;\"\r\n (click)=\"rowSelect=itIdx\" [class.selRow]=\"itIdx===selectedItemIdx\"\r\n [scrollIntoViewToBottom]=\"itIdx===selectedItemIdx\">\r\n <td>{{itIdx}}</td>\r\n <td class=\"promptDescriptor\">{{item.promptAsString}}</td>\r\n <td>\r\n <mat-icon *ngIf=\"item.recs && item.recs.length>0\">done</mat-icon>\r\n\r\n </td>\r\n </tr>\r\n </ng-container>\r\n\r\n </tbody>\r\n </table>\r\n `,\r\n styles: [`:host {\r\n overflow-x: hidden;\r\n overflow-y: scroll;\r\n padding: 10pt;\r\n /*flex: 0.1 0 300px; \r\n min-width: 300px; */\r\n flex: 0.1 0 content;\r\n background: white;\r\n /* Workaround for Firefox\r\n If the progress table gets long (script with many items) FF increases the height of the overflow progressContainer and\r\n the whole app does not fit into the page anymore. The app overflows and shows a vertical scrollbar for the whole app.\r\n See http://stackoverflow.com/questions/28636832/firefox-overflow-y-not-working-with-nested-flexbox\r\n */\r\n /* min-height:0px; */\r\n min-height: 1px;\r\n }`,\r\n `table {\r\n min-height: 1px;\r\n border-collapse: collapse;\r\n /* Tables do not have a natural min size */\r\n /*min-width: 300px; */\r\n \r\n }\r\n\r\n table, th, td {\r\n border: 1px solid lightgrey;\r\n padding: 0.5em;\r\n \r\n }\r\n\r\n `, `\r\n .selRow {\r\n background: lightblue;\r\n }\r\n `,`.promptDescriptor{\r\n \r\n max-width: 200px;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n }`]\r\n\r\n})\r\nexport class Progress {\r\n @Input() items: Array<Item>|null=null;\r\n @Input() selectedItemIdx = 0;\r\n @Input() enableDownload: boolean=false;\r\n @Output() onRowSelect = new EventEmitter<number>();\r\n @Output()\r\n set rowSelect(rowIdx:number){\r\n this.onRowSelect.emit(rowIdx);\r\n }\r\n\r\n @Output() onShowDoneAction = new EventEmitter<number>();\r\n @Output()\r\n set clickDone(rowIdx:number){\r\n if(this.items &&this.items[rowIdx] && this.items[rowIdx].recs) {\r\n this.onRowSelect.emit(rowIdx);\r\n this.onShowDoneAction.emit(rowIdx);\r\n }\r\n }\r\n\r\n @Output() onDownloadDoneAction = new EventEmitter<number>();\r\n @Output()\r\n set clickDownloadDone(rowIdx:number){\r\n if(this.items && this.items[rowIdx] && this.items[rowIdx].recs) {\r\n this.onRowSelect.emit(rowIdx);\r\n this.onDownloadDoneAction.emit(rowIdx);\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n ViewChild,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n HostListener,\r\n ElementRef,\r\n OnInit,\r\n Renderer2,\r\n HostBinding,\r\n AfterContentChecked\r\n} from \"@angular/core\";\r\n\r\nimport {SimpleTrafficLight} from \"../startstopsignal/ui/simpletrafficlight\";\r\nimport {State as StartStopSignalState} from \"../startstopsignal/startstopsignal\";\r\nimport {Item} from \"./item\";\r\nimport {Block, Text, Mediaitem, PromptItem} from \"../script/script\";\r\nimport {TransportActions} from \"./controlpanel\";\r\nimport {Action} from \"../../action/action\";\r\nimport {AudioDisplay} from \"../../audio/audio_display\";\r\nimport {ProjectService} from \"../project/project.service\";\r\nimport {AudioClip} from \"../../audio/persistor\";\r\n\r\n@Component({\r\n\r\n selector: 'spr-recinstructions',\r\n\r\n template: `\r\n\r\n {{displayText()}}\r\n `,\r\n styles: [`:host {\r\n\r\n justify-content: left; /* align horizontal center */\r\n align-items: flex-start; /* align vertical center */\r\n background: white;\r\n text-align: left;\r\n font-size: 1em;\r\n flex: 0;\r\n width: 100%;\r\n }\r\n `]\r\n})\r\nexport class Recinstructions {\r\n @Input() recinstructions: string|null| undefined;\r\n @Input() selectedItemIdx: number|null|undefined;\r\n @Input() itemCount: number|undefined;\r\n\r\n displayText():string{\r\n let riTxt:string='';\r\n if(this.itemCount && this.selectedItemIdx){\r\n riTxt=riTxt+this.selectedItemIdx+'/'+(this.itemCount-1);\r\n }\r\n if(this.recinstructions){\r\n riTxt=riTxt+': '+this.recinstructions;\r\n }\r\n return riTxt;\r\n }\r\n}\r\n\r\n@Component({\r\n\r\n selector: 'app-sprprompter',\r\n\r\n template: `\r\n\r\n <!--<ng-template [ngIf]=\"text\">{{text}}</ng-template>-->\r\n <!-- <img *ngIf=\"src\" #promptImage [src]=\"srcUrl()\" [height]=\"prompterHeight-20\" /> -->\r\n `,\r\n styles: [`:host {\r\n\r\n justify-content: center; /* align horizontal center */\r\n align-items: center; /* align vertical center */\r\n background: white;\r\n text-align: center;\r\n /* font-size: 2em; */\r\n line-height: 1.2em;\r\n font-weight: bold;\r\n /* Use only natural size of the prompt */\r\n /* The prompter compnent then ets aligned vertically centered */\r\n flex: 0 1;\r\n\r\n }`, `:host(.fill) {\r\n /* Use all space to scale images */\r\n flex: 3;\r\n width: 100%;\r\n height: 100%;\r\n max-height: 100%;\r\n max-width: 100%;\r\n /* A separate flex container might be necessayr to alighn centered */\r\n vertical-align: middle; /* TODO does not work, image is not vertically centered */\r\n }`]\r\n})\r\nexport class Prompter {\r\n @Input() projectName: string | undefined;\r\n private _promptMediaItems: Array<Mediaitem>|null|undefined=null\r\n\r\n @Input() prompterHeight: number=0;\r\n private _text: string|undefined|null = null;\r\n private _src: string|undefined|null = null;\r\n private _blocks: Array<Block>|undefined;\r\n mimetype!: string;\r\n private currPromptChild: HTMLElement|null = null;\r\n\r\n @HostBinding('class.fill') public prompterStyleFill = false;\r\n\r\n constructor(private elRef: ElementRef, private renderer: Renderer2, private projectService: ProjectService) {\r\n\r\n }\r\n\r\n get text() {\r\n return this._text;\r\n }\r\n\r\n get src() {\r\n return this._src;\r\n }\r\n\r\n srcUrl(): string|null{\r\n if (this.projectName && this._src) {\r\n return this.projectService.projectResourceUrl(this.projectName, this._src);\r\n }\r\n return null;\r\n }\r\n\r\n width():number|null{\r\n if(this.elRef){\r\n if(this.elRef.nativeElement){\r\n return this.elRef.nativeElement.clientWidth\r\n }\r\n }\r\n return null;\r\n }\r\n height():number|null{\r\n if(this.elRef){\r\n if(this.elRef.nativeElement){\r\n return this.elRef.nativeElement.clientHeight\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private appendTextElement(parentEl:HTMLElement,txt:Text){\r\n let t: string = <string>txt.text\r\n let txtNd = this.renderer.createText(t)\r\n if(txt.decoration || txt.color){\r\n let spEl = this.renderer.createElement('span')\r\n let styleStr=''\r\n if(txt.decoration) {\r\n styleStr = styleStr +'text-decoration: ' + txt.decoration+';'\r\n }\r\n if(txt.color){\r\n styleStr = styleStr +'color: ' + txt.color+';'\r\n }\r\n spEl.style=styleStr\r\n this.renderer.appendChild(parentEl, spEl)\r\n this.renderer.appendChild(spEl, txtNd)\r\n }else {\r\n this.renderer.appendChild(parentEl, txtNd)\r\n }\r\n }\r\n\r\n @Input() set promptMediaItems(pMis: Array<Mediaitem>|null) {\r\n this._promptMediaItems = pMis\r\n if (this.currPromptChild != null) {\r\n this.renderer.removeChild(this.elRef.nativeElement, this.currPromptChild)\r\n }\r\n if (this._promptMediaItems && this._promptMediaItems.length == 1) {\r\n let mi = this._promptMediaItems[0]\r\n this.mimetype = 'text/plain'\r\n if (mi.mimetype) {\r\n this.mimetype = mi.mimetype.trim();\r\n }\r\n if (this.mimetype === 'text/plain') {\r\n this._text = mi.text\r\n this._src = null;\r\n let prTxt='';\r\n if(this._text){\r\n prTxt=this._text;\r\n }\r\n this.currPromptChild = this.renderer.createText(prTxt);\r\n this.prompterStyleFill = false;\r\n this.renderer.appendChild(this.elRef.nativeElement, this.currPromptChild);\r\n } else if (this.mimetype === 'text/x-prompt') {\r\n //this.rendering=true\r\n this._text=null;\r\n this._src=null;\r\n this._blocks=new Array<Block>();\r\n let pd=mi.promptDoc\r\n if(pd){\r\n let pdBody=pd.body\r\n if(pdBody){\r\n this._blocks=pdBody.blocks;\r\n }\r\n }\r\n\r\n this.prompterStyleFill = false\r\n this.currPromptChild = this.renderer.createElement('div')\r\n if(this._blocks) {\r\n for (let bi = 0; bi < this._blocks.length; bi++) {\r\n let bl = this._blocks[bi]\r\n if ('p' === bl.type) {\r\n let pBlEl = this.renderer.createElement('p')\r\n this.renderer.appendChild(this.currPromptChild, pBlEl)\r\n for (let ti = 0; ti < bl.texts.length; ti++) {\r\n let txt = bl.texts[ti]\r\n if (txt) {\r\n if ('text' === txt.type) {\r\n this.appendTextElement(pBlEl, txt)\r\n } else if ('font' === txt.type) {\r\n let spEl = this.renderer.createElement('span')\r\n let styleStr = ''\r\n if (txt.style) {\r\n styleStr = styleStr + 'font-style: ' + txt.style + ';'\r\n }\r\n if (txt.size) {\r\n styleStr = styleStr + 'font-size: ' + txt.size + ';'\r\n }\r\n if (txt.weight) {\r\n styleStr = styleStr + 'font-weight: ' + txt.weight + ';'\r\n }\r\n spEl.style = styleStr\r\n this.renderer.appendChild(pBlEl, spEl)\r\n this.appendTextElement(spEl, <Text>txt.text)\r\n } else if ('linebreak' === txt.type) {\r\n let brEl = this.renderer.createElement('br')\r\n this.renderer.appendChild(pBlEl, brEl)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this.renderer.appendChild(this.elRef.nativeElement, this.currPromptChild)\r\n //this.rendering=false\r\n } else if (this.mimetype.startsWith('image')) {\r\n this._text = null;\r\n this._src = mi.src\r\n let promptImage = new Image()\r\n\r\n this.currPromptChild = promptImage\r\n this.renderer.appendChild(this.elRef.nativeElement, this.currPromptChild)\r\n this.renderer.setStyle(this.currPromptChild, \"max-width\", \"100%\")\r\n this.renderer.setStyle(this.currPromptChild, \"max-height\", \"100%\")\r\n this.prompterStyleFill = true\r\n // TODO vertical alignment\r\n // https://stackoverflow.com/questions/7273338/how-to-vertically-align-an-image-inside-a-div\r\n\r\n //console.log(promptImage.naturalWidth + \"x\"+promptImage.naturalHeight);\r\n promptImage.onload = (ev: Event) => {}\r\n let srcUrl=this.srcUrl();\r\n if(srcUrl) {\r\n promptImage.src = srcUrl;\r\n }\r\n }\r\n\r\n } else {\r\n this._text = null\r\n this._src = null\r\n }\r\n }\r\n}\r\n\r\nexport const VIRTUAL_HEIGHT = 600;\r\nexport const DEFAULT_PROMPT_FONTSIZE = 48;\r\nexport const MIN_FONT_SIZE=6;\r\nexport const FALLBACK_DEF_USER_AGENT_FONT_SIZE = 14;\r\n\r\n@Component({\r\n\r\n selector: 'app-sprpromptcontainer',\r\n\r\n template: `\r\n <app-sprprompter #prompter [projectName]=\"projectName\" [promptMediaItems]=\"mediaitems\" [style.font-size]=\"fontSize+'px'\" [style.visibility]=\"prDisplay\" [prompterHeight]=\"prompterHeight\"></app-sprprompter>\r\n `\r\n ,\r\n styles: [`:host {\r\n\r\n flex: 3; /* the container consumes all available space */\r\n padding: 10pt;\r\n height: 100%;\r\n max-height: 100%;\r\n\r\n justify-content: center; /* align horizontal center*/\r\n align-items: center; /* align vertical center */\r\n background: white;\r\n text-align: center;\r\n display: flex;\r\n flex-direction: column;\r\n min-height: 0px;\r\n width: 100%;\r\n }\r\n `]\r\n})\r\nexport class PromptContainer implements OnInit,AfterContentChecked {\r\n @Input() projectName: string | undefined;\r\n private _mediaitems: Array<Mediaitem>|null=null;\r\n\r\n prompterHeight: number = VIRTUAL_HEIGHT\r\n fontSize!: number;\r\n fontSizeChange=false\r\n contentChecked=false;\r\n prDisplay='hidden';\r\n defaultStyle!: CSSStyleDeclaration;\r\n defaultFontSizePx!: number;\r\n\r\n autoFontSize=false;\r\n @ViewChild(Prompter, { static: true }) prompter!: Prompter;\r\n\r\n constructor(private elRef:ElementRef){}\r\n\r\n ngOnInit() {\r\n\r\n // fallback\r\n this.defaultFontSizePx = FALLBACK_DEF_USER_AGENT_FONT_SIZE;\r\n // try to parse default user agent font size (no comment about DOM API design ;) )\r\n this.defaultStyle = window.getComputedStyle(this.elRef.nativeElement);\r\n let defFontSizeStr = this.defaultStyle.fontSize;\r\n if (defFontSizeStr) {\r\n defFontSizeStr = defFontSizeStr.trim();\r\n if (defFontSizeStr.endsWith('px')) {\r\n // parseFloat ignores non number characters at the end (again no comment ;) )\r\n this.defaultFontSizePx = parseFloat(defFontSizeStr);\r\n //console.info(\"Default font size: \"+this.defaultFontSizePx)\r\n }\r\n }\r\n this.contentChecked = false;\r\n }\r\n\r\n ngAfterContentChecked(): void {\r\n if(this.autoFontSize) {\r\n if (this.fontSizeChange) {\r\n //console.log(\"ngaftercontentchecked, call fontSizeToFit \");\r\n // check prompter size again\r\n this.fontSizeToFit()\r\n } else {\r\n // font size was checked, but we need to check again after angular content check\r\n if (!this.contentChecked) {\r\n this.contentChecked = true;\r\n //console.log(\"ngaftercontentchecked, not font size changed, call \");\r\n this.fontSizeToFit()\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n @Input() set mediaitems(mediaitems:Array<Mediaitem>|null){\r\n\r\n this._mediaitems = mediaitems\r\n\r\n let mimetype:string|null=null;\r\n if (this._mediaitems && this._mediaitems.length == 1) {\r\n let mi = this._mediaitems[0]\r\n mimetype = 'text/plain'\r\n if (mi.mimetype) {\r\n mimetype = mi.mimetype.trim();\r\n }\r\n if(mi.defaultVirtualViewBox){\r\n this.prompterHeight=mi.defaultVirtualViewBox.height\r\n }\r\n }else{\r\n this.prompterHeight=VIRTUAL_HEIGHT\r\n }\r\n this.prompter.promptMediaItems=this._mediaitems\r\n this.autoFontSize=(mimetype!=null && mimetype.startsWith('text/'));\r\n if(this.autoFontSize){\r\n this.fontSizeChange = true;\r\n this.contentChecked = false\r\n this.prDisplay = 'hidden'\r\n this.layout()\r\n }\r\n }\r\n\r\n get mediaitems():Array<Mediaitem>|null{\r\n return this._mediaitems;\r\n }\r\n\r\n\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event: Event): void {\r\n //console.debug(\"onresize, call fontSizeToFit hook \");\r\n this.layout();\r\n }\r\n\r\n private layout() {\r\n if(this.autoFontSize && this.elRef) {\r\n\r\n this.fontSizeChange=true;\r\n this.contentChecked = false\r\n this.prDisplay = 'hidden'\r\n let elH = this.elRef.nativeElement.offsetHeight;\r\n // prompt text font size should scale according to prompt container height\r\n let scaledSize = Math.round((elH / this.prompterHeight) * DEFAULT_PROMPT_FONTSIZE);\r\n\r\n // min prompt font size is default user agent size\r\n let newSize = Math.max(scaledSize, this.defaultFontSizePx);\r\n if (this.fontSize !== newSize) {\r\n this.fontSize = newSize;\r\n }\r\n\r\n //console.log(\"layout, call fontSizeToFit hook \");\r\n window.setTimeout(() => this.fontSizeToFit())\r\n\r\n }\r\n }\r\n\r\n\r\n private fontSizeToFit(){\r\n if(this.prompter) {\r\n let pW=this.prompter.width();\r\n let pH=this.prompter.height();\r\n if (this._mediaitems && this.elRef && pW && pH) {\r\n let nEl = this.elRef.nativeElement\r\n //console.log(\"prompter: \" + this.prompter.width() + \"x\" + this.prompter.height()+ \" font size: \"+this.fontSize)\r\n if (this.fontSize >= MIN_FONT_SIZE && (pW > nEl.offsetWidth || pH > nEl.offsetHeight)) {\r\n // prompter oversizes prompter container. Decrease font size.\r\n // set invisible during font size checks\r\n this.prDisplay = 'hidden'\r\n // decrease font size\r\n this.fontSize = this.fontSize - 1\r\n // console.log(\"Decreased font size: \"+this.fontSize )\r\n // Set flags\r\n this.fontSizeChange = true\r\n this.contentChecked = false\r\n // hook the next check\r\n window.setTimeout(() => this.fontSizeToFit())\r\n } else {\r\n // prompter fits in prompter container, font size should be fine\r\n\r\n //console.log(\"prDisplay: \"+this.prDisplay)\r\n\r\n //if(this.contentChecked && ! this.fontSizeChange) {\r\n //console.log(\"Display!\")\r\n // set prompter visible now\r\n this.prDisplay = 'visible'\r\n //}\r\n this.fontSizeChange = false\r\n }\r\n //console.log(\"Prompt text width: \"+textSize.width+\" \"+this.elRef.nativeElement.offsetWidth+\"x\"+this.elRef.nativeElement.offsetHeight)\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n@Component({\r\n\r\n selector: 'app-sprpromptingcontainer',\r\n\r\n template: `\r\n <spr-recinstructions [selectedItemIdx]=\"selectedItemIdx\" [itemCount]=\"itemCount\"\r\n [recinstructions]=\"promptItem?.recinstructions?.recinstructions\"></spr-recinstructions>\r\n <app-sprpromptcontainer [projectName]=\"projectName\"\r\n [mediaitems]=\"showPrompt?(promptItem?promptItem.mediaitems:null):null\"></app-sprpromptcontainer>\r\n\r\n `\r\n ,\r\n styles: [`:host {\r\n position: relative;\r\n flex: 3; /* the container consumes all available space */\r\n padding: 10pt;\r\n justify-content: center; /* align horizontal center*/\r\n align-items: center; /* align vertical center */\r\n background: white;\r\n text-align: center;\r\n display: flex;\r\n flex-direction: column;\r\n min-height: 0px;\r\n }\r\n `]\r\n})\r\nexport class PromptingContainer {\r\n @Input() projectName: string | undefined;\r\n @Input() promptItem: PromptItem|null=null;\r\n @Input() showPrompt: boolean=false;\r\n @Input() selectedItemIdx!: number;\r\n @Input() itemCount: number|undefined;\r\n\r\n @Input() transportActions!: TransportActions;\r\n\r\n private e!: HTMLDivElement;\r\n private startX: number | null = null\r\n private touchStartTimeStamp: number | null=null;\r\n\r\n constructor(private ref: ElementRef) {\r\n type TouchStart = {}\r\n }\r\n\r\n ngOnInit() {\r\n this.e = this.ref.nativeElement;\r\n }\r\n\r\n @HostListener('touchstart', ['$event'])\r\n onTouchstart(ev: TouchEvent | any) {\r\n //console.log(\"Touch start! \")\r\n if (!(this.transportActions.fwdAction.disabled &&\r\n this.transportActions.bwdAction.disabled &&\r\n this.transportActions.nextAction.disabled)) {\r\n let targetTouchesLen = ev.targetTouches.length;\r\n //for(let ti=0;ti<ev.targetTouches.length;ti++){\r\n //let t=ev.targetTouches.item(ti);\r\n // All x values are the same ??\r\n //console.log(\"Touch #\"+ti+\": pageX: \"+t.pageX+\" clientX: \"+t.clientX+\" screenX: \"+t.screenX)\r\n //}\r\n if (targetTouchesLen == 1) {\r\n // single touch\r\n let t = ev.targetTouches.item(0);\r\n if (t) {\r\n this.startX = Math.round(t.screenX);\r\n this.touchStartTimeStamp = ev.timeStamp;\r\n this.e.style.transition = 'none';\r\n //console.log(\"Touch start x: \"+this.startX)\r\n }\r\n }\r\n\r\n ev.preventDefault();\r\n }\r\n }\r\n\r\n @HostListener('touchend', ['$event'])\r\n onTouchEnd(ev: TouchEvent | any) {\r\n //console.log(\"Touch end!\")\r\n // Reset offset shift\r\n if (!(this.transportActions.fwdAction.disabled && this.transportActions.bwdAction.disabled &&\r\n this.transportActions.nextAction.disabled)) {\r\n\r\n let changedTouchesLen = ev.changedTouches.length;\r\n //console.log(changedTouchesLen+\" \"+this.startX)\r\n if (changedTouchesLen == 1 && this.startX) {\r\n // single touch\r\n let t = ev.changedTouches.item(0);\r\n if (t) {\r\n let deltaX = Math.round(t.clientX - this.startX);\r\n let touchMoveSpeed = 0;\r\n if (this.touchStartTimeStamp) {\r\n touchMoveSpeed = deltaX / (ev.timeStamp - this.touchStartTimeStamp);\r\n }\r\n let futureDeltaX = deltaX + (800 * touchMoveSpeed);\r\n //console.log(\"DeltaX: \" + deltaX + \" Future deltaX: \" + futureDeltaX + \" width: \" + this.e.offsetWidth)\r\n if (futureDeltaX > this.e.offsetWidth / 2) {\r\n //console.log(\"Swipe right detected!!\")\r\n //this.swipedRight.emit()\r\n if (!this.transportActions.bwdAction.disabled) {\r\n this.transportActions.bwdAction.perform();\r\n }\r\n this.e.style.left = -this.e.offsetLeft + \"px\";\r\n }\r\n if (-futureDeltaX > this.e.offsetWidth / 2) {\r\n //console.log(\"Swipe left detected!!\")\r\n this.e.style.left = -this.e.offsetLeft + \"px\";\r\n //this.swipedLeft.emit()\r\n if (!this.transportActions.nextAction.disabled) {\r\n this.transportActions.nextAction.perform();\r\n } else if (!this.transportActions.fwdAction.disabled) {\r\n this.transportActions.fwdAction.perform();\r\n }\r\n } else {\r\n }\r\n }\r\n }\r\n\r\n // reset animated\r\n this.e.style.transition = \"left 0.8s\";\r\n }\r\n this.startX = null;\r\n this.touchStartTimeStamp = null;\r\n this.e.style.left = \"0px\";\r\n ev.preventDefault();\r\n\r\n }\r\n\r\n @HostListener('touchmove', ['$event'])\r\n onTouchMove(ev: TouchEvent | any) {\r\n //console.log(\"Touch move!\")\r\n if (!(this.transportActions.fwdAction.disabled && this.transportActions.bwdAction.disabled &&\r\n this.transportActions.nextAction.disabled)) {\r\n let targetTouchesLen = ev.targetTouches.length;\r\n if (targetTouchesLen == 1 && this.startX) {\r\n // single touch\r\n let t = ev.targetTouches.item(0);\r\n if (t) {\r\n let deltaX = Math.round(t.screenX - this.startX);\r\n this.e.style.left = deltaX + \"px\";\r\n // console.log(\"Touch move delta x: \"+deltaX)\r\n }\r\n }\r\n ev.preventDefault();\r\n }\r\n }\r\n\r\n @HostListener('touchcancel', ['$event'])\r\n onTouchCancel(ev: TouchEvent | any) {\r\n //console.log(\"Touch cancel!\")\r\n this.e.style.left = \"0px\";\r\n ev.preventDefault();\r\n }\r\n\r\n}\r\n\r\n\r\n@Component({\r\n\r\n selector: 'app-sprprompting',\r\n\r\n template: `\r\n\r\n <app-simpletrafficlight [status]=\"startStopSignalState\"></app-simpletrafficlight>\r\n <app-sprpromptingcontainer [projectName]=\"projectName\" [promptItem]=\"promptItem\" [showPrompt]=\"showPrompt\"\r\n [itemCount]=\"items?.length\" [selectedItemIdx]=\"selectedItemIdx\"\r\n [transportActions]=\"transportActions\"></app-sprpromptingcontainer>\r\n <app-sprprogress fxHide.xs [items]=\"items\" [selectedItemIdx]=\"selectedItemIdx\"\r\n (onRowSelect)=\"itemSelect($event)\"></app-sprprogress>\r\n <div fxHide.xs #asCt [class.active]=\"!audioSignalCollapsed\">\r\n\r\n <app-audiodisplay #audioSignalContainer [class.active]=\"!audioSignalCollapsed\"\r\n [audioClip]=\"displayAudioClip\"\r\n [playStartAction]=\"playStartAction\"\r\n [playSelectionAction]=\"playSelectionAction\"\r\n [autoPlayOnSelectToggleAction]=\"autoPlayOnSelectToggleAction\"\r\n [playStopAction]=\"playStopAction\"></app-audiodisplay>\r\n\r\n\r\n </div>\r\n\r\n\r\n\r\n `,\r\n styles: [`:host {\r\n position: relative;\r\n margin: 0;\r\n padding: 0;\r\n background: lightgrey;\r\n width: 100%; /* use all horizontal available space */\r\n flex: 1; /* ... and fill rest of vertical available space (other components have flex 0) */\r\n\r\n /* Workaround for Firefox\r\n If the progress table gets long (script with many items) FF increases the height of the overflow progressContainer and\r\n the whole app does not fit into the page anymore. The app overflows and shows a vertical scrollbar for the whole app.\r\n See http://stackoverflow.com/questions/28636832/firefox-overflow-y-not-working-with-nested-flexbox\r\n */\r\n min-height: 0px;\r\n\r\n display: flex; /* flex container: left traffic light, right prompter (container) */\r\n flex-direction: row;\r\n flex-wrap: nowrap; /* wrap could completely destroy the layout */\r\n }`, `\r\n app-simpletrafficlight {\r\n margin: 10px;\r\n min-height: 0px;\r\n z-index: 3;\r\n }\r\n `, `\r\n app-sprprogress {\r\n z-index: 3;\r\n }\r\n `, `\r\n div {\r\n display: none;\r\n position: absolute;\r\n\r\n\r\n /* height: 50%; */\r\n /* width: 100%; */\r\n\r\n /* overflow: hidden; */\r\n\r\n /* margin: 20px; */\r\n /* border: 20px; */\r\n z-index: 5;\r\n /*background-color: red; */\r\n }`, `\r\n div.active {\r\n display: flex;\r\n position: absolute;\r\n bottom: 0px;\r\n /*left: 0px; */\r\n\r\n height: 90%;\r\n width: 100%;\r\n\r\n overflow: hidden;\r\n\r\n padding: 0px;\r\n /* margin: 20px; */\r\n /* border: 20px; */\r\n z-index: 5;\r\n box-sizing: border-box;\r\n background-color: rgba(0, 0, 0, 0)\r\n\r\n }`\r\n ]\r\n\r\n})\r\n\r\nexport class Prompting {\r\n @ViewChild(SimpleTrafficLight, { static: true }) simpleTrafficLight!: SimpleTrafficLight;\r\n @ViewChild(AudioDisplay, { static: true }) audioDisplay!: AudioDisplay;\r\n @Input() projectName: string | undefined;\r\n @Input() startStopSignalState!: StartStopSignalState;\r\n @Input() promptItem: PromptItem | null=null;\r\n @Input() showPrompt: boolean=false;\r\n @Input() items: Array<Item>|null=null;\r\n @Input() selectedItemIdx!: number;\r\n @Input() transportActions!: TransportActions;\r\n @Input() enableDownload: boolean=false;\r\n\r\n @Input() audioSignalCollapsed: boolean=true;\r\n @Input() displayAudioClip: AudioClip | null=null;\r\n @Input() playStartAction: Action<void>|undefined;\r\n @Input() playSelectionAction: Action<void>|undefined;\r\n @Input() autoPlayOnSelectToggleAction:Action<boolean>|undefined;\r\n @Input() playStopAction: Action<void>|undefined;\r\n @Output() onItemSelect = new EventEmitter<number>();\r\n @Output() onNextItem = new EventEmitter();\r\n @Output() onPrevItem = new EventEmitter();\r\n\r\n itemSelect(rowIdx: number) {\r\n this.onItemSelect.emit(rowIdx);\r\n }\r\n\r\n nextItem() {\r\n this.onNextItem.emit();\r\n }\r\n\r\n prevItem() {\r\n this.onPrevItem.emit();\r\n }\r\n}\r\n\r\n","export interface Float32ArrayOutStream {\r\n\r\n write(buffers: Array<Float32Array>): number;\r\n\r\n flush(): void;\r\n\r\n close(): void;\r\n}\r\n\r\nexport class Float32ArrayChunkerOutStream implements Float32ArrayOutStream {\r\n\r\n private bufs = new Array<Float32Array>();\r\n private filled: number;\r\n\r\n private _channels: number=0;\r\n private _chunkSize: number=0;\r\n\r\n private receivedFrames: number;\r\n private sentFrames: number;\r\n\r\n constructor(private outStream: Float32ArrayOutStream) {\r\n this.filled = 0;\r\n this.receivedFrames = 0;\r\n this.sentFrames = 0;\r\n }\r\n\r\n private createBuffers() {\r\n this.bufs = new Array<Float32Array>(this._channels);\r\n for (let ch = 0; ch < this._channels; ch++) {\r\n this.bufs[ch] = new Float32Array(this._chunkSize);\r\n }\r\n }\r\n\r\n set chunkSize(chunkSize: number) {\r\n this._chunkSize = chunkSize;\r\n this.createBuffers();\r\n }\r\n\r\n set channels(channels: number) {\r\n this._channels = channels;\r\n this.createBuffers();\r\n }\r\n\r\n write(buffers: Array<Float32Array>): number {\r\n\r\n let copied = 0;\r\n if(buffers.length>0) {\r\n let buffersLen = buffers[0].length;\r\n this.receivedFrames += buffersLen;\r\n let avail = buffersLen;\r\n // Fill out buffers until all values copied\r\n\r\n while (avail > 0) {\r\n let toFill = this._chunkSize - this.filled;\r\n if (toFill > avail) {\r\n toFill = avail;\r\n }\r\n let sliceEnd = copied + toFill;\r\n\r\n // Firefox on Android sends only the first channel\r\n for (let ch = 0; ch < buffersLen; ch++) {\r\n if(buffers[ch]) {\r\n let cpPrt = buffers[ch].slice(copied, sliceEnd);\r\n let buf = this.bufs[ch];\r\n buf.set(cpPrt, this.filled);\r\n }\r\n }\r\n copied += toFill;\r\n avail -= toFill;\r\n this.filled += toFill;\r\n if (this.filled == this._chunkSize) {\r\n this.outStream.write(this.bufs);\r\n this.sentFrames += this.filled;\r\n this.filled = 0;\r\n\r\n }\r\n }\r\n }\r\n return copied;\r\n }\r\n\r\n flush(): void {\r\n if (this.filled > 0) {\r\n let restBufs = new Array<Float32Array>(this._channels);\r\n for (let ch = 0; ch < this._channels; ch++) {\r\n restBufs[ch] = this.bufs[ch].slice(0, this.filled);\r\n }\r\n this.outStream.write(restBufs);\r\n this.outStream.flush();\r\n this.sentFrames += this.filled;\r\n this.filled = 0;\r\n }\r\n }\r\n\r\n\r\n close(): void {\r\n this.outStream.close();\r\n }\r\n}\r\n","import {Float32ArrayChunkerOutStream, Float32ArrayOutStream} from \"../../io/stream\";\r\n\r\nexport interface AudioFloat32OutStream extends Float32ArrayOutStream{\r\n setFormat(channels: number,sampleRate:number):void;\r\n}\r\n\r\nexport interface SequenceAudioFloat32OutStream extends AudioFloat32OutStream{\r\n nextStream():void;\r\n}\r\n\r\n\r\n\r\nexport class SequenceAudioFloat32ChunkerOutStream extends Float32ArrayChunkerOutStream implements SequenceAudioFloat32OutStream{\r\n\r\n private sampleRate:number|null=null;\r\n private sequenceAudioFloat32OutStream:SequenceAudioFloat32OutStream;\r\n constructor(outStream:SequenceAudioFloat32OutStream, private chunkDurationSeconds:number){\r\n super(outStream);\r\n this.sequenceAudioFloat32OutStream=outStream;\r\n }\r\n\r\n setFormat(channels: number,sampleRate:number):void{\r\n this.channels=channels;\r\n this.sampleRate=sampleRate;\r\n this.chunkSize=Math.round(sampleRate*this.chunkDurationSeconds);\r\n this.sequenceAudioFloat32OutStream.setFormat(channels,sampleRate);\r\n }\r\n nextStream():void{\r\n this.sequenceAudioFloat32OutStream.nextStream();\r\n }\r\n}\r\n","import {Action} from '../../action/action'\r\nimport {\r\n Component, ViewChild, Input\r\n} from \"@angular/core\";\r\n\r\nimport { MatDialog} from \"@angular/material/dialog\";\r\nimport {ProgressSpinnerMode} from \"@angular/material/progress-spinner\";\r\n\r\n\r\n@Component({\r\n\r\n selector: 'app-sprstatusdisplay',\r\n\r\n template: `\r\n <p matTooltip=\"Status\">\r\n <mat-progress-spinner *ngIf=\"statusWaiting\" color=\"black\" mode=\"indeterminate\" [diameter]=\"30\" [strokeWidth]=\"5\"></mat-progress-spinner><mat-icon *ngIf=\"statusAlertType==='error'\" style=\"color:red\">report_problem</mat-icon>\r\n {{statusMsg}}\r\n </p>\r\n `,\r\n styles: [`:host {\r\n display: inline;\r\n text-align: left;\r\n font-size: smaller;\r\n }`, `\r\n p {\r\n padding: 4px;\r\n white-space:nowrap;\r\n display: inline-block;\r\n }\r\n `, `\r\n mat-progress-spinner {\r\n color: black;\r\n display: inline-block;\r\n }\r\n `, `\r\n span {\r\n color: red;\r\n }\r\n `]\r\n\r\n})\r\n\r\nexport class StatusDisplay {\r\n @Input() statusAlertType = 'info';\r\n @Input() statusMsg = 'Initialize...';\r\n @Input() statusWaiting =false;\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'app-uploadstatus',\r\n template: `\r\n <mat-progress-spinner [mode]=\"spinnerMode\" [color]=\"status\" [diameter]=\"30\" [strokeWidth]=\"5\" [value]=\"_value\" [matTooltip]=\"toolTipText\"></mat-progress-spinner>\r\n `,\r\n styles: [`:host {\r\n flex: 1;\r\n /* align-self: flex-start; */\r\n /*display: inline; */\r\n text-align: left;\r\n }`,`mat-progress-spinner{\r\n display: inline-block;\r\n }`]\r\n})\r\nexport class UploadStatus {\r\n private _awaitNewUpload=false;\r\n spinnerMode:ProgressSpinnerMode = 'determinate';\r\n _status!:string\r\n _value = 100\r\n displayValue:string|null=null\r\n toolTipText:string=''\r\n\r\n private _updateSpinner(){\r\n\r\n let uplMsg;\r\n if (this._awaitNewUpload || this._value === 0) {\r\n this.spinnerMode = 'indeterminate'\r\n this.displayValue=' '\r\n uplMsg='Preparing upload.'\r\n } else {\r\n this.spinnerMode = 'determinate'\r\n this.displayValue=this._value+'%'\r\n if(this._value===100){\r\n uplMsg = 'Upload complete'\r\n }else {\r\n uplMsg = 'Upload progress: ' + this.displayValue\r\n }\r\n }\r\n if(this.status==='warn'){\r\n uplMsg='Upload error occurred. Please check your network connection. '+uplMsg\r\n }\r\n this.toolTipText=uplMsg\r\n }\r\n\r\n @Input()\r\n set value(value: number) {\r\n this._value = value;\r\n this._updateSpinner()\r\n };\r\n\r\n @Input() set awaitNewUpload(awaitNewUpload:boolean){\r\n this._awaitNewUpload=awaitNewUpload\r\n this._updateSpinner()\r\n }\r\n\r\n @Input() set status(status:string){\r\n this._status=status\r\n this._updateSpinner()\r\n }\r\n\r\n get status():string{\r\n return this._status\r\n }\r\n\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'app-sprprogressdisplay',\r\n template: `\r\n <p>{{progressMsg}}</p>\r\n `,\r\n styles: [`:host {\r\n flex: 1;\r\n /* align-self: flex-start; */\r\n /*display: inline; */\r\n width: 100%;\r\n text-align: left;\r\n }`]\r\n})\r\nexport class ProgressDisplay {\r\n progressMsg = '[itemcode]';\r\n}\r\n\r\n\r\n\r\n\r\nexport class TransportActions {\r\n startAction: Action<void>;\r\n stopAction: Action<void>;\r\n nextAction: Action<void>;\r\n fwdNextAction: Action<void>;\r\n pauseAction: Action<void>;\r\n fwdAction: Action<void>;\r\n bwdAction: Action<void>;\r\n\r\n constructor() {\r\n this.startAction = new Action('Start');\r\n this.stopAction = new Action('Stop');\r\n this.nextAction = new Action('Next');\r\n this.pauseAction = new Action('Pause');\r\n this.fwdNextAction = new Action('Next recording');\r\n this.fwdAction = new Action('Forward');\r\n this.bwdAction = new Action('Backward');\r\n\r\n }\r\n}\r\n\r\n@Component({\r\n\r\n selector: 'app-sprtransport',\r\n\r\n template: `\r\n <button id=\"bwdBtn\" *ngIf=\"navigationEnabled\" (click)=\"actions.bwdAction.perform()\" [disabled]=\"bwdDisabled()\"\r\n mat-raised-button>\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button (click)=\"startStopNextPerform()\" [disabled]=\"startDisabled() && stopDisabled() && nextDisabled()\" mat-raised-button>\r\n <mat-icon [style.color]=\"startStopNextIconColor()\">{{startStopNextIconName()}}</mat-icon><mat-icon *ngIf=\"!nextDisabled()\" [style.color]=\"nextDisabled() ? 'grey' : 'black'\">chevron_right</mat-icon>\r\n <span fxShow.xs=\"false\">{{startStopNextName()}}</span>\r\n </button>\r\n <button (click)=\"actions.pauseAction.perform()\" [disabled]=\"pauseDisabled()\" mat-raised-button>\r\n <mat-icon>pause</mat-icon>\r\n <span fxShow.xs=\"false\">Pause</span>\r\n </button>\r\n <button id=\"fwdNextBtn\" *ngIf=\"navigationEnabled\" fxHide.xs (click)=\"actions.fwdNextAction.perform()\" [disabled]=\"fwdNextDisabled()\" mat-raised-button>\r\n <mat-icon>redo</mat-icon>\r\n </button>\r\n <button id=\"fwdBtn\" *ngIf=\"navigationEnabled\" (click)=\"actions.fwdAction.perform()\" [disabled]=\"fwdDisabled()\" mat-raised-button>\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n\r\n `,\r\n styles: [`:host {\r\n flex: 20;\r\n align-self: center;\r\n width: 100%;\r\n text-align: center;\r\n align-content: center;\r\n margin: 0;\r\n\r\n }`, `\r\n div {\r\n display: inline;\r\n flex: 0;\r\n }`\r\n ]\r\n\r\n})\r\nexport class TransportPanel {\r\n\r\n @Input() readonly!:boolean;\r\n @Input() actions!: TransportActions;\r\n @Input() navigationEnabled=true;\r\n\r\n startStopNextButtonName!:string;\r\n startStopNextButtonIconName!:string;\r\n\r\n startDisabled() {\r\n return !this.actions || this.readonly || this.actions.startAction.disabled\r\n }\r\n\r\n stopDisabled() {\r\n return !this.actions || this.actions.stopAction.disabled\r\n }\r\n\r\n nextDisabled() {\r\n return !this.actions || this.actions.nextAction.disabled || !this.navigationEnabled;\r\n }\r\n\r\n pauseDisabled() {\r\n return !this.actions || this.actions.pauseAction.disabled\r\n }\r\n\r\n fwdDisabled() {\r\n return !this.actions || this.actions.fwdAction.disabled || !this.navigationEnabled;\r\n }\r\n\r\n fwdNextDisabled() {\r\n return !this.actions || this.actions.fwdNextAction.disabled || !this.navigationEnabled;\r\n }\r\n\r\n bwdDisabled() {\r\n return !this.actions || this.actions.bwdAction.disabled || !this.navigationEnabled;\r\n }\r\n\r\n startStopNextName():string{\r\n if(!this.nextDisabled()){\r\n this.startStopNextButtonName= \"Next\"\r\n }else if(!this.startDisabled()){\r\n this.startStopNextButtonName=\"Start\"\r\n }else if(!this.stopDisabled()) {\r\n this.startStopNextButtonName = \"Stop\"\r\n }\r\n return this.startStopNextButtonName;\r\n }\r\n startStopNextIconName():string{\r\n if(!this.startDisabled()){\r\n this.startStopNextButtonIconName=\"fiber_manual_record\"\r\n }else if(!this.stopDisabled()){\r\n this.startStopNextButtonIconName=\"stop\"\r\n }else if(!this.nextDisabled()){\r\n this.startStopNextButtonIconName=\"stop\"\r\n }\r\n return this.startStopNextButtonIconName\r\n }\r\n startStopNextIconColor():string{\r\n if(!this.startDisabled()){\r\n return \"red\"\r\n }else if(!this.stopDisabled() || !this.nextDisabled()){\r\n return \"yellow\"\r\n }else{\r\n return \"grey\";\r\n }\r\n }\r\n\r\n startStopNextPerform(){\r\n if(!this.startDisabled()){\r\n this.actions.startAction.perform();\r\n }else if(!this.stopDisabled()){\r\n this.actions.stopAction.perform();\r\n }else if(!this.nextDisabled()){\r\n this.actions.nextAction.perform();\r\n }\r\n }\r\n\r\n}\r\n\r\n@Component({\r\n\r\n selector: 'app-readystateindicator',\r\n\r\n template: `\r\n <mat-icon [matTooltip]=\"readyStateToolTip\">{{hourGlassIconName}}</mat-icon>\r\n `,\r\n styles: []\r\n})\r\nexport class ReadyStateIndicator {\r\n _ready=true\r\n hourGlassIconName='hourglass_empty'\r\n readyStateToolTip:string=''\r\n\r\n constructor() {}\r\n\r\n @Input() set ready(ready:boolean){\r\n this._ready=ready\r\n this.hourGlassIconName=this._ready?'hourglass_empty':'hourglass_full'\r\n this.readyStateToolTip=this._ready?'Audio processing and upload done. You can leave the page without data loss.':'Please wait until audio processing and upload have finished. Please do not leave the page.'\r\n }\r\n\r\n get ready():boolean{\r\n return this._ready\r\n }\r\n\r\n}\r\n\r\n@Component({\r\n\r\n selector: 'app-sprcontrolpanel',\r\n\r\n template: `\r\n <div fxHide.xs fxLayout=\"row\" >\r\n <app-sprstatusdisplay fxFlex=\"0 0 0\" [statusMsg]=\"statusMsg\" [statusAlertType]=\"statusAlertType\" [statusWaiting]=\"statusWaiting\"\r\n class=\"hidden-xs\"></app-sprstatusdisplay>\r\n <app-sprtransport fxFlex=\"10 0 0\" [readonly]=\"readonly\" [actions]=\"transportActions\" [navigationEnabled]=\"navigationEnabled\"></app-sprtransport>\r\n <app-uploadstatus fxFlex=\"0 0 0\" *ngIf=\"enableUploadRecordings\" [value]=\"uploadProgress\"\r\n [status]=\"uploadStatus\" [awaitNewUpload]=\"processing\"></app-uploadstatus>\r\n <app-readystateindicator [ready]=\"_ready\"></app-readystateindicator>\r\n </div>\r\n <div fxShow.xs fxHide fxLayout=\"column\">\r\n <div fxLayout=\"row\" fxFlexFill>\r\n <app-sprstatusdisplay fxFlex=\"10 0 0\" fxFlexAlign=\"left\" [statusMsg]=\"statusMsg\" [statusAlertType]=\"statusAlertType\" [statusWaiting]=\"statusWaiting\"\r\n class=\"hidden-xs\"></app-sprstatusdisplay>\r\n <app-uploadstatus fxFlex=\"0 0 0\" *ngIf=\"enableUploadRecordings\" [value]=\"uploadProgress\"\r\n [status]=\"uploadStatus\" [awaitNewUpload]=\"processing\"></app-uploadstatus>\r\n <app-readystateindicator [ready]=\"_ready\"></app-readystateindicator>\r\n </div>\r\n <app-sprtransport [readonly]=\"readonly\" [actions]=\"transportActions\" [navigationEnabled]=\"navigationEnabled\"></app-sprtransport>\r\n\r\n </div>\r\n `,\r\n styles: [`div {\r\n align-content: center;\r\n align-items: center;\r\n margin: 0;\r\n padding: 20px;\r\n min-height: min-content; /* important */\r\n }`]\r\n})\r\nexport class ControlPanel {\r\n @ViewChild(StatusDisplay, { static: true }) statusDisplay!: StatusDisplay;\r\n @ViewChild(TransportPanel, { static: true }) transportPanel!: TransportPanel;\r\n\r\n @Input() readonly!:boolean\r\n @Input() transportActions!: TransportActions\r\n @Input() processing=false\r\n @Input() statusMsg!: string;\r\n @Input() statusAlertType!: string;\r\n @Input() statusWaiting!: boolean;\r\n @Input() uploadStatus!: string;\r\n @Input() uploadProgress!: number;\r\n @Input() currentRecording: AudioBuffer| null| undefined;\r\n @Input() enableUploadRecordings!: boolean;\r\n @Input() navigationEnabled=true;\r\n\r\n _ready=true\r\n\r\n constructor(public dialog: MatDialog) {\r\n\r\n }\r\n\r\n @Input() set ready(ready:boolean){\r\n this._ready=ready\r\n }\r\n\r\n get ready():boolean{\r\n return this._ready\r\n }\r\n\r\n}\r\n\r\n\r\n","\r\nimport {Component, Inject} from \"@angular/core\";\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\r\n\r\n@Component({\r\n selector: 'spr-session-finished-dialog',\r\n template: `<h1 mat-dialog-title><mat-icon [style.color]=\"'green'\">done_all</mat-icon> Session finished</h1>\r\n <div mat-dialog-content>\r\n\r\n <p>Thank you! The recording session is complete.</p>\r\n\r\n </div>\r\n <div mat-dialog-actions>\r\n <button mat-button (click)=\"closeDialog()\">OK</button>\r\n </div>\r\n `\r\n})\r\nexport class SessionFinishedDialog{\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<SessionFinishedDialog>,\r\n @Inject(MAT_DIALOG_DATA) public data: any) { }\r\n\r\n closeDialog(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","import {Component, Inject} from \"@angular/core\";\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\r\n\r\n@Component({\r\n selector: 'msg-dialog',\r\n template: `<h1 mat-dialog-title><mat-icon *ngIf=\"data.type==='error'\" [style.color]=\"'red'\">error</mat-icon>\r\n <mat-icon *ngIf=\"data.type==='warning'\" [style.color]=\"'yellow'\">warning</mat-icon>{{data.title}}</h1>\r\n <div mat-dialog-content>\r\n\r\n <p>{{data.msg}}</p>\r\n <p>{{data.advice}}</p>\r\n\r\n </div>\r\n <div mat-dialog-actions>\r\n <button mat-button (click)=\"closeDialog()\">OK</button>\r\n </div>\r\n `\r\n})\r\nexport class MessageDialog{\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<MessageDialog>,\r\n @Inject(MAT_DIALOG_DATA) public data: any) { }\r\n\r\n closeDialog(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","\r\nexport class AudioContextProvider\r\n{\r\n private static _audioContext:AudioContext| null=null;\r\n\r\n public static audioContextInstance():AudioContext|null\r\n {\r\n if (!this._audioContext) {\r\n let debugFail = false;\r\n if (!window.AudioContext || typeof window.AudioContext !== 'function' || debugFail) {\r\n throw new Error('Browser does not support Web Audio API!');\r\n this._audioContext=null;\r\n } else {\r\n this._audioContext= new window.AudioContext();\r\n }\r\n }\r\n return this._audioContext;\r\n }\r\n\r\n}\r\n","import {RecordingFile} from \"../recording\";\r\n\r\nexport class Item {\r\n promptAsString: string;\r\n training: boolean;\r\n recs: Array<RecordingFile> | null;\r\n\r\n constructor(promptAsString: string, training: boolean) {\r\n this.promptAsString = promptAsString;\r\n this.training = training;\r\n this.recs = null;\r\n }\r\n\r\n}\r\n","/**\r\n * Created by klausj on 17.06.2017.\r\n */\r\nimport {Inject, Injectable} from '@angular/core';\r\nimport {HttpClient, HttpErrorResponse, HttpHeaders, HttpResponse} from \"@angular/common/http\";\r\nimport {ApiType, SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../../spr.config\";\r\n\r\nimport {UUID} from \"../../utils/utils\";\r\nimport {RecordingFile, RecordingFileDescriptor} from \"../recording\";\r\nimport {ProjectService} from \"../project/project.service\";\r\nimport {SessionService} from \"../session/session.service\";\r\nimport {Observable} from \"rxjs\";\r\n\r\n\r\nexport const REC_API_CTX='recfile'\r\n\r\n\r\n\r\n@Injectable()\r\nexport class RecordingService {\r\n\r\n public static readonly REC_API_CTX = 'recfile'\r\n private apiEndPoint: string;\r\n private withCredentials: boolean = false;\r\n\r\n //private debugDelay:number=10000;\r\n private debugDelay:number=0;\r\n\r\n constructor(private http: HttpClient, @Inject(SPEECHRECORDER_CONFIG) private config?: SpeechRecorderConfig) {\r\n\r\n this.apiEndPoint = ''\r\n\r\n if (config && config.apiEndPoint) {\r\n this.apiEndPoint = config.apiEndPoint;\r\n }\r\n if (this.apiEndPoint !== '') {\r\n this.apiEndPoint = this.apiEndPoint + '/'\r\n }\r\n if (config != null && config.withCredentials != null) {\r\n this.withCredentials = config.withCredentials;\r\n }\r\n }\r\n\r\n private recFilesUrl(projectName: string, sessId: string | number):string{\r\n let encPrjName=encodeURIComponent(projectName);\r\n let encSessId=encodeURIComponent(sessId);\r\n let recFilesUrl = this.apiEndPoint + ProjectService.PROJECT_API_CTX + '/' + encPrjName + '/' +\r\n SessionService.SESSION_API_CTX + '/' + encSessId + '/' + RecordingService.REC_API_CTX;\r\n return recFilesUrl;\r\n }\r\n\r\n private recFilesReqUrl(projectName: string, sessId: string | number):string{\r\n let recFilesUrl=this.recFilesUrl(projectName,sessId);\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n recFilesUrl = recFilesUrl + '.json?requestUUID=' + UUID.generate();\r\n }\r\n return recFilesUrl;\r\n }\r\n\r\n recordingFileDescrList(projectName: string, sessId: string | number):Observable<Array<RecordingFileDescriptor>> {\r\n let recFilesReqUrl = this.recFilesReqUrl(projectName,sessId);\r\n let wobs = this.http.get<Array<RecordingFileDescriptor>>(recFilesReqUrl,{withCredentials:this.withCredentials});\r\n return wobs;\r\n }\r\n\r\n recordingFileList(projectName: string, sessId: string | number):Observable<Array<RecordingFile>> {\r\n let recFilesReqUrl = this.recFilesReqUrl(projectName,sessId);\r\n let wobs = this.http.get<Array<RecordingFile>>(recFilesReqUrl,{withCredentials:this.withCredentials});\r\n return wobs;\r\n }\r\n\r\n private fetchAudiofile(projectName: string, sessId: string | number, itemcode: string,version:number): Observable<HttpResponse<ArrayBuffer>> {\r\n let recFilesUrl=this.recFilesUrl(projectName,sessId);\r\n let encItemcode=encodeURIComponent(itemcode);\r\n let recUrl = recFilesUrl + '/' + encItemcode +'/'+version;\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n recUrl = recUrl + '.wav?requestUUID=' + UUID.generate();\r\n }\r\n\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Accept', 'audio/wav');\r\n return this.http.get(recUrl, {\r\n headers: headers,\r\n observe: 'response',\r\n responseType: 'arraybuffer',\r\n withCredentials: this.withCredentials\r\n });\r\n\r\n }\r\n\r\n fetchAndApplyRecordingFile(aCtx: AudioContext, projectName: string,recordingFile:RecordingFile):Observable<RecordingFile|null> {\r\n\r\n let wobs = new Observable<RecordingFile|null>(observer=>{\r\n if(recordingFile.session) {\r\n let obs = this.fetchAudiofile(projectName, recordingFile.session, recordingFile.itemCode, recordingFile.version);\r\n obs.subscribe(resp => {\r\n //console.log(\"Fetched audio file. HTTP response status: \"+resp.status+\", type: \"+resp.type+\", byte length: \"+ resp.body.byteLength);\r\n\r\n // Do not use Promise version, which does not work with Safari 13 (13.0.5)\r\n if (resp.body) {\r\n aCtx.decodeAudioData(resp.body, ab => {\r\n recordingFile.audioBuffer = ab;\r\n if (this.debugDelay > 0) {\r\n window.setTimeout(() => {\r\n\r\n observer.next(recordingFile);\r\n observer.complete();\r\n }, this.debugDelay);\r\n } else {\r\n observer.next(recordingFile);\r\n observer.complete();\r\n }\r\n }, error => {\r\n observer.error(error);\r\n observer.complete();\r\n })\r\n } else {\r\n observer.error('Fetching audio file: response has no body');\r\n }\r\n },\r\n (error: HttpErrorResponse) => {\r\n if (error.status == 404) {\r\n // Interpret not as an error, the file ist not recorded yet\r\n observer.next(null);\r\n observer.complete()\r\n } else {\r\n // all other states are errors\r\n observer.error(error);\r\n observer.complete();\r\n }\r\n });\r\n }else{\r\n observer.error();\r\n }\r\n });\r\n\r\n return wobs;\r\n }\r\n\r\n fetchRecordingFile(aCtx: AudioContext, projectName: string, sessId: string | number, itemcode: string,version:number):Observable<RecordingFile|null> {\r\n\r\n let wobs = new Observable<RecordingFile | null>(observer=>{\r\n let obs = this.fetchAudiofile(projectName, sessId, itemcode,version);\r\n\r\n\r\n obs.subscribe(resp => {\r\n // Do not use Promise version, which does not work with Safari 13\r\n if(resp.body) {\r\n aCtx.decodeAudioData(resp.body, ab => {\r\n let rf = new RecordingFile(sessId, itemcode, version, ab);\r\n if (this.debugDelay > 0) {\r\n window.setTimeout(() => {\r\n\r\n observer.next(rf);\r\n observer.complete();\r\n }, this.debugDelay);\r\n } else {\r\n observer.next(rf);\r\n observer.complete();\r\n }\r\n });\r\n }else{\r\n observer.error();\r\n }\r\n },\r\n (error: HttpErrorResponse) => {\r\n if (error.status == 404) {\r\n // Interpret not as an error, the file ist not recorded yet\r\n observer.next(null);\r\n observer.complete()\r\n }else{\r\n // all other states are errors\r\n observer.error(error);\r\n observer.complete();\r\n }\r\n });\r\n });\r\n\r\n return wobs;\r\n }\r\n}\r\n\r\n\r\n\r\n","\nimport {Uploader} from \"../net/uploader\";\nimport {Inject, Injectable} from \"@angular/core\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../spr.config\";\n\n@Injectable()\n export class SpeechRecorderUploader extends Uploader{\n\n constructor(private httpClient:HttpClient,@Inject(SPEECHRECORDER_CONFIG) private config?:SpeechRecorderConfig){\n super(httpClient,(config)?config.withCredentials:false);\n }\n}\n","import {Component, Input} from \"@angular/core\";\r\nimport {SessionService} from \"./session.service\";\r\n\r\n@Component({\r\n\r\n selector: 'app-warningbar',\r\n providers: [SessionService],\r\n template: `\r\n <div [class]=\"displayClass\">{{warningText}}</div>\r\n\r\n `,\r\n styles: [`:host {\r\n\r\n flex: 0 0 content;\r\n background: orange;\r\n\r\n }`,`\r\n .off {\r\n display: none;\r\n }\r\n `,`\r\n .on {\r\n padding: 2px;\r\n display: inline-block;\r\n width: 100%;\r\n font-weight: bold;\r\n font-size: larger;\r\n text-align: center;\r\n }\r\n ` ]\r\n})\r\nexport class WarningBar {\r\n @Input() warningText!:string;\r\n @Input() set show(show:boolean){\r\n if(show){\r\n this.displayClass='on'\r\n }else{\r\n this.displayClass='off'\r\n }\r\n }\r\n displayClass:string='off';\r\n}\r\n","import {Action} from '../../action/action'\r\nimport {AudioCapture, AudioCaptureListener} from '../../audio/capture/capture';\r\nimport {AudioPlayer, AudioPlayerEvent, EventType} from '../../audio/playback/player'\r\nimport {WavWriter} from '../../audio/impl/wavwriter'\r\nimport {Group, PromptItem, PromptitemUtil, Script, Section} from '../script/script';\r\nimport {RecordingFile, RecordingFileDescriptor} from '../recording'\r\nimport {Upload} from '../../net/uploader';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n Renderer2,\r\n ViewChild\r\n} from \"@angular/core\";\r\nimport {SessionService} from \"./session.service\";\r\nimport {State as StartStopSignalState} from \"../startstopsignal/startstopsignal\";\r\nimport {MatDialog} from \"@angular/material/dialog\";\r\nimport {SpeechRecorderUploader} from \"../spruploader\";\r\nimport {SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../../spr.config\";\r\nimport {Session} from \"./session\";\r\nimport {AudioDevice, AutoGainControlConfig} from \"../project/project\";\r\nimport {MIN_DB_LEVEL, RecordingItemDisplay} from \"../../ui/recordingitem_display\";\r\nimport {LevelInfos,LevelMeasure, StreamLevelMeasure} from \"../../audio/dsp/level_measure\";\r\nimport {Prompting} from \"./prompting\";\r\nimport {SequenceAudioFloat32ChunkerOutStream} from \"../../audio/io/stream\";\r\nimport {TransportActions} from \"./controlpanel\";\r\nimport {SessionFinishedDialog} from \"./session_finished_dialog\";\r\nimport {MessageDialog} from \"../../ui/message_dialog\";\r\nimport {RecordingService} from \"../recordings/recordings.service\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {AudioContextProvider} from \"../../audio/context\";\r\nimport {AudioClip} from \"../../audio/persistor\";\r\nimport {Item} from \"./item\";\r\nimport {Browser, UserAgent, UserAgentBuilder} from \"../../utils/ua-parser\";\r\nimport {LevelBar} from \"../../audio/ui/livelevel\";\r\n\r\n\r\nexport const FORCE_REQUEST_AUDIO_PERMISSIONS=false;\r\nexport const RECFILE_API_CTX = 'recfile';\r\n\r\n\r\nconst MAX_RECORDING_TIME_MS = 1000 * 60 * 60 * 60; // 1 hour\r\nconst DEFAULT_PRE_REC_DELAY=1000;\r\nconst DEFAULT_POST_REC_DELAY=500;\r\n\r\nconst LEVEL_BAR_INTERVALL_SECONDS = 0.1; // 100ms\r\nexport const enum Mode {SERVER_BOUND, STAND_ALONE}\r\n\r\nexport const enum Status {\r\n BLOCKED, IDLE, PRE_RECORDING, RECORDING, POST_REC_STOP, POST_REC_PAUSE, STOPPING_STOP, STOPPING_PAUSE, ERROR\r\n}\r\n\r\n\r\n\r\n// TODO enum not possible in template language , use string for now\r\n//export enum StatusAlertType {INFO,WARN,ERROR};\r\n\r\n@Component({\r\n\r\n selector: 'app-sprrecordingsession',\r\n providers: [SessionService],\r\n template: `\r\n <app-warningbar [show]=\"isTestSession()\" warningText=\"Test recording only!\"></app-warningbar>\r\n <app-warningbar [show]=\"isDefaultAudioTestSession()\" warningText=\"This test uses default audio device! Regular sessions may require a particular audio device (microphone)!\"></app-warningbar>\r\n <app-sprprompting [projectName]=\"projectName\"\r\n [startStopSignalState]=\"startStopSignalState\" [promptItem]=\"promptItem\" [showPrompt]=\"showPrompt\"\r\n [items]=\"items\"\r\n [transportActions]=\"transportActions\"\r\n [selectedItemIdx]=\"promptIndex\" (onItemSelect)=\"itemSelect($event)\" (onNextItem)=\"nextItem()\" (onPrevItem)=\"prevItem()\"\r\n [audioSignalCollapsed]=\"audioSignalCollapsed\" [displayAudioClip]=\"displayAudioClip\"\r\n [playStartAction]=\"controlAudioPlayer?.startAction\"\r\n [playSelectionAction]=\"controlAudioPlayer?.startSelectionAction\"\r\n [autoPlayOnSelectToggleAction]=\"controlAudioPlayer?.autoPlayOnSelectToggleAction\"\r\n [playStopAction]=\"controlAudioPlayer?.stopAction\">\r\n\r\n </app-sprprompting>\r\n <mat-progress-bar [value]=\"progressPercentValue()\" fxShow=\"false\" fxShow.xs=\"true\" ></mat-progress-bar>\r\n\r\n\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" [ngStyle]=\"{'height.px':100,'min-height.px': 100}\" [ngStyle.xs]=\"{'height.px':125,'min-height.px': 125}\">\r\n <audio-levelbar fxFlex=\"1 0 1\" [streamingMode]=\"isRecording()\" [displayLevelInfos]=\"displayLevelInfos\"></audio-levelbar>\r\n <div fxLayout=\"row\">\r\n <spr-recordingitemcontrols fxFlex=\"10 0 1\"\r\n [audioLoaded]=\"displayAudioClip?.buffer!==null\"\r\n [playStartAction]=\"controlAudioPlayer?.startAction\"\r\n [playStopAction]=\"controlAudioPlayer?.stopAction\"\r\n [peakDbLvl]=\"peakLevelInDb\"\r\n [agc]=\"this.ac?.agcStatus\"\r\n (onShowRecordingDetails)=\"audioSignalCollapsed=!audioSignalCollapsed\">\r\n </spr-recordingitemcontrols>\r\n <app-uploadstatus class=\"ricontrols dark\" fxHide fxShow.xs fxFlex=\"0 0 0\" *ngIf=\"enableUploadRecordings\" [value]=\"uploadProgress\"\r\n [status]=\"uploadStatus\" [awaitNewUpload]=\"processingRecording\"></app-uploadstatus>\r\n <app-readystateindicator class=\"ricontrols dark\" fxHide fxShow.xs fxFlex=\"0 0 0\" [ready]=\"dataSaved && !isActive()\"></app-readystateindicator>\r\n </div>\r\n </div>\r\n <div #controlpanel class=\"controlpanel\" fxLayout=\"row\">\r\n <div fxFlex=\"1 1 30%\" fxLayoutAlign=\"start center\">\r\n <app-sprstatusdisplay fxHide.xs [statusMsg]=\"statusMsg\" [statusAlertType]=\"statusAlertType\" [statusWaiting]=\"statusWaiting\"></app-sprstatusdisplay>\r\n </div>\r\n <app-sprtransport fxFlex=\"10 0 30%\" fxLayoutAlign=\"center center\" [readonly]=\"readonly\" [actions]=\"transportActions\" [navigationEnabled]=\"items==null || items.length>1\"></app-sprtransport>\r\n <div fxFlex=\"1 1 30%\" fxLayoutAlign=\"end center\" fxLayout=\"row\">\r\n <app-uploadstatus class=\"ricontrols\" fxHide.xs fxLayoutAlign=\"end center\" *ngIf=\"enableUploadRecordings\" [value]=\"uploadProgress\"\r\n [status]=\"uploadStatus\" [awaitNewUpload]=\"processingRecording\"></app-uploadstatus>\r\n <app-readystateindicator class=\"ricontrols\" fxLayoutAlign=\"end center\" fxHide.xs [ready]=\"dataSaved && !isActive()\"></app-readystateindicator>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`:host {\r\n flex: 2;\r\n background: lightgrey;\r\n display: flex; /* Vertical flex container: Bottom transport panel, above prompting panel */\r\n flex-direction: column;\r\n margin: 0;\r\n padding: 0;\r\n min-height: 0px;\r\n\r\n /* Prevents horizontal scroll bar on swipe right */\r\n overflow: hidden;\r\n }`,`.ricontrols {\r\n padding: 4px;\r\n box-sizing: border-box;\r\n height: 100%;\r\n }`,`.dark {\r\n background: darkgray;\r\n }`,`.controlpanel {\r\n align-content: center;\r\n align-items: center;\r\n margin: 0;\r\n padding: 20px;\r\n min-height: min-content; /* important */\r\n }`]\r\n})\r\nexport class SessionManager implements AfterViewInit,OnDestroy, AudioCaptureListener {\r\n\r\n @Input() projectName:string|undefined;\r\n enableUploadRecordings: boolean = true;\r\n enableDownloadRecordings: boolean = false;\r\n status: Status = Status.BLOCKED;\r\n\r\n ac: AudioCapture|null=null;\r\n private _channelCount = 2; //TODO define constant for default format\r\n private _selectedDeviceId:string|undefined=undefined;\r\n @ViewChild(Prompting, { static: true }) prompting!: Prompting;\r\n @ViewChild(LevelBar, { static: true }) liveLevelDisplay!: LevelBar;\r\n\r\n @Input() dataSaved=true\r\n\r\n\r\n startStopSignalState!: StartStopSignalState;\r\n // Property audioDevices from project config: list of names of allowed audio devices.\r\n private _audioDevices: Array<AudioDevice> | null| undefined;\r\n private selCaptureDeviceId: ConstrainDOMString | null;\r\n\r\n private _autoGainControlConfigs: Array<AutoGainControlConfig> | null| undefined;\r\n\r\n private updateTimerId: any;\r\n private preRecTimerId: number|null=null;\r\n private preRecTimerRunning: boolean|null=null;\r\n private postRecTimerId: number|null=null;\r\n private postRecTimerRunning: boolean|null=null;\r\n private maxRecTimerId: number|null=null;\r\n private maxRecTimerRunning: boolean|null=null;\r\n\r\n transportActions: TransportActions;\r\n dnlLnk!: HTMLAnchorElement;\r\n playStartAction: Action<void>;\r\n audio: any;\r\n\r\n _session: Session|null=null;\r\n _script!: Script;\r\n\r\n private _promptIndex=0;\r\n private section!: Section;\r\n group!: Group;\r\n promptItem!:PromptItem;\r\n showPrompt!: boolean;\r\n\r\n // index of current section\r\n sectIdx!: number;\r\n // index of current group in section\r\n groupIdxInSection!: number;\r\n // index of current prompt item in group\r\n promptItemIdxInGroup!: number;\r\n\r\n private autorecording!: boolean;\r\n\r\n items: Array<Item>|null=null;\r\n //selectedItemIdx: number;\r\n private _displayRecFile: RecordingFile | null=null;\r\n private displayRecFileVersion!: number;\r\n displayAudioClip: AudioClip | null=null;\r\n\r\n displayLevelInfos: LevelInfos | null=null;\r\n\r\n peakLevelInDb:number=MIN_DB_LEVEL;\r\n\r\n promptItemCount!: number;\r\n\r\n readonly=false\r\n\r\n statusMsg!: string;\r\n statusAlertType!: string;\r\n statusWaiting!: boolean;\r\n\r\n processingRecording=false\r\n\r\n uploadProgress: number = 100;\r\n uploadStatus: string = 'ok'\r\n audioSignalCollapsed = true;\r\n\r\n private streamLevelMeasure: StreamLevelMeasure;\r\n private levelMeasure: LevelMeasure;\r\n private _controlAudioPlayer!: AudioPlayer;\r\n\r\n private audioFetchSubscription:Subscription|null=null;\r\n\r\n private destroyed=false;\r\n\r\n private navigationDisabled=true;\r\n\r\n private userAgent:UserAgent;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef,\r\n private renderer: Renderer2,\r\n public dialog: MatDialog,\r\n private sessionService:SessionService,\r\n private recFileService:RecordingService,\r\n private uploader: SpeechRecorderUploader,\r\n @Inject(SPEECHRECORDER_CONFIG) public config?: SpeechRecorderConfig) {\r\n this.status = Status.IDLE;\r\n this.transportActions = new TransportActions();\r\n this.playStartAction = new Action('Play');\r\n this.audio = document.getElementById('audio');\r\n this.selCaptureDeviceId = null;\r\n this.levelMeasure = new LevelMeasure();\r\n this.streamLevelMeasure = new StreamLevelMeasure();\r\n this.userAgent=UserAgentBuilder.userAgent();\r\n console.debug(\"Detected platform: \"+this.userAgent.detectedPlatform);\r\n console.debug(\"Detected browser: \"+this.userAgent.detectedBrowser);\r\n\r\n if (this.config && this.config.enableUploadRecordings !== undefined) {\r\n this.enableUploadRecordings = this.config.enableUploadRecordings;\r\n }\r\n if (this.config && this.config.enableDownloadRecordings !== undefined) {\r\n this.enableDownloadRecordings = this.config.enableDownloadRecordings;\r\n }\r\n this.init();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.streamLevelMeasure.levelListener = this.liveLevelDisplay;\r\n this.streamLevelMeasure.peakLevelListener=(peakLvlInDb)=>{\r\n this.peakLevelInDb=peakLvlInDb;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n ngOnDestroy() {\r\n this.destroyed=true;\r\n // TODO stop capture /playback\r\n }\r\n\r\n private init() {\r\n this.sectIdx = 0;\r\n this.groupIdxInSection = 0;\r\n this.promptItemIdxInGroup = 0;\r\n this.autorecording = false;\r\n this.transportActions.startAction.disabled = true;\r\n this.transportActions.stopAction.disabled = true;\r\n this.transportActions.nextAction.disabled = true;\r\n this.transportActions.pauseAction.disabled = true;\r\n this.playStartAction.disabled = true;\r\n let context:AudioContext|null=null;\r\n try {\r\n context = AudioContextProvider.audioContextInstance()\r\n } catch (err) {\r\n this.status = Status.ERROR;\r\n let errMsg = err.message;\r\n this.statusMsg = 'ERROR: ' + errMsg;\r\n this.statusAlertType = 'error';\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Error',\r\n msg: errMsg,\r\n advise: 'Please use a supported browser.',\r\n }\r\n });\r\n return;\r\n }\r\n if(context) {\r\n console.info(\"State of audio context: \" + context.state)\r\n }else{\r\n console.info(\"No audio context available!\");\r\n }\r\n if (!context || !navigator.mediaDevices) {\r\n this.status = Status.ERROR;\r\n let errMsg = 'Browser does not support Media streams!';\r\n this.statusMsg = 'ERROR: ' + errMsg;\r\n this.statusAlertType = 'error';\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Error',\r\n msg: errMsg,\r\n advise: 'Please use a supported browser.',\r\n }\r\n });\r\n return;\r\n } else {\r\n this.ac = new AudioCapture(context);\r\n if (this.ac) {\r\n this.transportActions.startAction.onAction = () => this.startItem();\r\n this.ac.listener = this;\r\n this.ac.audioOutStream = new SequenceAudioFloat32ChunkerOutStream(this.streamLevelMeasure, LEVEL_BAR_INTERVALL_SECONDS);\r\n // Don't list the devices here. If we do not have audio permissions we only get anonymized devices without labels.\r\n //this.ac.listDevices();\r\n } else {\r\n this.transportActions.startAction.disabled = true;\r\n let errMsg = 'Browser does not support Media/Audio API!';\r\n this.statusMsg = 'ERROR: ' + errMsg;\r\n this.statusAlertType = 'error';\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Error',\r\n msg: errMsg,\r\n advise: 'Please use a supported browser.',\r\n }\r\n });\r\n return;\r\n }\r\n this.transportActions.stopAction.onAction = () => this.stopItem();\r\n this.transportActions.nextAction.onAction = () => this.stopItem();\r\n this.transportActions.pauseAction.onAction = () => this.pauseItem();\r\n this.transportActions.fwdAction.onAction = () => this.nextItem();\r\n this.transportActions.fwdNextAction.onAction = () => this.nextUnrecordedItem();\r\n this.transportActions.bwdAction.onAction = () => this.prevItem();\r\n this.playStartAction.onAction = () => this.controlAudioPlayer.start();\r\n\r\n }\r\n\r\n this.startStopSignalState = StartStopSignalState.OFF;\r\n\r\n}\r\n\r\n @HostListener('window:keypress', ['$event'])\r\n onKeyPress(ke: KeyboardEvent) {\r\n if (ke.key == ' ') {\r\n this.transportActions.startAction.perform();\r\n this.transportActions.nextAction.perform();\r\n }\r\n }\r\n\r\n @HostListener('window:keydown', ['$event'])\r\n onKeyDown(ke: KeyboardEvent) {\r\n if (ke.key == ' ' || ke.key == 'Escape') {\r\n this.transportActions.stopAction.perform();\r\n }\r\n if (ke.key == 'p' || ke.key == 'Escape') {\r\n this.transportActions.pauseAction.perform();\r\n }\r\n if (ke.key == 'MediaPlayPause') {\r\n this.playStartAction.perform();\r\n }\r\n if (ke.key === 'ArrowRight') {\r\n this.transportActions.fwdAction.perform();\r\n }\r\n if (ke.key === 'ArrowLeft') {\r\n this.transportActions.bwdAction.perform();\r\n }\r\n }\r\n\r\n progressPercentValue():number {\r\n let v=100;\r\n if(this.items) {\r\n v=this.promptIndex * 100 / (this.items.length - 1);\r\n }\r\n return v;\r\n }\r\n isTestSession():boolean {\r\n return ((this._session!=null) && (this._session.type === 'TEST' || this._session.type==='TEST_DEF_A' || this._session.type === 'SINUS_TEST'));\r\n }\r\n\r\n isDefaultAudioTestSession():boolean {\r\n return ((this._session!=null) && (this._session.type==='TEST_DEF_A'));\r\n }\r\n\r\n isDefaultAudioTestSessionOverwriteingProjectRequirements():boolean {\r\n return ((this._session!=null) && (this._session.type==='TEST_DEF_A') && (this.audioDevices!=null) && this.audioDevices.length>0)\r\n }\r\n\r\n\r\n set controlAudioPlayer(controlAudioPlayer: AudioPlayer) {\r\n if (this._controlAudioPlayer) {\r\n //this._controlAudioPlayer.listener=null;\r\n }\r\n this._controlAudioPlayer = controlAudioPlayer;\r\n if (this._controlAudioPlayer) {\r\n this._controlAudioPlayer.listener = this;\r\n }\r\n }\r\n\r\n get controlAudioPlayer(): AudioPlayer {\r\n return this._controlAudioPlayer;\r\n }\r\n\r\n set session(session: Session) {\r\n this._session = session;\r\n }\r\n\r\n set script(script: any) {\r\n this._script = script;\r\n this.loadScript();\r\n }\r\n\r\n set channelCount(channelCount: number) {\r\n this._channelCount = channelCount;\r\n }\r\n\r\n set audioDevices(audioDevices: Array<AudioDevice> | null|undefined) {\r\n this._audioDevices = audioDevices;\r\n }\r\n\r\n set autoGainControlConfigs(autoGainControlConfigs: Array<AutoGainControlConfig>|null|undefined){\r\n this._autoGainControlConfigs=autoGainControlConfigs;\r\n }\r\n\r\n update(e: AudioPlayerEvent) {\r\n if (e.type == EventType.STARTED) {\r\n this.playStartAction.disabled = true;\r\n this.updateTimerId = window.setInterval(() => {\r\n //this.audioSignal.playFramePosition = this.ap.playPositionFrames;\r\n }, 50);\r\n } else if (e.type == EventType.STOPPED || e.type == EventType.ENDED) {\r\n window.clearInterval(this.updateTimerId);\r\n // this.audioSignal.playFramePosition = this.ap.playPositionFrames;\r\n this.playStartAction.disabled = (!(this.displayRecFile));\r\n\r\n }\r\n }\r\n\r\n get promptIndex():number{\r\n return this._promptIndex;\r\n }\r\n\r\n set promptIndex(promptIndex:number){\r\n if(promptIndex<0 || promptIndex>=this.promptItemCount){\r\n throw new Error(\"Prompt index out of range\")\r\n }\r\n let i = 0;\r\n let sections=this._script.sections;\r\n let found=false;\r\n for (let si = 0; si < sections.length && !found; si++) {\r\n let section = sections[si];\r\n let gs = section._shuffledGroups;\r\n for (let gi = 0; gi < gs.length; gi++) {\r\n let pis=gs[gi]._shuffledPromptItems;\r\n\r\n let pisSize = pis.length;\r\n if (promptIndex < i + pisSize) {\r\n this.sectIdx = si;\r\n this.groupIdxInSection=gi;\r\n this.promptItemIdxInGroup = promptIndex - i;\r\n found=true;\r\n break;\r\n } else {\r\n i += pisSize;\r\n }\r\n }\r\n }\r\n if(found){\r\n this._promptIndex=promptIndex;\r\n }else{\r\n throw new Error(\"Internal error: Prompt index not found\")\r\n }\r\n this.applyItem();\r\n }\r\n\r\n itemSelect(itemIdx: number) {\r\n if (this.status === Status.IDLE) {\r\n this.promptIndex=itemIdx;\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n startItem() {\r\n this.transportActions.startAction.disabled = true;\r\n this.transportActions.pauseAction.disabled = true;\r\n if(this.readonly){\r\n return\r\n }\r\n this.transportActions.fwdAction.disabled = true\r\n this.transportActions.fwdNextAction.disabled = true\r\n this.transportActions.bwdAction.disabled = true\r\n this.displayRecFile = null;\r\n this.displayRecFileVersion = 0;\r\n this.displayAudioClip = null;\r\n this.showRecording();\r\n if (this.section.mode === 'AUTORECORDING') {\r\n this.autorecording = true;\r\n }\r\n\r\n if(this.ac!=null) {\r\n if (!this.ac.opened) {\r\n if (this._selectedDeviceId) {\r\n console.log(\"Open session with audio device Id: \\'\" + this._selectedDeviceId + \"\\' for \" + this._channelCount + \" channels\");\r\n } else {\r\n console.log(\"Open session with default audio device for \" + this._channelCount + \" channels\");\r\n }\r\n this.ac.open(this._channelCount, this._selectedDeviceId,this._autoGainControlConfigs);\r\n } else {\r\n this.ac.start();\r\n }\r\n }\r\n }\r\n\r\n\r\n private loadScript() {\r\n this.promptItemCount = 0;\r\n\r\n this.items = new Array<Item>();\r\n let ln = 0;\r\n\r\n //TODO randomize not supported\r\n for (let si = 0; si < this._script.sections.length; si++) {\r\n let section = this._script.sections[si];\r\n let gs = section._shuffledGroups;\r\n for(let gi=0;gi<gs.length;gi++) {\r\n\r\n let pis = gs[gi]._shuffledPromptItems;\r\n\r\n let pisLen = pis.length;\r\n this.promptItemCount += pisLen;\r\n for (let piSectIdx = 0; piSectIdx < pisLen; piSectIdx++) {\r\n let pi = pis[piSectIdx];\r\n let promptAsStr = PromptitemUtil.toPlainTextString(pi);\r\n\r\n let it = new Item(promptAsStr, section.training);\r\n this.items.push(it);\r\n ln++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n promptIndexByItemcode(itemcode:string):number|null{\r\n let pix = 0;\r\n\r\n for (let si = 0; si < this._script.sections.length; si++) {\r\n let section = this._script.sections[si];\r\n let gs = section._shuffledGroups;\r\n for(let gi=0;gi<gs.length;gi++) {\r\n let pis=gs[gi]._shuffledPromptItems;\r\n let pisLen = pis.length;\r\n for (let piSectIdx = 0; piSectIdx < pisLen; piSectIdx++) {\r\n let pi = pis[piSectIdx];\r\n let ic=pi.itemcode;\r\n if(ic === itemcode){\r\n return pix;\r\n }\r\n pix++;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n clearPrompt() {\r\n //this.prompting.promptContainer.prompter.promptText='';\r\n //this.mediaitem = null;\r\n this.showPrompt = false;\r\n this.changeDetectorRef.detectChanges()\r\n }\r\n\r\n applyPrompt() {\r\n //this.prompting.promptContainer.prompter.promptText=this.promptUnit.mediaitems[0].text;\r\n //this.promptText = this.promptUnit.mediaitems[0].text;\r\n //this.mediaitem=this.promptUnit.mediaitems[0];\r\n this.showPrompt = true;\r\n this.changeDetectorRef.detectChanges()\r\n }\r\n\r\n downloadRecording() {\r\n if (this.displayRecFile) {\r\n let ab: AudioBuffer|null = this.displayRecFile.audioBuffer;\r\n let ww = new WavWriter();\r\n if(ab) {\r\n let wavFile = ww.writeAsync(ab, (wavFile) => {\r\n let blob = new Blob([wavFile], {type: 'audio/wav'});\r\n let rfUrl = URL.createObjectURL(blob);\r\n\r\n let dataDnlLnk = this.renderer.createElement('a');\r\n //dataDnlLnk.name = 'Recording';\r\n dataDnlLnk.href = rfUrl;\r\n\r\n this.renderer.appendChild(document.body, dataDnlLnk);\r\n\r\n // download property not yet in TS def\r\n if (this.displayRecFile) {\r\n let fn = this.displayRecFile.filenameString();\r\n fn += '_' + this.displayRecFileVersion;\r\n fn += '.wav';\r\n dataDnlLnk.download = fn;\r\n dataDnlLnk.click();\r\n }\r\n this.renderer.removeChild(document.body, dataDnlLnk);\r\n });\r\n }\r\n }\r\n }\r\n\r\n set displayRecFile(displayRecFile: RecordingFile | null) {\r\n this._displayRecFile = displayRecFile;\r\n if (this._displayRecFile) {\r\n let ab: AudioBuffer|null = this._displayRecFile.audioBuffer;\r\n if(ab) {\r\n this.displayAudioClip = new AudioClip(ab);\r\n this.controlAudioPlayer.audioClip = this.displayAudioClip;\r\n }else {\r\n // clear for now ...\r\n this.displayAudioClip = null;\r\n this.controlAudioPlayer.audioClip = null;\r\n if (this._controlAudioPlayer && this._session) {\r\n //... and try to fetch from server\r\n this.audioFetchSubscription = this.recFileService.fetchAndApplyRecordingFile(this._controlAudioPlayer.context, this._session.project, this._displayRecFile).subscribe((rf) => {\r\n let fab = null;\r\n if (rf && this._displayRecFile) {\r\n fab = this._displayRecFile.audioBuffer;\r\n } else {\r\n this.statusMsg = 'Recording file could not be loaded.'\r\n this.statusAlertType = 'error'\r\n }\r\n if (fab){\r\n this.displayAudioClip = new AudioClip(fab);\r\n }\r\n this.controlAudioPlayer.audioClip =this.displayAudioClip\r\n this.showRecording();\r\n\r\n }, err => {\r\n console.error(\"Could not load recording file from server: \" + err)\r\n this.statusMsg = 'Recording file could not be loaded: ' + err\r\n this.statusAlertType = 'error'\r\n })\r\n }else{\r\n this.statusMsg = 'Recording file could not be decoded. Audio context unavailable.'\r\n this.statusAlertType = 'error'\r\n }\r\n }\r\n\r\n } else {\r\n this.displayAudioClip = null;\r\n this.controlAudioPlayer.audioClip = null;\r\n }\r\n }\r\n\r\n get displayRecFile(): RecordingFile | null {\r\n return this._displayRecFile;\r\n }\r\n\r\n showRecording() {\r\n this.controlAudioPlayer.stop();\r\n\r\n if (this.displayAudioClip) {\r\n\r\n this.levelMeasure.calcBufferLevelInfos(this.displayAudioClip.buffer, LEVEL_BAR_INTERVALL_SECONDS).then((levelInfos) => {\r\n this.displayLevelInfos = levelInfos;\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n this.playStartAction.disabled = false;\r\n\r\n } else {\r\n\r\n // TODO\r\n // Setting to null does not trigger a change if it was null before (happens after nextitem() in AUTOPROGRESS mode)\r\n // The level bar display does not clear, it shows the last captured stream\r\n this.displayLevelInfos = null;\r\n\r\n this.playStartAction.disabled = true;\r\n\r\n // Collapse audio signal display if open\r\n if (!this.audioSignalCollapsed) {\r\n this.audioSignalCollapsed = true;\r\n }\r\n }\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n\r\n isRecordingItem():boolean{\r\n return(this.promptItem!=null && this.promptItem.type!=='nonrecording')\r\n }\r\n\r\n updateStartActionDisableState(){\r\n this.transportActions.startAction.disabled=!(this.ac && this.isRecordingItem());\r\n }\r\n\r\n applyItem(temporary=false) {\r\n\r\n this.section = this._script.sections[this.sectIdx]\r\n this.group = this.section._shuffledGroups[this.groupIdxInSection];\r\n this.promptItem = this.group._shuffledPromptItems[this.promptItemIdxInGroup];\r\n\r\n //this.selectedItemIdx = this.promptIndex;\r\n\r\n if(this.audioFetchSubscription){\r\n this.audioFetchSubscription.unsubscribe()\r\n }\r\n\r\n this.clearPrompt();\r\n\r\n let isNonrecording=(this.promptItem.type==='nonrecording')\r\n\r\n if (isNonrecording || !this.section.promptphase || this.section.promptphase === 'IDLE') {\r\n this.applyPrompt();\r\n }\r\n\r\n if(isNonrecording){\r\n this.startStopSignalState = StartStopSignalState.OFF;\r\n }else {\r\n if (this.items) {\r\n let it = this.items[this.promptIndex];\r\n if (!it.recs) {\r\n it.recs = new Array<RecordingFile>();\r\n }\r\n\r\n let recentRecFile: RecordingFile | null = null;\r\n let availRecfiles: number = it.recs.length;\r\n if (availRecfiles > 0) {\r\n let rfVers: number = availRecfiles - 1;\r\n recentRecFile = it.recs[rfVers];\r\n this.displayRecFile = recentRecFile;\r\n this.displayRecFileVersion = rfVers;\r\n\r\n } else {\r\n this.displayRecFile = null;\r\n this.displayRecFileVersion = 0;\r\n }\r\n }\r\n if (!temporary) {\r\n this.showRecording();\r\n }\r\n if(!this.readonly) {\r\n this.startStopSignalState = StartStopSignalState.IDLE;\r\n }\r\n }\r\n this.updateStartActionDisableState()\r\n this.updateNavigationActions()\r\n }\r\n\r\n\r\n start() {\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Starting session...';\r\n this.statusWaiting=false;\r\n if(this._session) {\r\n if (this._session.sealed) {\r\n this.readonly = true\r\n this.statusMsg = 'Session sealed!';\r\n //let dialogRef = this.dialog.open(SessionSealedDialog, {});\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Error',\r\n msg: \"This session is sealed. Recordings cannot be added anymore.\",\r\n advise: 'Please ask your experimenter what to do (e.g start a new session).',\r\n }\r\n });\r\n } else {\r\n let body: any = {};\r\n if (this._session.status === \"CREATED\") {\r\n this._session.status = \"LOADED\";\r\n body.status = this._session.status;\r\n if (!this._session.loadedDate) {\r\n this._session.loadedDate = new Date();\r\n body.loadedDate = this._session.loadedDate;\r\n }\r\n } else {\r\n this._session.restartedDate = new Date();\r\n body.restartedDate = this._session.restartedDate;\r\n }\r\n this.sessionService.patchSessionObserver(this._session, body).subscribe()\r\n }\r\n }\r\n\r\n // Check browser compatibility\r\n if(this.userAgent.detectedBrowser===Browser.Safari && this._channelCount>1){\r\n let eMsg=\"Error: Safari browser does not support stereo recordings.\";\r\n console.error(eMsg);\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Browser not supported',\r\n msg: eMsg,\r\n advice: \"Please use a supported browser, e.g. Mozilla Firefox.\"\r\n }\r\n })\r\n }\r\n\r\n //console.log(\"Session ID: \"+this._session.session+ \" status: \"+this._session.status)\r\n this._selectedDeviceId=undefined;\r\n\r\n if (!this.readonly && this.ac && (FORCE_REQUEST_AUDIO_PERMISSIONS || (this._audioDevices && this._audioDevices.length > 0))) {\r\n this.statusMsg = 'Requesting audio permissions...';\r\n this.statusAlertType = 'info';\r\n\r\n this.ac.deviceInfos((mdis) => {\r\n let audioCaptureDeviceAvail: boolean = false;\r\n let audioPlayDeviceAvail: boolean = false;\r\n if (mdis) {\r\n if(this.ac) {\r\n this.ac.printDevices(mdis);\r\n }\r\n if (mdis.length > 0) {\r\n for (let mdii = 0; mdii < mdis.length; mdii++) {\r\n let mdi = mdis[mdii];\r\n let kind=mdi.kind;\r\n if(kind === \"audioinput\"){\r\n audioCaptureDeviceAvail=true;\r\n }else if(kind=== \"audiooutput\"){\r\n audioPlayDeviceAvail=true;\r\n }\r\n }\r\n }\r\n\r\n if (this._session && this._session.type !== 'TEST_DEF_A' && this._audioDevices && this._audioDevices.length > 0) {\r\n let fdi: MediaDeviceInfo | null = null;\r\n for (let adI = 0; adI < this._audioDevices.length; adI++) {\r\n let ad = this._audioDevices[adI];\r\n if (ad.playback) {\r\n // project audio device config for playback device\r\n // not used for now\r\n continue;\r\n }\r\n for (let mdii = 0; mdii < mdis.length; mdii++) {\r\n let mdi = mdis[mdii];\r\n let kind=mdi.kind;\r\n if(kind === \"audioinput\"){\r\n audioCaptureDeviceAvail=true;\r\n }else if(kind=== \"audiooutput\"){\r\n audioPlayDeviceAvail=true;\r\n }\r\n if (ad.regex) {\r\n //console.log(\"Match?: \\'\"+mdi.label+\"\\' \\'\"+ad.name+\"\\'\");\r\n if (mdi.label.match(ad.name)) {\r\n fdi = mdi;\r\n //console.log(\"Match!\");\r\n }\r\n } else {\r\n if (mdi.label.trim() === ad.name.trim()) {\r\n fdi = mdi;\r\n }\r\n }\r\n if (fdi) {\r\n break;\r\n }\r\n }\r\n if (fdi) {\r\n break;\r\n }\r\n }\r\n\r\n if (fdi) {\r\n // matching device found\r\n\r\n // Not able to open device here since Chrome 71\r\n // Chrome 71 requires a user gesture before the AudioContext can be resumed\r\n // sessionmanager.ts:712 Open session with default audio device for 1 channels\r\n // capture.ts:128 The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://goo.gl/7K7WLu\r\n // push../projects/speechrecorderng/src/lib/audio/capture/capture.ts.AudioCapture.open @ capture.ts:128\r\n\r\n //this.ac.open(this._channelCount, fdi.deviceId);\r\n console.info(\"Set selected audio device: \\'\" + fdi.label + \"\\' Id: \\'\" + fdi.deviceId + \"\\'\");\r\n this._selectedDeviceId = fdi.deviceId;\r\n\r\n this.enableStartUserGesture()\r\n } else {\r\n // device not found\r\n this.statusMsg = 'ERROR: Required audio device not available!';\r\n this.statusAlertType = 'error';\r\n this.readonly = true;\r\n\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Required audio device',\r\n msg: \"Required audio device not found\",\r\n advice: \"Please connect a suitable audio device for this project and retry (press the browser reload button).\"\r\n }\r\n })\r\n }\r\n }else{\r\n if(!audioCaptureDeviceAvail && !audioPlayDeviceAvail){\r\n // no device found\r\n this.statusMsg = 'ERROR: No audio device available!';\r\n this.statusAlertType = 'warn';\r\n //this.readonly = true;\r\n\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'warn',\r\n title: 'No audio device',\r\n msg: \"No audio device found\",\r\n advice: \"Please connect an audio device and retry (press the browser reload button) or try to continue anyway.\"\r\n }\r\n })\r\n }else {\r\n if (!this.readonly && !audioCaptureDeviceAvail) {\r\n // no device found\r\n this.statusMsg = 'WARNING: No audio capture device available!';\r\n this.statusAlertType = 'warning';\r\n //this.readonly = true;\r\n\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'warning',\r\n title: 'No audio capture device',\r\n msg: \"No audio capture device found\",\r\n advice: \"Please connect an audio capture device and retry (press the browser reload button) or try to continue anyway.\"\r\n }\r\n })\r\n }\r\n // Safari does not list playback devices\r\n if (!audioPlayDeviceAvail) {\r\n // Firefox does not enumerate audiooutput devices\r\n // Do not show this warning, because it would always appear on Firefox\r\n // When https://bugzilla.mozilla.org/show_bug.cgi?id=1498512 is fixed the warning can be enabled for Firefox as well\r\n\r\n // It is already implemneted but kept behind a preference setting https://bugzilla.mozilla.org/show_bug.cgi?id=1152401\r\n\r\n\r\n // Output devices are listed if about:config media.setsinkid.enabled=true\r\n // but default setting is false\r\n\r\n\r\n // Same problem with Safari\r\n\r\n if (!(this.userAgent.detectedBrowser===Browser.Safari || this.userAgent.detectedBrowser===Browser.Firefox)) {\r\n // no device found\r\n this.statusMsg = 'WARNING: No audio playback device available!';\r\n this.statusAlertType = 'warn';\r\n //this.readonly = true;\r\n\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'warn',\r\n title: 'No audio playback device',\r\n msg: \"No audio playback device found\",\r\n advice: \"Please connect an audio playback device and retry (press the browser reload button) or try to continue anyway.\"\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n // Not able to open device here since Chrome 71\r\n // Chrome 71 requires a user gesture before the AudioContext can be resumed\r\n // sessionmanager.ts:712 Open session with default audio device for 1 channels\r\n // capture.ts:128 The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://goo.gl/7K7WLu\r\n // push../projects/speechrecorderng/src/lib/audio/capture/capture.ts.AudioCapture.open @ capture.ts:128\r\n //console.log(\"Open session with default audio device for \"+this._channelCount+\" channels\");\r\n //this.ac.open(this._channelCount);\r\n\r\n // enable start gesture anyway\r\n this.enableStartUserGesture()\r\n }\r\n }\r\n\r\n });\r\n }\r\n if(this.promptItemCount>0) {\r\n this.promptIndex = 0;\r\n }\r\n this.enableNavigation()\r\n }\r\n\r\n isRecording(): boolean {\r\n return (this.status === Status.PRE_RECORDING || this.status === Status.RECORDING);\r\n }\r\n\r\n isActive(): boolean{\r\n return (!(this.status === Status.BLOCKED || this.status=== Status.IDLE || this.status===Status.ERROR) || this.processingRecording || this.sessionService.uploadCount>0)\r\n }\r\n\r\n prevItem() {\r\n let newPrIdx=this._promptIndex;\r\n newPrIdx--;\r\n if(newPrIdx<0){\r\n newPrIdx=this.promptItemCount-1;\r\n }\r\n this.promptIndex=newPrIdx;\r\n //this.updateNavigationActions()\r\n }\r\n\r\n\r\n nextItem() {\r\n let newPrIdx=this._promptIndex;\r\n newPrIdx++;\r\n if(newPrIdx>=this.promptItemCount){\r\n newPrIdx=0;\r\n }\r\n this.promptIndex=newPrIdx;\r\n //this.updateNavigationActions();\r\n }\r\n\r\n private updateNavigationActions(){\r\n let fwdNxtActionDisabled=true;\r\n if(this.items){\r\n let currRecs=this.items[this._promptIndex].recs;\r\n fwdNxtActionDisabled= ! (currRecs!=null && currRecs.length>0);\r\n }\r\n this.transportActions.fwdNextAction.disabled = this.navigationDisabled || fwdNxtActionDisabled;\r\n this.transportActions.fwdAction.disabled = this.navigationDisabled;\r\n this.transportActions.bwdAction.disabled = this.navigationDisabled;\r\n }\r\n\r\n nextUnrecordedItem() {\r\n let newPrIdx = this._promptIndex;\r\n newPrIdx++;\r\n if (newPrIdx >= this.promptItemCount) {\r\n newPrIdx = 0;\r\n }\r\n if(this.items!=null) {\r\n let itRecs=this.items[newPrIdx].recs;\r\n while (itRecs!=null && (itRecs.length > 0) && newPrIdx < this.promptItemCount) {\r\n newPrIdx++;\r\n itRecs=this.items[newPrIdx].recs;\r\n }\r\n if (!itRecs || itRecs.length == 0) {\r\n this.promptIndex = newPrIdx;\r\n }\r\n }\r\n }\r\n\r\n enableStartUserGesture() {\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Ready.';\r\n //this.updateStartActionDisableState()\r\n this.transportActions.startAction.disabled=!(this.ac && this.isRecordingItem());\r\n\r\n }\r\n\r\n enableNavigation(){\r\n this.navigationDisabled=false;\r\n this.updateNavigationActions();\r\n }\r\n\r\n opened() {\r\n // this.statusAlertType = 'info';\r\n // this.statusMsg = 'Ready.';\r\n // this.updateStartActionDisableState()\r\n // this.transportActions.fwdAction.disabled = false\r\n // this.transportActions.bwdAction.disabled = false\r\n if(this.ac) {\r\n this.ac.start();\r\n }\r\n }\r\n\r\n started() {\r\n this.status = Status.PRE_RECORDING;\r\n this.transportActions.startAction.disabled = true;\r\n this.startStopSignalState = StartStopSignalState.PRERECORDING;\r\n if(this._session) {\r\n if (this._session.status === \"LOADED\") {\r\n let body: any = {};\r\n if (this.section.training) {\r\n this._session.status = \"STARTED_TRAINING\"\r\n body.status = this._session.status;\r\n if (!this._session.startedTrainingDate) {\r\n this._session.startedTrainingDate = new Date();\r\n body.startedTrainingDate = this._session.startedTrainingDate;\r\n }\r\n } else {\r\n this._session.status = \"STARTED\"\r\n body.status = this._session.status;\r\n if (!this._session.startedDate) {\r\n this._session.startedDate = new Date();\r\n body.startedDate = this._session.startedDate;\r\n }\r\n }\r\n this.sessionService.patchSessionObserver(this._session, body).subscribe()\r\n }\r\n }\r\n if (this.section.promptphase === 'PRERECORDING') {\r\n this.applyPrompt();\r\n }\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Recording...';\r\n\r\n let preDelay = DEFAULT_PRE_REC_DELAY;\r\n if (this.promptItem.prerecording) {\r\n preDelay = this.promptItem.prerecording;\r\n }\r\n\r\n let postDelay=DEFAULT_POST_REC_DELAY;\r\n if(this.promptItem.postrecording){\r\n postDelay=this.promptItem.postrecording;\r\n }\r\n\r\n let maxRecordingTimeMs = MAX_RECORDING_TIME_MS;\r\n if (this.promptItem.recduration) {\r\n maxRecordingTimeMs = preDelay+this.promptItem.recduration+postDelay;\r\n }\r\n this.maxRecTimerId = window.setTimeout(() => {\r\n this.stopRecordingMaxRec()\r\n }, maxRecordingTimeMs);\r\n this.maxRecTimerRunning = true;\r\n\r\n\r\n\r\n this.preRecTimerId = window.setTimeout(() => {\r\n\r\n this.preRecTimerRunning = false;\r\n this.status = Status.RECORDING;\r\n this.startStopSignalState = StartStopSignalState.RECORDING;\r\n if (this.section.mode === 'AUTORECORDING') {\r\n this.transportActions.nextAction.disabled = false;\r\n this.transportActions.pauseAction.disabled = false;\r\n } else {\r\n this.transportActions.stopAction.disabled = false;\r\n }\r\n if (this.section.promptphase === 'RECORDING') {\r\n this.applyPrompt();\r\n }\r\n }, preDelay);\r\n this.preRecTimerRunning = true;\r\n }\r\n\r\n stopItem() {\r\n this.status = Status.POST_REC_STOP;\r\n this.startStopSignalState = StartStopSignalState.POSTRECORDING;\r\n this.transportActions.stopAction.disabled = true;\r\n this.transportActions.nextAction.disabled = true;\r\n let postDelay = 500;\r\n if (this.promptItem.postrecording) {\r\n postDelay = this.promptItem.postrecording;\r\n }\r\n this.postRecTimerId = window.setTimeout(() => {\r\n this.postRecTimerRunning = false;\r\n this.status = Status.STOPPING_STOP;\r\n this.stopRecording();\r\n }, postDelay);\r\n this.postRecTimerRunning = true;\r\n }\r\n\r\n pauseItem() {\r\n this.status = Status.POST_REC_PAUSE;\r\n this.transportActions.pauseAction.disabled = true;\r\n this.startStopSignalState = StartStopSignalState.POSTRECORDING;\r\n this.transportActions.stopAction.disabled = true;\r\n this.transportActions.nextAction.disabled = true;\r\n this.transportActions.pauseAction.disabled = true;\r\n let postDelay = 500;\r\n if (this.promptItem.postrecording) {\r\n postDelay = this.promptItem.postrecording;\r\n }\r\n\r\n\r\n this.postRecTimerId = window.setTimeout(() => {\r\n this.postRecTimerRunning = false;\r\n this.status = Status.STOPPING_PAUSE;\r\n this.stopRecording();\r\n }, postDelay);\r\n this.postRecTimerRunning = true;\r\n }\r\n\r\n stopRecording() {\r\n if (this.maxRecTimerRunning) {\r\n if(this.maxRecTimerId) {\r\n window.clearTimeout(this.maxRecTimerId);\r\n }\r\n this.maxRecTimerRunning = false;\r\n }\r\n if(this.ac) {\r\n this.ac.stop();\r\n }\r\n }\r\n\r\n stopRecordingMaxRec(){\r\n if(this.postRecTimerRunning){\r\n if(this.postRecTimerId) {\r\n window.clearTimeout(this.postRecTimerId);\r\n }\r\n this.postRecTimerRunning=false;\r\n }\r\n this.maxRecTimerRunning = false;\r\n this.status = Status.STOPPING_STOP;\r\n if(this.ac) {\r\n this.ac.stop();\r\n }\r\n }\r\n\r\n addRecordingFileByDescriptor(rfd:RecordingFileDescriptor){\r\n if(rfd.recording && rfd.recording.itemcode) {\r\n let prIdx = this.promptIndexByItemcode(rfd.recording.itemcode);\r\n if (this.items!=null && prIdx !== null) {\r\n let it = this.items[prIdx];\r\n if (it && this._session) {\r\n if (!it.recs) {\r\n it.recs = new Array<RecordingFile>();\r\n }\r\n let rf = new RecordingFile(this._session.sessionId, rfd.recording.itemcode, rfd.version, null);\r\n it.recs[rfd.version] = rf;\r\n\r\n } else {\r\n //console.debug(\"WARN: No recording item with code: \\\"\" +rfd.recording.itemcode+ \"\\\" found.\");\r\n }\r\n } else {\r\n //console.debug(\"WARN: No recording item with code: \\\"\" +rfd.recording.itemcode+ \"\\\" found.\");\r\n }\r\n }\r\n }\r\n\r\n addRecordingFileByPromptIndex(promptIndex:number, rf:RecordingFile){\r\n\r\n }\r\n\r\n\r\n stopped() {\r\n this.updateStartActionDisableState()\r\n this.transportActions.stopAction.disabled = true;\r\n this.transportActions.nextAction.disabled = true;\r\n this.transportActions.pauseAction.disabled = true;\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Recorded.';\r\n this.startStopSignalState = StartStopSignalState.IDLE;\r\n\r\n let ad = null;\r\n if(this.ac!=null){\r\n ad=this.ac.audioBuffer();\r\n }\r\n let ic = this.promptItem.itemcode;\r\n let rf=null;\r\n if (this._session && ic) {\r\n let sessId: string | number = this._session.sessionId;\r\n let cpIdx = this.promptIndex;\r\n if (this.items) {\r\n let it=this.items[cpIdx];\r\n if (!it.recs) {\r\n it.recs = new Array<RecordingFile>();\r\n }\r\n rf = new RecordingFile(sessId, ic, it.recs.length, ad);\r\n it.recs.push(rf);\r\n }\r\n if (this.enableUploadRecordings) {\r\n // TODO use SpeechRecorderconfig resp. RecfileService\r\n // convert asynchronously to 16-bit integer PCM\r\n // TODO could we avoid conversion to save CPU resources and transfer float PCM directly?\r\n // TODO duplicate conversion for manual download\r\n //console.log(\"Build wav writer...\");\r\n this.processingRecording=true\r\n if(ad && rf) {\r\n let ww = new WavWriter();\r\n //new REST API URL\r\n let apiEndPoint = '';\r\n if (this.config && this.config.apiEndPoint) {\r\n apiEndPoint = this.config.apiEndPoint;\r\n }\r\n if (apiEndPoint !== '') {\r\n apiEndPoint = apiEndPoint + '/'\r\n }\r\n let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;\r\n let recUrl: string = sessionsUrl + '/' + rf.session + '/' + RECFILE_API_CTX + '/' + rf.itemCode;\r\n ww.writeAsync(ad, (wavFile) => {\r\n this.postRecording(wavFile, recUrl);\r\n this.processingRecording = false\r\n });\r\n }\r\n }\r\n }\r\n\r\n // check complete session\r\n let complete = true;\r\n if(this.items) {\r\n // search backwards, to gain faster detection of incomplete state\r\n for (let ri = this.items.length - 1; ri >= 0; ri--) {\r\n let it = this.items[ri];\r\n if (!it.training && (!it.recs || it.recs.length == 0)) {\r\n complete = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let autoStart = (this.status === Status.STOPPING_STOP);\r\n this.status = Status.IDLE;\r\n let startNext=false;\r\n if (complete) {\r\n if(this._session!=null) {\r\n if (!this._session.sealed && this._session.status !== \"COMPLETED\") {\r\n let body: any = {}\r\n this._session.status = \"COMPLETED\";\r\n body.status = this._session.status;\r\n if (!this._session.completedDate) {\r\n this._session.completedDate = new Date();\r\n body.completedDate = this._session.completedDate;\r\n }\r\n this.sessionService.patchSessionObserver(this._session, body).subscribe()\r\n }\r\n }\r\n this.statusMsg = 'Session complete!';\r\n let dialogRef = this.dialog.open(SessionFinishedDialog, {});\r\n\r\n // enable navigation\r\n this.transportActions.fwdAction.disabled = false\r\n this.transportActions.bwdAction.disabled = false\r\n } else {\r\n\r\n if (this.section.mode === 'AUTOPROGRESS' || this.section.mode === 'AUTORECORDING') {\r\n this.nextItem();\r\n }\r\n\r\n if (this.section.mode === 'AUTORECORDING' && this.autorecording && autoStart) {\r\n startNext=true;\r\n } else {\r\n this.navigationDisabled = false;\r\n this.updateNavigationActions();\r\n }\r\n }\r\n // apply recorded item\r\n this.applyItem(startNext);\r\n if(startNext){\r\n this.startItem();\r\n }\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n postRecording(wavFile: Uint8Array, recUrl: string) {\r\n let wavBlob = new Blob([wavFile], {type: 'audio/wav'});\r\n let ul = new Upload(wavBlob, recUrl);\r\n this.uploader.queueUpload(ul);\r\n }\r\n\r\n stop() {\r\n if(this.ac!=null){\r\n this.ac.close();\r\n }\r\n }\r\n\r\n private updateControlPlaybackPosition() {\r\n if (this._controlAudioPlayer.playPositionFrames) {\r\n this.prompting.audioDisplay.playFramePosition = this._controlAudioPlayer.playPositionFrames;\r\n this.liveLevelDisplay.playFramePosition = this._controlAudioPlayer.playPositionFrames;\r\n }\r\n }\r\n\r\n audioPlayerUpdate(e: AudioPlayerEvent) {\r\n if (EventType.READY === e.type) {\r\n\r\n } else if (EventType.STARTED === e.type) {\r\n //this.status = 'Playback...';\r\n this.updateTimerId = window.setInterval(() => this.updateControlPlaybackPosition(), 50);\r\n\r\n } else if (EventType.ENDED === e.type) {\r\n //.status='Ready.';\r\n window.clearInterval(this.updateTimerId);\r\n\r\n }\r\n\r\n if(!this.destroyed) {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n }\r\n\r\n closed() {\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Session closed.';\r\n }\r\n\r\n\r\n error(msg='An unknown error occured during recording.',advice:string='Please retry.') {\r\n this.statusMsg = 'ERROR: Recording.';\r\n this.statusAlertType = 'error';\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Recording error',\r\n msg: msg,\r\n advice: advice\r\n }\r\n });\r\n }\r\n}\r\n\r\n","/**\r\n * Created by klausj on 17.06.2017.\r\n */\r\nimport {Inject, Injectable} from '@angular/core';\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {ApiType, SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../../spr.config\";\r\nimport {Script} from \"./script\";\r\nimport {UUID} from \"../../utils/utils\";\r\nimport {Observable} from \"rxjs\";\r\n\r\n\r\nexport const SCRIPT_API_CTX='script'\r\n\r\n@Injectable()\r\nexport class ScriptService {\r\n private scriptCtxUrl:string;\r\n private withCredentials:boolean=false;\r\n\r\n constructor(private http:HttpClient,@Inject(SPEECHRECORDER_CONFIG) private config?:SpeechRecorderConfig) {\r\n\r\n let apiEndPoint = ''\r\n\r\n if(config && config.apiEndPoint) {\r\n apiEndPoint=config.apiEndPoint;\r\n }\r\n if(apiEndPoint !== ''){\r\n apiEndPoint=apiEndPoint+'/'\r\n }\r\n if(config!=null && config.withCredentials!=null){\r\n this.withCredentials=config.withCredentials;\r\n }\r\n this.scriptCtxUrl = apiEndPoint + SCRIPT_API_CTX;\r\n }\r\n\r\n scriptObservable(id:string | number):Observable<Script>{\r\n let encScriptId=encodeURIComponent(id);\r\n let scriptUrl = this.scriptCtxUrl + '/' + encScriptId;\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n scriptUrl = scriptUrl + '.json?requestUUID='+UUID.generate();\r\n }\r\n return this.http.get<Script>(scriptUrl,{withCredentials: this.withCredentials })\r\n\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n","import {Component, ViewChild, ChangeDetectorRef, AfterViewInit, OnInit} from '@angular/core'\r\nimport {\r\n AudioPlayerListener, AudioPlayerEvent, EventType as PlaybackEventType,\r\n AudioPlayer\r\n} from './audio/playback/player';\r\nimport {Group, Order, PromptItem, Script} from './speechrecorder/script/script'\r\nimport { SessionManager,Status as SessionManagerStatus} from './speechrecorder/session/sessionmanager';\r\nimport { UploaderStatusChangeEvent, UploaderStatus } from './net/uploader';\r\nimport {ActivatedRoute, Params, Router} from \"@angular/router\";\r\nimport {SessionService} from \"./speechrecorder/session/session.service\";\r\nimport {ScriptService} from \"./speechrecorder/script/script.service\";\r\nimport {SpeechRecorderUploader} from \"./speechrecorder/spruploader\";\r\nimport {Session} from \"./speechrecorder/session/session\";\r\nimport {Project, ProjectUtil} from \"./speechrecorder/project/project\";\r\nimport {ProjectService} from \"./speechrecorder/project/project.service\";\r\nimport {AudioContextProvider} from \"./audio/context\";\r\nimport {RecordingService} from \"./speechrecorder/recordings/recordings.service\";\r\nimport {RecordingFileDescriptor} from \"./speechrecorder/recording\";\r\nimport {Arrays} from \"./utils/utils\";\r\n\r\nexport enum Mode {SINGLE_SESSION,DEMO}\r\n\r\n@Component({\r\n\r\n selector: 'app-speechrecorder',\r\n providers: [SessionService],\r\n template: `\r\n <app-sprrecordingsession [projectName]=\"project?.name\" [dataSaved]=\"dataSaved\"></app-sprrecordingsession>\r\n `,\r\n styles: [`:host{\r\n flex: 2;\r\n display: flex;\r\n flex-direction: column;\r\n min-height:0;\r\n\r\n }`]\r\n\r\n})\r\nexport class SpeechrecorderngComponent implements OnInit,AfterViewInit,AudioPlayerListener {\r\n\r\n\t mode!:Mode;\r\n\t\tcontrolAudioPlayer!:AudioPlayer;\r\n\t\taudio:any;\r\n\r\n\t_project:Project|null=null;\r\n sessionId!: string;\r\n session!:Session;\r\n\r\n script!:Script;\r\n dataSaved: boolean = true;\r\n @ViewChild(SessionManager, { static: true }) sm!:SessionManager;\r\n\r\n\t\tconstructor(private route: ActivatedRoute,\r\n private router: Router,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n private sessionsService:SessionService,\r\n private projectService:ProjectService,\r\n private scriptService:ScriptService,\r\n private recFilesService:RecordingService,\r\n private uploader:SpeechRecorderUploader) {\r\n\t\t}\r\n\r\n ngOnInit() {\r\n\t\t try {\r\n let audioContext = AudioContextProvider.audioContextInstance();\r\n if(audioContext) {\r\n this.controlAudioPlayer = new AudioPlayer(audioContext, this);\r\n }\r\n this.sm.controlAudioPlayer=this.controlAudioPlayer;\r\n this.sm.statusAlertType='info';\r\n this.sm.statusMsg = 'Player initialized.';\r\n }catch(err){\r\n this.sm.statusMsg=err.message;\r\n this.sm.statusAlertType='error';\r\n console.error(err.message)\r\n }\r\n }\r\n ngAfterViewInit(){\r\n\r\n\t\t if(this.sm.status!== SessionManagerStatus.ERROR) {\r\n let initSuccess = this.init();\r\n if (initSuccess) {\r\n this.route.queryParams.subscribe((params: Params) => {\r\n if (params['sessionId']) {\r\n this.fetchSession(params['sessionId']);\r\n }\r\n });\r\n\r\n this.route.params.subscribe((params: Params) => {\r\n let routeParamsId = params['id'];\r\n if (routeParamsId) {\r\n this.fetchSession(routeParamsId);\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n fetchSession(sessionId:string){\r\n\r\n\r\n\t\t //Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'statusMsg: Player initialized.'. Current value: 'statusMsg: Fetching session info...'.\r\n // params.subscribe seems not to be asynchronous\r\n\r\n // this.sm.statusAlertType='info';\r\n // this.sm.statusMsg = 'Fetching session info...';\r\n // this.sm.statusWaiting=true;\r\n let sessObs= this.sessionsService.sessionObserver(sessionId);\r\n\r\n if(sessObs) {\r\n sessObs.subscribe(sess => {\r\n this.setSession(sess);\r\n this.sm.statusAlertType='info';\r\n this.sm.statusMsg = 'Received session info.';\r\n this.sm.statusWaiting=false;\r\n if (sess.project) {\r\n //console.debug(\"Session associated project: \"+sess.project)\r\n this.projectService.projectObservable(sess.project).subscribe(project=>{\r\n this.project=project;\r\n this.fetchScript(sess);\r\n },reason =>{\r\n this.sm.statusMsg=reason;\r\n this.sm.statusAlertType='error';\r\n this.sm.statusWaiting=false;\r\n console.error(\"Error fetching project config: \"+reason)\r\n });\r\n\r\n } else {\r\n console.info(\"Session has no associated project. Using default configuration.\")\r\n this.fetchScript(sess);\r\n }\r\n },\r\n (reason) => {\r\n this.sm.statusMsg = reason;\r\n this.sm.statusAlertType = 'error';\r\n this.sm.statusWaiting=false;\r\n console.error(\"Error fetching session \" + reason)\r\n });\r\n }\r\n }\r\n\r\n\r\n fetchScript(sess:Session){\r\n if(sess.script){\r\n this.sm.statusAlertType='info';\r\n this.sm.statusMsg = 'Fetching recording script...';\r\n this.sm.statusWaiting=true;\r\n this.scriptService.scriptObservable(sess.script).subscribe(script=>{\r\n this.sm.statusAlertType='info';\r\n this.sm.statusMsg = 'Received recording script.';\r\n this.sm.statusWaiting=false;\r\n this.setScript(script)\r\n this.sm.session=sess;\r\n this.fetchRecordings(sess,this.script)\r\n },reason =>{\r\n let errMsg=\"Error fetching recording script: \"+reason\r\n console.error(errMsg)\r\n this.sm.statusMsg=errMsg;\r\n this.sm.statusAlertType='error';\r\n this.sm.statusWaiting=false;\r\n });\r\n }else{\r\n let errMsg=\"No recording script is defined for this session with ID \"+sess.sessionId;\r\n console.error(this.sm.statusMsg)\r\n this.sm.statusMsg=errMsg;\r\n this.sm.statusAlertType='error';\r\n\r\n }\r\n }\r\n\r\n\r\n fetchRecordings(sess:Session,script:Script){\r\n this.sm.statusAlertType='info';\r\n this.sm.statusMsg = 'Fetching infos of recordings...';\r\n this.sm.statusWaiting=true;\r\n let prNm:string|null=null;\r\n if(this.project) {\r\n let rfsObs = this.recFilesService.recordingFileDescrList(this.project.name, sess.sessionId);\r\n rfsObs.subscribe((rfs: Array<RecordingFileDescriptor>) => {\r\n this.sm.statusAlertType = 'info';\r\n this.sm.statusMsg = 'Received infos of recordings.';\r\n this.sm.statusWaiting = false;\r\n if (rfs) {\r\n if (rfs instanceof Array) {\r\n rfs.forEach((rf) => {\r\n //console.debug(\"Already recorded: \" + rf+ \" \"+rf.recording.itemcode);\r\n this.sm.addRecordingFileByDescriptor(rf);\r\n })\r\n } else {\r\n console.error('Expected type array for list of already recorded files ')\r\n }\r\n } else {\r\n //console.debug(\"Recording file list: \" + rfs);\r\n }\r\n }, () => {\r\n // we start the session anyway\r\n this.startSession()\r\n }, () => {\r\n this.startSession()\r\n })\r\n }else{\r\n // TODO\r\n }\r\n }\r\n\r\n\r\n private startSession(){\r\n this.sm.statusWaiting=false;\r\n\t\t this.sm.start();\r\n }\r\n\r\n\r\n setSession(session:any){\r\n\t\t if(session) {\r\n // console.debug(\"Session ID: \" + session.sessionId);\r\n }else{\r\n //console.debug(\"Session Undefined\");\r\n }\r\n }\r\n\r\n ready():boolean{\r\n\t\t return this.dataSaved && !this.sm.isActive()\r\n }\r\n\r\n\t\tinit():boolean {\r\n\r\n\t\t\tvar n = <any>navigator;\r\n\t\t\t//var getUserMediaFnct= n.getUserMedia || n.webkitGetUserMedia ||\r\n\t\t\t//\tn.mozGetUserMedia || n.msGetUserMedia;\r\n\t\t\tvar w = <any>window;\r\n\t\t\t// TODO test onyl !!\r\n\r\n // let debugFail=true;\r\n\t\t// \tAudioContext = w.AudioContext || w.webkitAudioContext;\r\n\t\t// \tif (typeof AudioContext !== 'function' || debugFail) {\r\n // this.sm.statusAlertType='error';\r\n\t\t// \t\tthis.sm.statusMsg = 'ERROR: Browser does not support Web Audio API!';\r\n\t\t// \t\treturn false;\r\n\t\t// \t} else {\r\n\t\t// \t\tvar context = new AudioContext();\r\n //\r\n\t\t// \t\tif (typeof navigator.mediaDevices.getUserMedia !== 'function') {\r\n // this.sm.statusAlertType='error';\r\n\t\t// \t\t\tthis.sm.statusMsg= 'ERROR: Browser does not support Media streams!';\r\n // return false;\r\n\t\t// \t\t} else {\r\n //\r\n\r\n //this.sm = new SessionManager(new SimpleTrafficLight(), this.uploader);\r\n\t\t\t\t\t//this.sm.init();\r\n\t\t\t\t\t//this.ap = new AudioPlayer(context,this);\r\n\t\t\t\t\t//this.sm.listener=this;\r\n\t\t\t//\t}\r\n\t\t//\t}\r\n this.uploader.listener = (ue) => {\r\n this.uploadUpdate(ue);\r\n }\r\n\r\n window.addEventListener('beforeunload', (e) => {\r\n console.debug(\"Before page unload event\");\r\n\r\n if (this.ready()) {\r\n return;\r\n } else {\r\n // all this attempts to customize the message do not work anymore (for security reasons)!!\r\n var message = \"Please do not leave the page, until all recordings are uploaded!\";\r\n alert(message);\r\n e = e || window.event;\r\n\r\n if (e) {\r\n e.returnValue = message;\r\n e.cancelBubble = true;\r\n if (e.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n if (e.preventDefault) {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n return message;\r\n }\r\n });\r\n\t\t\treturn true;\r\n }\r\n\r\n uploadUpdate(ue: UploaderStatusChangeEvent) {\r\n let upStatus = ue.status;\r\n this.dataSaved = (UploaderStatus.DONE === upStatus);\r\n let percentUpl = ue.percentDone();\r\n if (UploaderStatus.ERR === upStatus) {\r\n this.sm.uploadStatus = 'warn'\r\n } else {\r\n if (percentUpl < 50) {\r\n this.sm.uploadStatus = 'accent'\r\n } else {\r\n this.sm.uploadStatus = 'success'\r\n }\r\n this.sm.uploadProgress = percentUpl;\r\n }\r\n\r\n this.changeDetectorRef.detectChanges()\r\n }\r\n\r\n configure() {\r\n\r\n\r\n\r\n this.loadProjectCfg(() => {\r\n // display project name\r\n let prName: string = '[Unknown]';\r\n if (this.project && this.project.name) {\r\n prName = this.project.name;\r\n }\r\n //this.titleEl.innerText = prName;\r\n\r\n });\r\n\r\n }\r\n\r\n\r\n private randomize(script:Script){\r\n\t\t script.sections.forEach((s)=>{\r\n\t\t if('RANDOM'===s.order) {\r\n s._shuffledGroups = Arrays.shuffleArray<Group>(s.groups);\r\n }else{\r\n\t\t s._shuffledGroups=s.groups;\r\n }\r\n\t\t s._shuffledGroups.forEach((g)=>{\r\n\t\t if('RANDOM'===g.order){\r\n\t\t g._shuffledPromptItems=Arrays.shuffleArray<PromptItem>(g.promptItems);\r\n }else{\r\n\t\t g._shuffledPromptItems=g.promptItems;\r\n }\r\n });\r\n });\r\n }\r\n\r\n setScript(script:Script){\r\n this.script=script;\r\n this.randomize(this.script);\r\n this.sm.script = this.script;\r\n }\r\n\r\n\r\n set project(project: Project|null) {\r\n this._project = project;\r\n let chCnt = ProjectUtil.DEFAULT_AUDIO_CHANNEL_COUNT;\r\n\r\n if (project) {\r\n console.info(\"Project name: \" + project.name)\r\n this.sm.audioDevices = project.audioDevices;\r\n chCnt = ProjectUtil.audioChannelCount(project);\r\n console.info(\"Project requested recording channel count: \" + chCnt);\r\n this.sm.autoGainControlConfigs=project.autoGainControlConfigs;\r\n } else {\r\n console.error(\"Empty project configuration!\")\r\n }\r\n this.sm.channelCount = chCnt;\r\n\r\n }\r\n\r\n get project():Project|null{\r\n\t\t return this._project;\r\n }\r\n\r\n\r\n\r\n\r\n loadProjectCfg(callback: ()=> any){\r\n let projUrl: string | null = null;\r\n\r\n if (this.sessionId === null) {\r\n if (window.location.hostname === 'localhost' || this.mode === Mode.DEMO) {\r\n // debug or demo mode\r\n projUrl = 'test/Demo1.json?' + new Date().getTime();\r\n }\r\n } else {\r\n // load RESTful by sessionId\r\n projUrl = window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/wikispeech/rest/projects/?sessionId=' + this.sessionId;\r\n\r\n }\r\n if(projUrl) {\r\n var pLoader = new XMLHttpRequest();\r\n pLoader.open(\"GET\", projUrl, true);\r\n pLoader.setRequestHeader('Accept', 'application/json');\r\n pLoader.responseType = \"json\";\r\n pLoader.onload = (e) => {\r\n\r\n this.project = pLoader.response.project;\r\n\r\n callback();\r\n }\r\n pLoader.onerror = (e) => {\r\n console.error(\"Error downloading project data ...\");\r\n }\r\n pLoader.send();\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n // loadScript(callback: ()=>any){\r\n // var scrLoader = new XMLHttpRequest();\r\n // let hn:string =window.location.hostname;\r\n // let pn:string =window.location.pathname;\r\n // let pr:string =window.location.protocol;\r\n // let po:string =window.location.port;\r\n //\r\n // let sessionId:string=this.session.sessionId;\r\n //\r\n // let scrUrl:string | null = null;\r\n //\r\n // if (hn === 'localhost' || this.mode===Mode.DEMO) {\r\n // // local debug mode\r\n // // FF caches\r\n // scrUrl = 'test/' + this.session.script.toString() + '.json?' + new Date().getTime();\r\n //\r\n // } else {\r\n // let scrPath:string = '/wikispeech/session/scripts/servlet';\r\n // let scrQu:string = 'sessionId=' + sessionId;\r\n // scrUrl = pr + '//' + hn + ':' + po + scrPath;\r\n // if (scrQu) {\r\n // scrUrl = scrUrl + '?' + scrQu;\r\n // }\r\n // }\r\n //\r\n // scrLoader.open(\"GET\",scrUrl , true);\r\n // scrLoader.setRequestHeader('Accept','application/json');\r\n // scrLoader.responseType = \"json\";\r\n // scrLoader.onload = (e) => {\r\n //\r\n // this.script = scrLoader.response;\r\n //\r\n //\r\n // this.sm.script = this.script;\r\n //\r\n // callback();\r\n // }\r\n // scrLoader.onerror = (e) => {\r\n // console.log(\"Error downloading recording script data ...\");\r\n // }\r\n // scrLoader.send();\r\n // }\r\n\r\n start(){\r\n\r\n //this.configure();\r\n\r\n }\r\n\r\n\t\taudioPlayerUpdate(e:AudioPlayerEvent){\r\n\t\t\tif(PlaybackEventType.STARTED===e.type){\r\n\t\t\t\t//this.startBtn.disabled=true;\r\n\t\t\t\t//this.stopBtn.disabled=true;\r\n this.sm.statusAlertType='info';\r\n\t\t\t\tthis.sm.statusMsg='Playback...';\r\n\r\n } else if (PlaybackEventType.ENDED === e.type) {\r\n\t\t\t\t//this.startBtn.disabled=false;\r\n\t\t\t\t//this.stopBtn.disabled=true;\r\n this.sm.statusAlertType='info';\r\n\t\t\t\tthis.sm.statusMsg='Ready.';\r\n\t\t\t}\r\n\t\t}\r\n\t\terror(){\r\n\t\t this.sm.statusAlertType='error';\r\n\t\t\tthis.sm.statusMsg='ERROR: Recording.';\r\n\t\t}\r\n\t}\r\n\r\n\r\n//\r\n//\r\n// function speechrecorderInit() {\r\n// \tvar spr = new ips.apps.speeechrecorder.SpeechRecorder();\r\n// \tspr.init();\r\n// spr.start();\r\n//\r\n//\r\n// }\r\n","import {Component} from \"@angular/core\";\n\n@Component({\n\n selector: 'scroll-pane-horizontal',\n template: '',\n styles: [\n `:host {\n width: 100%;\n background: darkgray;\n box-sizing: border-box;\n height: 100%;\n position: relative;\n overflow-x: scroll;\n overflow-y: auto;\n }`]\n\n})\nexport class ScrollPaneHorizontal{\n\n}\n","import {\r\n Component,\r\n ViewChild,\r\n ChangeDetectorRef,\r\n AfterViewInit, Input, AfterContentInit, OnInit, AfterContentChecked, AfterViewChecked, ElementRef,\r\n} from '@angular/core'\r\n\r\nimport {AudioClip, Selection} from './persistor'\r\nimport {AudioPlayer, AudioPlayerListener, AudioPlayerEvent, EventType} from './playback/player'\r\nimport {ActivatedRoute, Params} from \"@angular/router\";\r\nimport {Action} from \"../action/action\";\r\nimport {AudioDisplayScrollPane} from \"./ui/audio_display_scroll_pane\";\r\nimport {AudioContextProvider} from \"./context\";\r\n\r\n@Component({\r\n\r\n selector: 'app-audiodisplayplayer',\r\n\r\n template: `\r\n\r\n <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>\r\n\r\n <audio-display-control [audioClip]=\"audioClip\"\r\n [playStartAction]=\"playStartAction\"\r\n [playSelectionAction]=\"playSelectionAction\"\r\n [playStopAction]=\"playStopAction\"\r\n [autoPlayOnSelectToggleAction]=\"ap?.autoPlayOnSelectToggleAction\"\r\n [zoomInAction]=\"zoomInAction\"\r\n [zoomOutAction]=\"zoomOutAction\"\r\n [zoomSelectedAction]=\"zoomSelectedAction\"\r\n [zoomFitToPanelAction]=\"zoomFitToPanelAction\"></audio-display-control><p>{{status}}\r\n `,\r\n styles: [\r\n `:host {\r\n display: flex;\r\n flex-direction: column;\r\n position: absolute;\r\n bottom: 0px;\r\n height: 100%;\r\n width: 100%;\r\n overflow: hidden;\r\n padding: 20px;\r\n z-index: 5;\r\n box-sizing: border-box;\r\n background-color: rgba(0, 0, 0, 0.75)\r\n }`]\r\n\r\n})\r\nexport class AudioDisplayPlayer implements AudioPlayerListener, OnInit,AfterContentInit,AfterContentChecked,AfterViewInit,AfterViewChecked {\r\n private _audioUrl: string|null=null;\r\n\r\n parentE: HTMLElement;\r\n\r\n @Input()\r\n playStartAction: Action<void>;\r\n @Input()\r\n playStopAction: Action<void>;\r\n @Input()\r\n playSelectionAction:Action<void>\r\n @Input()\r\n autoPlayOnSelectToggleAction!:Action<boolean>;\r\n\r\n zoomFitToPanelAction!:Action<void>;\r\n zoomSelectedAction!:Action<void>;\r\n zoomInAction!:Action<void>;\r\n zoomOutAction!:Action<void>;\r\n\r\n\r\n aCtx: AudioContext|null=null;\r\n private _audioClip:AudioClip|null=null;\r\n ap: AudioPlayer|undefined;\r\n status: string;\r\n\r\n currentLoader: XMLHttpRequest | null=null;\r\n\r\n audio: any;\r\n updateTimerId: any;\r\n\r\n\r\n @ViewChild(AudioDisplayScrollPane, { static: true })\r\n private audioDisplayScrollPane!: AudioDisplayScrollPane;\r\n\r\n constructor(protected route: ActivatedRoute, protected ref: ChangeDetectorRef,protected eRef:ElementRef) {\r\n //console.log(\"constructor: \"+this.ac);\r\n this.parentE=this.eRef.nativeElement;\r\n this.playStartAction = new Action(\"Start\");\r\n this.playSelectionAction=new Action(\"Play selected\");\r\n this.playStopAction = new Action(\"Stop\");\r\n this.status=\"Player created.\";\r\n\r\n }\r\n\r\n ngOnInit(){\r\n //console.log(\"OnInit: \"+this.ac);\r\n this.zoomSelectedAction=this.audioDisplayScrollPane.zoomSelectedAction\r\n this.zoomFitToPanelAction=this.audioDisplayScrollPane.zoomFitToPanelAction;\r\n this.zoomOutAction=this.audioDisplayScrollPane.zoomOutAction;\r\n this.zoomInAction=this.audioDisplayScrollPane.zoomInAction;\r\n try {\r\n this.aCtx = AudioContextProvider.audioContextInstance();\r\n if(this.aCtx) {\r\n this.ap = new AudioPlayer(this.aCtx, this);\r\n }\r\n }catch(err){\r\n this.status = err.message;\r\n }\r\n }\r\n\r\n ngAfterContentInit(){\r\n //console.log(\"AfterContentInit: \"+this.ac);\r\n }\r\n\r\n ngAfterContentChecked(){\r\n //console.log(\"AfterContentChecked: \"+this.ac);\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.aCtx && this.ap) {\r\n this.playStartAction.onAction = () => this.ap?.start();\r\n this.playSelectionAction.onAction = () => this.ap?.startSelected();\r\n this.playStopAction.onAction = () => this.ap?.stop();\r\n }\r\n this.layout();\r\n let heightListener=new MutationObserver((mrs:Array<MutationRecord>,mo:MutationObserver)=>{\r\n mrs.forEach((mr:MutationRecord)=>{\r\n if('attributes'===mr.type && ('class'===mr.attributeName || 'style'===mr.attributeName)){\r\n this.layout();\r\n }\r\n })\r\n });\r\n heightListener.observe(this.parentE,{attributes: true,childList: true, characterData: true});\r\n this.route.queryParams.subscribe((params: Params) => {\r\n if (params['url']) {\r\n this.audioUrl = params['url'];\r\n }\r\n });\r\n }\r\n\r\n\r\n ngAfterViewChecked(){\r\n //console.log(\"AfterViewChecked: \"+this.ac);\r\n }\r\n\r\n\r\n init() {\r\n\r\n\r\n }\r\n\r\n layout(){\r\n this.audioDisplayScrollPane.layout();\r\n }\r\n\r\n get audioUrl(): string|null {\r\n return this._audioUrl;\r\n }\r\n\r\n set audioUrl(value: string|null) {\r\n if(this.ap) {\r\n this.ap.stop();\r\n }\r\n this._audioUrl = value;\r\n this.load();\r\n }\r\n\r\n\r\n started() {\r\n //console.debug(\"Play started\");\r\n this.status = 'Playing...';\r\n }\r\n\r\n private load() {\r\n\r\n if (this.currentLoader) {\r\n this.currentLoader.abort();\r\n this.currentLoader = null;\r\n }\r\n if(this._audioUrl) {\r\n //this.statusMsg.innerHTML = 'Connecting...';\r\n this.currentLoader = new XMLHttpRequest();\r\n this.currentLoader.open(\"GET\", this._audioUrl, true);\r\n this.currentLoader.responseType = \"arraybuffer\";\r\n this.currentLoader.onload = (e) => {\r\n if (this.currentLoader) {\r\n\r\n var data = this.currentLoader.response; // not responseText\r\n //console.debug(\"Received data \", data.byteLength);\r\n this.currentLoader = null;\r\n this.loaded(data);\r\n }\r\n }\r\n this.currentLoader.onerror = (e) => {\r\n console.error(\"Error downloading ...\");\r\n //this.statusMsg.innerHTML = 'Error loading audio file!';\r\n this.currentLoader = null;\r\n }\r\n //this.statusMsg.innerHTML = 'Loading...';\r\n\r\n this.currentLoader.send();\r\n }\r\n }\r\n\r\n private loaded(data: ArrayBuffer) {\r\n\r\n //console.debug(\"Loaded\");\r\n this.status = 'Audio file loaded.';\r\n //console.debug(\"Received data \", data.byteLength);\r\n\r\n // Do not use Promise version, which does not work with Safari 13\r\n if(this.aCtx) {\r\n this.aCtx.decodeAudioData(data, (audioBuffer) => {\r\n //console.debug(\"Audio Buffer Samplerate: \", audioBuffer.sampleRate)\r\n this.audioClip = new AudioClip(audioBuffer)\r\n });\r\n }\r\n }\r\n\r\n @Input()\r\n set audioData(audioBuffer: AudioBuffer){\r\n this.audioDisplayScrollPane.audioData = audioBuffer;\r\n if(audioBuffer) {\r\n let clip = new AudioClip(audioBuffer);\r\n if (this.ap){\r\n this.ap.audioClip = clip;\r\n this.playStartAction.disabled = false\r\n }\r\n }else{\r\n this.playStartAction.disabled = true\r\n if (this.ap){\r\n this.ap.audioClip = null;\r\n }\r\n }\r\n this.playSelectionAction.disabled=true\r\n }\r\n\r\n startSelectionDisabled(){\r\n return !(this._audioClip && this.ap!=null && !this.playStartAction.disabled && this._audioClip.selection )\r\n }\r\n\r\n @Input()\r\n set audioClip(audioClip: AudioClip | null) {\r\n this._audioClip=audioClip\r\n let audioData:AudioBuffer|null=null;\r\n let sel:Selection|null=null;\r\n if(audioClip){\r\n audioData=audioClip.buffer;\r\n sel=audioClip.selection;\r\n if(this._audioClip) {\r\n this._audioClip.addSelectionObserver((ac) => {\r\n\r\n this.playSelectionAction.disabled = this.startSelectionDisabled()\r\n // if(this.ap && ac.selection && this.autoplaySelectedCheckbox.checked){\r\n // this.ap.startSelected()\r\n // }\r\n\r\n })\r\n }\r\n }\r\n if(audioData) {\r\n this.playStartAction.disabled =(!this.ap)\r\n this.playSelectionAction.disabled=this.startSelectionDisabled()\r\n }else{\r\n this.playStartAction.disabled = true\r\n this.playSelectionAction.disabled=true\r\n }\r\n\r\n this.audioDisplayScrollPane.audioClip=audioClip\r\n if(this.ap) {\r\n this.ap.audioClip = audioClip\r\n }\r\n }\r\n\r\n get audioClip():AudioClip|null{\r\n return this._audioClip\r\n }\r\n\r\n updatePlayPosition() {\r\n\r\n if (this.ap && this.ap.playPositionFrames) {\r\n this.audioDisplayScrollPane.playFramePosition = this.ap.playPositionFrames;\r\n }\r\n }\r\n\r\n audioPlayerUpdate(e: AudioPlayerEvent) {\r\n if (EventType.STARTED === e.type) {\r\n this.status = 'Playback...';\r\n this.updateTimerId = window.setInterval(() => this.updatePlayPosition(), 50);\r\n this.playStartAction.disabled = true;\r\n this.playSelectionAction.disabled=true\r\n this.playStopAction.disabled = false;\r\n } else if (EventType.ENDED === e.type) {\r\n this.status = 'Ready.';\r\n window.clearInterval(this.updateTimerId);\r\n this.playStartAction.disabled = false;\r\n this.playSelectionAction.disabled=this.startSelectionDisabled()\r\n this.playStopAction.disabled = true;\r\n }\r\n\r\n this.ref.detectChanges();\r\n\r\n }\r\n\r\n error() {\r\n this.status = 'ERROR';\r\n }\r\n\r\n}\r\n\r\n","import {PromptItem, PromptitemUtil} from \"../../script/script\";\r\nimport {RecordingFile} from \"../../recording\";\r\n\r\n\r\n// export class RecordingFile {\r\n//\r\n// get recordingFileId(): string | number {\r\n// return this._recordingFileId;\r\n// }\r\n//\r\n// frames:number=null\r\n// editStartFrame:number=null\r\n// editEndFrame:number=null\r\n//\r\n// recording:PromptItem;\r\n//\r\n// session:number|string;\r\n//\r\n// get audioBuffer(): AudioBuffer {\r\n// return this._audioBuffer;\r\n// }\r\n//\r\n// set audioBuffer(value: AudioBuffer) {\r\n// this._audioBuffer = value;\r\n// }\r\n// private _recordingFileId:string | number;\r\n// private _audioBuffer:AudioBuffer;\r\n//\r\n// constructor(recordingFileId: string| number, audioBuffer:AudioBuffer){\r\n// this._recordingFileId=recordingFileId;\r\n// this._audioBuffer=audioBuffer;\r\n// }\r\n//\r\n//\r\n// }\r\n\r\nexport class RecordingFileUtil {\r\n public static recordingAsPlainText(recordingFile:RecordingFile) {\r\n if (recordingFile) {\r\n let r = recordingFile.recording;\r\n if (r) {\r\n return PromptitemUtil.toPlainTextString(r);\r\n }\r\n }\r\n return \"n/a\";\r\n }\r\n\r\n public static framePosForSampleRate(framePosSampleRate:number|null,framePos:number|null,sampleRate:number):number|null{\r\n let fpFSr=null;\r\n\r\n // TODO transitional until editSampleRates are set in the database\r\n if(framePosSampleRate==null){\r\n framePosSampleRate=sampleRate;\r\n }\r\n if(framePosSampleRate!=null && framePos!=null) {\r\n if (framePosSampleRate === sampleRate) {\r\n fpFSr=framePos;\r\n } else {\r\n fpFSr=Math.round((framePos * sampleRate) / framePosSampleRate);\r\n }\r\n }\r\n return fpFSr;\r\n }\r\n\r\n public static editStartFrameForSampleRate(recordingFile:RecordingFile,sampleRate:number):number | null{\r\n let esffSr=RecordingFileUtil.framePosForSampleRate(recordingFile.editSampleRate,recordingFile.editStartFrame,sampleRate);\r\n return esffSr;\r\n }\r\n\r\n public static editEndFrameForSampleRate(recordingFile:RecordingFile,sampleRate:number):number | null{\r\n let eeffSr=RecordingFileUtil.framePosForSampleRate(recordingFile.editSampleRate,recordingFile.editEndFrame,sampleRate);\r\n return eeffSr;\r\n }\r\n}\r\n","import {Inject, Injectable} from '@angular/core';\r\nimport {HttpClient, HttpErrorResponse, HttpHeaders, HttpResponse} from \"@angular/common/http\";\r\n\r\n\r\nimport {Observable} from \"rxjs\";\r\n\r\n\r\nimport {ApiType, SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../../../spr.config\";\r\nimport {UUID} from \"../../../utils/utils\";\r\nimport {RecordingFile} from \"../../recording\";\r\n\r\n\r\n@Injectable()\r\nexport class RecordingFileService {\r\n\r\n public static readonly RECOFILE_API_CTX = 'recordingfile'\r\n private apiEndPoint: string;\r\n private withCredentials: boolean = false;\r\n\r\n //private debugDelay:number=10000;\r\n private debugDelay:number=0;\r\n\r\n constructor(private http: HttpClient, @Inject(SPEECHRECORDER_CONFIG) private config?: SpeechRecorderConfig) {\r\n //constructor(private http: HttpClient) {\r\n // TODO test only\r\n this.apiEndPoint = ''\r\n // this.apiEndPoint = '/wikispeech/api/v1'\r\n\r\n if (config && config.apiEndPoint) {\r\n this.apiEndPoint = config.apiEndPoint;\r\n }\r\n if (this.apiEndPoint !== '') {\r\n this.apiEndPoint = this.apiEndPoint + '/'\r\n }\r\n if (config != null && config.withCredentials != null) {\r\n this.withCredentials = config.withCredentials;\r\n }\r\n //this.withCredentials=true\r\n\r\n //this.recordingCtxUrl = apiEndPoint + REC_API_CTX;\r\n\r\n\r\n }\r\n\r\n private recoFileUrl(recordingFileId: string | number):string{\r\n let encRecfileId=encodeURIComponent(recordingFileId);\r\n let recUrl = this.apiEndPoint + RecordingFileService.RECOFILE_API_CTX + '/' + encRecfileId;\r\n\r\n return recUrl;\r\n }\r\n\r\n private fetchAudiofile(recordingFileId: string | number): Observable<HttpResponse<ArrayBuffer>> {\r\n let recUrl = this.recoFileUrl(recordingFileId);\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n recUrl = recUrl + '.wav';\r\n }\r\n let headers = new HttpHeaders({\r\n 'Accept': 'audio/wav'\r\n });\r\n\r\n return this.http.get(recUrl, {\r\n observe: 'response',\r\n headers: headers,\r\n responseType: 'arraybuffer',\r\n withCredentials: this.withCredentials\r\n });\r\n }\r\n\r\n private recordingFileDescrObserver(recordingFileId: string | number): Observable<RecordingFile> {\r\n\r\n let recUrl = this.recoFileUrl(recordingFileId);\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n recUrl = recUrl + '.json?requestUUID='+UUID.generate();\r\n }\r\n return this.http.get<RecordingFile>(recUrl,{ withCredentials: this.withCredentials });\r\n }\r\n\r\n\r\n private fetchSessionAudiofileById(projectName: string, sessId: string | number, recordingFileId: string | number): Observable<HttpResponse<ArrayBuffer>> {\r\n\r\n let recUrl = this.recoFileUrl(recordingFileId);\r\n // if (this.config && this.config.apiType === ApiType.FILES) {\r\n // // for development and demo\r\n // // append UUID to make request URL unique to avoid localhost server caching\r\n // recUrl = recUrl + '.wav?requestUUID=' + UUID.generate();\r\n // }\r\n return this.http.get(recUrl, {\r\n observe: 'response',\r\n responseType: 'arraybuffer',\r\n withCredentials: this.withCredentials\r\n });\r\n }\r\n\r\n\r\n // TODO test\r\n\r\n fetchAndApplyRecordingFile(aCtx: AudioContext, recordingFile:RecordingFile):Observable<RecordingFile|null> {\r\n\r\n let wobs = new Observable<RecordingFile|null>(observer=>{\r\n if(recordingFile.recordingFileId) {\r\n let obs = this.fetchAudiofile(recordingFile.recordingFileId);\r\n\r\n obs.subscribe(resp => {\r\n // Do not use Promise version, which does not work with Safari 13\r\n if(resp.body) {\r\n aCtx.decodeAudioData(resp.body, ab => {\r\n recordingFile.audioBuffer = ab;\r\n if (this.debugDelay > 0) {\r\n window.setTimeout(() => {\r\n\r\n observer.next(recordingFile);\r\n observer.complete();\r\n }, this.debugDelay);\r\n } else {\r\n observer.next(recordingFile);\r\n observer.complete();\r\n }\r\n })\r\n }else{\r\n observer.error('Received no audio data!');\r\n }\r\n },\r\n (error: HttpErrorResponse) => {\r\n if (error.status == 404) {\r\n // Interpret not as an error, the file ist not recorded yet\r\n observer.next(null);\r\n observer.complete()\r\n } else {\r\n // all other states are errors\r\n observer.error(error);\r\n observer.complete();\r\n }\r\n });\r\n }else{\r\n observer.error();\r\n }\r\n });\r\n\r\n return wobs;\r\n }\r\n\r\n fetchRecordingFile(aCtx: AudioContext, recordingFileId: string | number): Observable<RecordingFile | null> {\r\n\r\n let wobs = new Observable<RecordingFile | null>(observer => {\r\n let rf: RecordingFile|null = null;\r\n let rfDescrObs = this.recordingFileDescrObserver(recordingFileId);\r\n rfDescrObs.subscribe(value => {\r\n rf = value;\r\n }, (error) => {\r\n observer.error(error);\r\n }, () => {\r\n let rfAudioObs = this.fetchAudiofile(recordingFileId);\r\n rfAudioObs.subscribe(resp => {\r\n // Do not use Promise version, which does not work with Safari 13\r\n if(resp.body) {\r\n aCtx.decodeAudioData(resp.body, ab => {\r\n if(rf) {\r\n rf.audioBuffer = ab\r\n }else{\r\n observer.error('Recording file object null');\r\n }\r\n if (this.debugDelay > 0) {\r\n window.setTimeout(() => {\r\n observer.next(rf);\r\n observer.complete();\r\n }, this.debugDelay);\r\n } else {\r\n observer.next(rf);\r\n observer.complete();\r\n }\r\n })\r\n }else{\r\n observer.error('Received no audio data');\r\n }\r\n },\r\n (error: HttpErrorResponse) => {\r\n if (error.status == 404) {\r\n // Interpret not as an error, the file ist not recorded yet\r\n observer.next(null);\r\n observer.complete()\r\n } else {\r\n // all other states are errors\r\n observer.error(error);\r\n observer.complete();\r\n }\r\n });\r\n\r\n });\r\n });\r\n\r\n return wobs;\r\n }\r\n\r\n saveEditSelection(recordingFileId: string | number,editSampleRate:number,editStartFrame:number,editEndFrame:number): Observable<RecordingFile | null> {\r\n let recUrl = this.apiEndPoint + RecordingFileService.RECOFILE_API_CTX + '/' + recordingFileId;\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n recUrl = recUrl + '.json?requestUUID='+UUID.generate();\r\n }\r\n console.log(\"Path request URL: \"+recUrl)\r\n return this.http.patch<RecordingFile>(recUrl,{editSampleRate:editSampleRate,editStartFrame:editStartFrame,editEndFrame:editEndFrame},{ withCredentials: this.withCredentials });\r\n }\r\n\r\n}\r\n\r\n\r\n","import {Component, Input, OnInit} from '@angular/core';\r\nimport {RecordingFileUtil} from \"./recording-file\";\r\nimport {RecordingFile} from \"../../recording\";\r\n\r\n@Component({\r\n selector: 'app-recording-file-meta',\r\n template: `\r\n <mat-card>\r\n <mat-card-title>Recording file ID: {{recordingFile?.recordingFileId}}</mat-card-title>\r\n <mat-card-content>\r\n <table>\r\n <tr>\r\n <td>Itemcode:</td>\r\n <td>{{recordingFile?.recording?.itemcode}}</td>\r\n </tr>\r\n <tr *ngIf=\"recordingFile?.date\">\r\n <td>Date:</td>\r\n <td>{{recordingFile?.date}}</td>\r\n </tr>\r\n <tr>\r\n <td>Prompt:</td>\r\n <td>{{recordingAsPlainText()}}</td>\r\n </tr>\r\n \r\n <tr *ngIf=\"sessionId\">\r\n <td>Session:</td>\r\n <td>{{sessionId}}</td>\r\n </tr>\r\n </table>\r\n </mat-card-content>\r\n </mat-card>\r\n `,\r\n styles: []\r\n})\r\nexport class RecordingFileMetaComponent{\r\n\r\n @Input() sessionId:string | number | null=null;\r\n @Input() recordingFile:RecordingFile|null=null;\r\n\r\n recordingAsPlainText(){\r\n let t=null;\r\n if(this.recordingFile) {\r\n t= RecordingFileUtil.recordingAsPlainText(this.recordingFile);\r\n }\r\n return t;\r\n }\r\n}\r\n","import {Component, Input, OnInit, ViewChild} from '@angular/core';\r\nimport {Action} from \"../../../action/action\";\r\n\r\n@Component({\r\n selector: 'app-recording-file-navi',\r\n template: `\r\n <div #controlPanel style=\"display:flex;flex-direction: row;\">\r\n <div #navi style=\"flex: 0;display:flex;flex-direction: row;flex-wrap: nowrap\">\r\n <fieldset>\r\n <legend>Versions</legend>\r\n <mat-progress-spinner *ngIf=\"naviInfoLoading\" mode=\"indeterminate\" [diameter]=\"15\"></mat-progress-spinner>\r\n <select *ngIf=\"!naviInfoLoading\" [disabled]=\"versions==null || versions.length==1\" (change)=\"selectVersionChange($event)\">\r\n <option *ngFor=\"let v of versions; let i = index\" [selected]=\"v===version\" value=\"{{v}}\">{{v}}<span *ngIf=\"i==0\"> (latest)</span></option>\r\n </select>\r\n </fieldset>\r\n <fieldset>\r\n <legend>Navigate</legend>\r\n <mat-progress-spinner *ngIf=\"naviInfoLoading\" mode=\"indeterminate\" [diameter]=\"15\"></mat-progress-spinner>\r\n <div *ngIf=\"!naviInfoLoading\" style=\"flex: 0;display:flex;flex-direction: row;flex-wrap: nowrap\">\r\n <button (click)=\"firstAction?.perform()\" [disabled]=\"!firstAction || firstAction?.disabled\" matTooltip=\"First recording file\">\r\n <mat-icon>first_page</mat-icon>\r\n </button>\r\n <button (click)=\"prevAction?.perform()\" [disabled]=\"!prevAction || prevAction?.disabled\" matTooltip=\"Previous recording file\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button (click)=\"nextAction?.perform()\" [disabled]=\"!nextAction || nextAction?.disabled\" matTooltip=\"Next recording file\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n <button (click)=\"lastAction?.perform()\" [disabled]=\"!lastAction || lastAction?.disabled\" matTooltip=\"Last recording file\">\r\n <mat-icon>last_page</mat-icon>\r\n </button>\r\n </div>\r\n <p *ngIf=\"items && itemPos!==null && itemPos!==undefined\">Item {{itemPos+1}} of {{items}}</p>\r\n <p>(List ordered by date)</p>\r\n </fieldset>\r\n </div>\r\n </div>\r\n `,\r\n styles: [\r\n `:host {\r\n flex: 0;\r\n\r\n }`]\r\n})\r\nexport class RecordingFileNaviComponent implements OnInit {\r\n @Input() firstAction: Action<void>|undefined;\r\n @Input() prevAction: Action<void>|undefined;\r\n @Input() nextAction: Action<void>|undefined;\r\n @Input() lastAction: Action<void>|undefined;\r\n @Input() items:number | null|undefined;\r\n @Input() itemPos:number | null|undefined;\r\n @Input() selectVersion: Action<number>|undefined;\r\n @Input() versions: Array<number>|null=null;\r\n @Input() version: number|null=null;\r\n\r\n @Input() naviInfoLoading=false;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n selectVersionChange(ev:Event){\r\n //console.debug(\"Change event: \"+ev.target.value+ \", as Nr: \"+versionNr);\r\n\r\n const selEl = ev.target as HTMLSelectElement;\r\n let versionNr = parseInt(selEl.value);\r\n if(this.selectVersion) {\r\n this.selectVersion.perform(versionNr);\r\n }\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n ViewChild,\r\n ChangeDetectorRef,\r\n AfterViewInit, Input, ElementRef, OnInit,\r\n} from '@angular/core'\r\n\r\n\r\nimport {ActivatedRoute, Params, Route, Router} from \"@angular/router\";\r\n\r\n\r\nimport {RecordingFileService} from \"./recordingfile-service\";\r\nimport {MatDialog} from \"@angular/material/dialog\";\r\nimport {AudioDisplayPlayer} from \"../../../audio/audio_player\";\r\n\r\nimport {AudioDisplayScrollPane} from \"../../../audio/ui/audio_display_scroll_pane\";\r\nimport {AudioContextProvider} from \"../../../audio/context\";\r\nimport {AudioClip} from \"../../../audio/persistor\";\r\nimport {Selection} from \"../../../audio/persistor\";\r\n\r\nimport {Action, ActionEvent} from \"../../../action/action\";\r\nimport {SessionService} from \"../session.service\";\r\nimport {RecordingService} from \"../../recordings/recordings.service\";\r\nimport {RecordingFile} from \"../../recording\";\r\nimport {RecordingFileUtil} from \"./recording-file\";\r\n\r\n\r\nexport class ItemcodeIndex{\r\n [itemcode: string]: Array<RecordingFile>;\r\n}\r\n\r\n@Component({\r\n\r\n selector: 'app-audiodisplayplayer',\r\n\r\n template: `\r\n\r\n <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>\r\n <div class=\"ctrlview\">\r\n <app-recording-file-meta [sessionId]=\"sessionId\" [recordingFile]=\"recordingFile\"></app-recording-file-meta>\r\n\r\n <audio-display-control [audioClip]=\"audioClip\"\r\n [playStartAction]=\"playStartAction\"\r\n [playSelectionAction]=\"playSelectionAction\"\r\n [playStopAction]=\"playStopAction\"\r\n [autoPlayOnSelectToggleAction]=\"ap?.autoPlayOnSelectToggleAction\"\r\n [zoomInAction]=\"zoomInAction\"\r\n [zoomOutAction]=\"zoomOutAction\"\r\n [zoomSelectedAction]=\"zoomSelectedAction\"\r\n [zoomFitToPanelAction]=\"zoomFitToPanelAction\"></audio-display-control>\r\n <app-recording-file-navi [items]=\"availRecFiles?.length\" [itemPos]=\"posInList\" [version]=\"recordingFile?recordingFile.version:null\" [versions]=\"versions\" [firstAction]=\"firstAction\" [prevAction]=\"prevAction\" [nextAction]=\"nextAction\" [lastAction]=\"lastAction\" [selectVersion]=\"toVersionAction\" [naviInfoLoading]=\"naviInfoLoading\"></app-recording-file-navi>\r\n </div>\r\n `,\r\n styles: [\r\n `:host {\r\n flex: 2;\r\n display: flex;\r\n flex-direction: column;\r\n min-height:0;\r\n overflow: hidden;\r\n padding: 20px;\r\n z-index: 5;\r\n box-sizing: border-box;\r\n background-color: white;\r\n }`,`\r\n .ctrlview{\r\n display: flex;\r\n flex-direction: row;\r\n\r\n }\r\n `,`\r\n audio-display-control{\r\n\r\n flex: 3;\r\n }\r\n `]\r\n\r\n})\r\nexport class RecordingFileViewComponent extends AudioDisplayPlayer implements OnInit,AfterViewInit {\r\n\r\n //protected _recordingFileId: string | number = null;\r\n\r\n sessionId: string | number | null= null;\r\n sessionIdFromRoute:string|null=null;\r\n\r\n availRecFiles!: Array<Array<RecordingFile>>;\r\n versions: Array<number>|null=null;\r\n\r\n recordingFile: RecordingFile|null=null;\r\n private routedByQueryParam=false;\r\n posInList: number|null=null;\r\n\r\n\r\n @ViewChild(AudioDisplayScrollPane)\r\n private ac!: AudioDisplayScrollPane;\r\n\r\n firstAction: Action<void>;\r\n prevAction: Action<void>;\r\n nextAction: Action<void>;\r\n lastAction: Action<void>;\r\n toVersionAction: Action<number>;\r\n\r\n naviInfoLoading=false;\r\n\r\n constructor(protected recordingFileService: RecordingFileService, protected recordingService: RecordingService, protected sessionService: SessionService, protected router:Router,protected route: ActivatedRoute, protected ref: ChangeDetectorRef, protected eRef: ElementRef, protected dialog: MatDialog) {\r\n super(route, ref, eRef)\r\n this.parentE = this.eRef.nativeElement;\r\n this.firstAction = new Action<void>('First');\r\n this.firstAction.onAction= ()=>{\r\n this.posInList=0;\r\n this.navigateToRecordingFile();\r\n }\r\n this.prevAction = new Action<void>('Previous');\r\n this.prevAction.onAction= ()=>this.prevFile();\r\n this.nextAction = new Action<void>('Next');\r\n this.nextAction.onAction= ()=>this.nextFile();\r\n this.lastAction = new Action<void>('Last');\r\n this.lastAction.onAction= ()=>{\r\n if(this.availRecFiles) {\r\n this.posInList = this.availRecFiles.length - 1;\r\n this.navigateToRecordingFile();\r\n }\r\n }\r\n\r\n this.toVersionAction=new Action<number>('To version');\r\n this.toVersionAction.onAction= (ae)=>this.toVersion(ae);\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n super.ngAfterViewInit()\r\n this.route.queryParams.subscribe((params: Params) => {\r\n let rfIdP = params['recordingFileId'];\r\n let sIdP = params['sessionId'];\r\n if (sIdP) {\r\n this.sessionIdFromRoute=sIdP;\r\n }\r\n if (rfIdP) {\r\n this.routedByQueryParam=true;\r\n this.loadRecFile(rfIdP);\r\n }\r\n });\r\n this.route.params.subscribe((params: Params) => {\r\n let rfIdP = params['recordingFileId'];\r\n let sIdP = params['sessionId'];\r\n if (sIdP) {\r\n this.sessionIdFromRoute=sIdP;\r\n }\r\n if (rfIdP) {\r\n this.routedByQueryParam=false;\r\n this.loadRecFile(rfIdP);\r\n }\r\n });\r\n // if(this.sessionId){\r\n // this.loadSession(this.sessionId);\r\n // }\r\n }\r\n\r\n\r\n private navigateToId(rfId:number| string){\r\n\r\n if(this.routedByQueryParam){\r\n this.router.navigate([], {relativeTo: this.route, queryParams:{'recordingFileId':rfId}})\r\n }else {\r\n this.router.navigate(['../' + rfId], {relativeTo: this.route});\r\n }\r\n }\r\n\r\n private navigateToRecordingFile(){\r\n if(this.posInList!=null) {\r\n let latestNextRf = this.availRecFiles[this.posInList][0];\r\n let lnRfId = latestNextRf.recordingFileId;\r\n if(lnRfId) {\r\n this.navigateToId(lnRfId);\r\n }\r\n }\r\n }\r\n\r\n toVersion(ae: ActionEvent<number>) {\r\n let toRfId = null;\r\n let version = ae.value;\r\n if(this.posInList!=null) {\r\n let cRfs = this.availRecFiles[this.posInList];\r\n let availVersionCnt = cRfs.length;\r\n for (let cRf of cRfs) {\r\n if (cRf.version === version) {\r\n toRfId = cRf.recordingFileId;\r\n break;\r\n }\r\n }\r\n }\r\n if (toRfId != null) {\r\n this.navigateToId(toRfId);\r\n }\r\n }\r\n\r\n\r\n prevFile() {\r\n if(this.posInList!=null) {\r\n this.posInList--;\r\n }\r\n this.navigateToRecordingFile()\r\n }\r\n nextFile() {\r\n if(this.posInList!=null) {\r\n this.posInList++;\r\n }\r\n this.navigateToRecordingFile()\r\n }\r\n\r\n private positionInList():number | null{\r\n if (this.availRecFiles && this.recordingFile) {\r\n let cic = this.recordingFile.recording.itemcode;\r\n let itemCnt = this.availRecFiles.length\r\n for (let rfdi = 0; rfdi < itemCnt; rfdi++) {\r\n let ar = this.availRecFiles[rfdi][0].recording;\r\n if (cic === ar.itemcode) {\r\n return rfdi;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private updatePos(){\r\n this.posInList=this.positionInList();\r\n this.toVersionAction.disabled=true;\r\n if(this.availRecFiles){\r\n let avRfsLen=this.availRecFiles.length;\r\n if(this.posInList !=null && avRfsLen>this.posInList) {\r\n let arfs = this.availRecFiles[this.posInList];\r\n if (arfs) {\r\n this.versions = new Array<number>();\r\n for (let arf of arfs) {\r\n this.versions.push(arf.version)\r\n }\r\n this.toVersionAction.disabled=(this.versions.length<2);\r\n }\r\n }\r\n }\r\n this.updateActions()\r\n }\r\n\r\n protected loadRecFile(rfId:number | string) {\r\n this.ap?.stop();\r\n this.audioClip =null;\r\n this.recordingFile=null;\r\n this.posInList=null;\r\n this.updateActions();\r\n let audioContext = AudioContextProvider.audioContextInstance();\r\n if(audioContext) {\r\n this.recordingFileService.fetchRecordingFile(audioContext, rfId).subscribe(value => {\r\n this.status = 'Audio file loaded.';\r\n let clip = null;\r\n this.recordingFile = value;\r\n if (this.recordingFile) {\r\n let ab = this.recordingFile.audioBuffer;\r\n if (ab) {\r\n clip = new AudioClip(ab);\r\n\r\n let esffsr = null;\r\n let eeffsr = null;\r\n let esr = null;\r\n\r\n if (clip.buffer != null) {\r\n esr = ab.sampleRate;\r\n if (esr != null) {\r\n esffsr = RecordingFileUtil.editStartFrameForSampleRate(this.recordingFile, esr);\r\n eeffsr = RecordingFileUtil.editEndFrameForSampleRate(this.recordingFile, esr);\r\n }\r\n let sel: Selection | null = null;\r\n if (esffsr != null) {\r\n if (eeffsr != null) {\r\n sel = new Selection(ab.sampleRate, esffsr, eeffsr);\r\n } else {\r\n let ch0 = ab.getChannelData(0);\r\n let frameLength = ch0.length;\r\n sel = new Selection(esr, esffsr, frameLength);\r\n }\r\n } else if (eeffsr != null) {\r\n sel = new Selection(esr, 0, eeffsr);\r\n }\r\n clip.selection = sel\r\n }\r\n }\r\n }\r\n this.audioClip = clip\r\n this.loadedRecfile();\r\n\r\n }, error1 => {\r\n this.status = 'Error loading audio file!';\r\n });\r\n }\r\n }\r\n\r\n protected loadedRecfile() {\r\n if(this.recordingFile && !this.sessionId) {\r\n let sId=this.recordingFile.session\r\n if(!sId){\r\n sId=this.sessionIdFromRoute;\r\n }\r\n if (sId) {\r\n this.loadSession(sId);\r\n }\r\n }\r\n this.updatePos();\r\n this.ref.detectChanges();\r\n }\r\n\r\n private updateActions(){\r\n let itemCnt:number|null=null;\r\n if(this.availRecFiles) {\r\n itemCnt = this.availRecFiles.length;\r\n }\r\n this.firstAction.disabled=(this.posInList==null || this.posInList == 0);\r\n this.prevAction.disabled=(this.posInList==null || this.posInList == 0);\r\n this.nextAction.disabled=(this.posInList==null || itemCnt==null || this.posInList >= itemCnt - 1);\r\n this.lastAction.disabled=(this.posInList==null || itemCnt==null || this.posInList >= itemCnt - 1);\r\n }\r\n\r\n private loadSession(sessionId: string| number) {\r\n // load session and recording file meta data only when on init and when session changes\r\n if (<string>sessionId != <string>this.sessionId) {\r\n // tell UI that we are working...\r\n this.naviInfoLoading=true;\r\n this.sessionService.sessionObserver(<string>sessionId).subscribe((s) => {\r\n // received session data\r\n this.sessionId = s.sessionId;\r\n // fetch recording file meta data list\r\n this.recordingService.recordingFileList(s.project, s.sessionId).subscribe((rfds) => {\r\n this.availRecFiles = new Array<Array<RecordingFile>>();\r\n // build structure indexed by itemcode\r\n let icIdx = new ItemcodeIndex();\r\n for (let rfdi = 0; rfdi < rfds.length; rfdi++) {\r\n let rfd = rfds[rfdi];\r\n if (rfd.date) {\r\n // convert date string for faster sorting later\r\n let rfdd = new Date(rfd.date);\r\n rfd._dateAsDateObj = rfdd;\r\n }\r\n let r = rfd.recording;\r\n let ic = r.itemcode;\r\n if(ic) {\r\n let exRfsForIc = icIdx[ic];\r\n if (exRfsForIc == null) {\r\n // itemcode not yet stored\r\n let arfd = new Array<RecordingFile>();\r\n arfd.push(rfd);\r\n icIdx[ic] = arfd;\r\n this.availRecFiles.push(arfd);\r\n } else {\r\n // rec file with itemcode already exists, add (push) this version ...\r\n exRfsForIc.push(rfd);\r\n // .. and sort latest version (highest version number) to lowest index\r\n exRfsForIc.sort((rfd1, rfd2) => {\r\n return rfd2.version - rfd1.version;\r\n })\r\n }\r\n }\r\n }\r\n // have unsorted ietmcode indexed recording files here\r\n // sort them ordered by date of latest version ascending\r\n this.availRecFiles.sort((rfs1, rfs2) => {\r\n let d1 = rfs2[0]._dateAsDateObj;\r\n let d2 = rfs1[0]._dateAsDateObj;\r\n if (d1 == null) {\r\n if (d2 == null) {\r\n return 0;\r\n } else {\r\n // Sort entries whose dates are not set to the end\r\n return -1;\r\n }\r\n } else {\r\n if (d2 == null) {\r\n // Sort entries whose dates are not set to the end\r\n return 1;\r\n } else {\r\n // Compare date by time in milliseconds value\r\n return d2.getTime() - d1.getTime();\r\n }\r\n }\r\n });\r\n this.updatePos()\r\n this.naviInfoLoading=false;\r\n this.ref.detectChanges();\r\n });\r\n });\r\n }\r\n }\r\n}\r\n\r\n","import {\r\n Component,\r\n ChangeDetectorRef,\r\n AfterViewInit,\r\n ElementRef\r\n} from '@angular/core'\r\n\r\n\r\nimport {ActivatedRoute, Router} from \"@angular/router\";\r\nimport {RecordingFileService} from \"./recordingfile-service\";\r\nimport {MatDialog} from \"@angular/material/dialog\";\r\nimport {Selection} from \"../../../audio/persistor\";\r\nimport {MessageDialog} from \"../../../ui/message_dialog\";\r\nimport {Action} from \"../../../action/action\";\r\nimport {RecordingFileViewComponent} from \"./recording-file-view.component\";\r\nimport {SessionService} from \"../session.service\";\r\nimport {RecordingService} from \"../../recordings/recordings.service\";\r\nimport {MatSnackBar} from \"@angular/material/snack-bar\";\r\n\r\n@Component({\r\n\r\n selector: 'app-audiodisplayplayer',\r\n\r\n template: `\r\n <h1>Recording file editing</h1>\r\n <p>On export or delivery the editing selection of the recording file is cut out. If no editing selection is applied the original file is exported.</p>\r\n\r\n <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>\r\n <div class=\"ctrlview\">\r\n <app-recording-file-meta [sessionId]=\"sessionId\" [recordingFile]=\"recordingFile\"></app-recording-file-meta>\r\n <audio-display-control [audioClip]=\"audioClip\"\r\n [playStartAction]=\"playStartAction\"\r\n [playSelectionAction]=\"playSelectionAction\"\r\n [playStopAction]=\"playStopAction\"\r\n [autoPlayOnSelectToggleAction]=\"ap?.autoPlayOnSelectToggleAction\"\r\n [zoomInAction]=\"zoomInAction\"\r\n [zoomOutAction]=\"zoomOutAction\"\r\n [zoomSelectedAction]=\"zoomSelectedAction\"\r\n [zoomFitToPanelAction]=\"zoomFitToPanelAction\"></audio-display-control>\r\n <app-recording-file-navi [items]=\"availRecFiles?.length\" [itemPos]=\"posInList\" [version]=\"recordingFile?recordingFile.version:null\" [versions]=\"versions\" [firstAction]=\"firstAction\" [prevAction]=\"prevAction\" [nextAction]=\"nextAction\" [lastAction]=\"lastAction\" [selectVersion]=\"toVersionAction\" [naviInfoLoading]=\"naviInfoLoading\"></app-recording-file-navi>\r\n </div>\r\n\r\n <button mat-raised-button color=\"accent\" (click)=\"applySelection()\" [disabled]=\"editSaved\">{{this.applyButtonText()}}</button>\r\n `,\r\n styles: [\r\n `:host {\r\n flex: 2;\r\n display: flex;\r\n flex-direction: column;\r\n min-height:0;\r\n overflow: hidden;\r\n padding: 20px;\r\n z-index: 5;\r\n box-sizing: border-box;\r\n background-color: white;\r\n }`,`\r\n .ctrlview{\r\n display: flex;\r\n flex-direction: row;\r\n }\r\n `,`\r\n audio-display-control{\r\n\r\n flex: 3;\r\n }\r\n `]\r\n\r\n})\r\nexport class RecordingFileUI extends RecordingFileViewComponent implements AfterViewInit {\r\n\r\n savedEditSelection:Selection|null=null;\r\n editSaved:boolean=true\r\n\r\n constructor(protected recordingFileService:RecordingFileService,protected recordingService:RecordingService,protected sessionService:SessionService,protected router:Router,protected route: ActivatedRoute, protected ref: ChangeDetectorRef,protected eRef:ElementRef, protected dialog:MatDialog,private snackBar: MatSnackBar) {\r\n super(recordingFileService,recordingService,sessionService,router,route,ref,eRef,dialog)\r\n this.parentE=this.eRef.nativeElement;\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n super.ngAfterViewInit()\r\n }\r\n\r\n applyButtonText():string {\r\n if(this.audioClip) {\r\n let s = this.audioClip.selection\r\n if (s) {\r\n return \"Apply current selection as editing selection\";\r\n }else{\r\n return \"Cancel out editing selection\";\r\n }\r\n }\r\n // just as fallback\r\n return \"Apply selection\";\r\n }\r\n\r\n protected loadRecFile(rfId:number | string) {\r\n this.editSaved = true;\r\n super.loadRecFile(rfId);\r\n }\r\n\r\nprotected loadedRecfile() {\r\n super.loadedRecfile();\r\n if(this.audioClip) {\r\n this.audioClip.addSelectionObserver((clip) => {\r\n let s = clip.selection\r\n this.editSaved = ((this.savedEditSelection == null && s == null) || this.savedEditSelection != null && this.savedEditSelection.equals(s))\r\n });\r\n }\r\n this.savedEditSelection = this.audioClip?this.audioClip.selection:null;\r\n this.editSaved = true\r\n}\r\n\r\n applySelection(){\r\n if(this.audioClip) {\r\n let ab=this.audioClip.buffer;\r\n let s = this.audioClip.selection\r\n if (s && ab && this.recordingFile?.recordingFileId) {\r\n let sr= ab.sampleRate;\r\n let sf = s.startFrame;\r\n let ef = s.endFrame;\r\n this.recordingFileService.saveEditSelection(this.recordingFile.recordingFileId, sr, sf, ef).subscribe((value) => {},\r\n () => {\r\n this.dialog.open(MessageDialog, {\r\n\r\n data: {\r\n type: 'error',\r\n title: 'Save selection edit error',\r\n msg: \"Could not save edit selection to WikiSpeech server!\",\r\n advice: \"Please check network connection and server state.\"\r\n }\r\n })\r\n },\r\n () => {\r\n // Or use returned selection value from server?\r\n this.savedEditSelection = s\r\n this.editSaved = true\r\n this.snackBar.open('Selection edit saved successfully.', 'OK', {duration: 1500})\r\n });\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {SpeechrecorderngComponent} from \"./speechrecorderng.component\";\r\nimport {SimpleTrafficLight} from \"./speechrecorder/startstopsignal/ui/simpletrafficlight\";\r\n\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {Progress} from \"./speechrecorder/session/progress\";\r\nimport {\r\n PromptContainer, Prompter, Prompting, PromptingContainer, Recinstructions,\r\n} from \"./speechrecorder/session/prompting\";\r\nimport {SessionManager} from \"./speechrecorder/session/sessionmanager\";\r\nimport {WarningBar} from \"./speechrecorder/session/warning_bar\";\r\nimport {ScrollIntoViewDirective} from \"./utils/scrollIntoViewToBottom\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatDialogModule } from \"@angular/material/dialog\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\r\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport {HttpClientModule} from \"@angular/common/http\";\r\nimport {SessionService} from \"./speechrecorder/session/session.service\";\r\nimport {ScriptService} from \"./speechrecorder/script/script.service\";\r\nimport {RouterModule, Routes} from \"@angular/router\";\r\nimport {SpeechRecorderConfig, SPEECHRECORDER_CONFIG} from \"./spr.config\";\r\nimport {SpeechRecorderUploader} from \"./speechrecorder/spruploader\";\r\nimport {ProjectService} from \"./speechrecorder/project/project.service\";\r\nimport {\r\n ControlPanel,\r\n ProgressDisplay,\r\n ReadyStateIndicator,\r\n StatusDisplay,\r\n TransportPanel,\r\n UploadStatus\r\n} from \"./speechrecorder/session/controlpanel\";\r\nimport {FlexLayoutModule} from \"@angular/flex-layout\";\r\nimport {SessionFinishedDialog} from \"./speechrecorder/session/session_finished_dialog\";\r\nimport {MessageDialog} from \"./ui/message_dialog\";\r\nimport {RecordingItemControls, RecordingItemDisplay} from \"./ui/recordingitem_display\";\r\nimport {RecordingService} from \"./speechrecorder/recordings/recordings.service\";\r\nimport {ScrollPaneHorizontal} from \"./audio/ui/scroll_pane_horizontal\";\r\nimport {AudioClipUIContainer} from \"./audio/ui/container\";\r\nimport {AudioSignal} from \"./audio/ui/audiosignal\";\r\nimport {Sonagram} from \"./audio/ui/sonagram\";\r\nimport {AudioDisplayPlayer} from \"./audio/audio_player\";\r\nimport {AudioDisplay} from \"./audio/audio_display\";\r\nimport {AudioDisplayControl} from \"./audio/ui/audio_display_control\";\r\nimport {LevelBar} from \"./audio/ui/livelevel\";\r\nimport {AudioDisplayScrollPane} from \"./audio/ui/audio_display_scroll_pane\";\r\nimport {UUID} from \"./utils/utils\";\r\nimport {MatCheckboxModule} from \"@angular/material/checkbox\";\r\nimport {MatCard, MatCardModule} from \"@angular/material/card\";\r\nimport {MatDividerModule} from \"@angular/material/divider\";\r\nimport {MatGridListModule} from \"@angular/material/grid-list\";\r\nimport {RecordingFileUI} from \"./speechrecorder/session/recordingfile/recording-file-u-i.component\";\r\nimport {RecordingFileService} from \"./speechrecorder/session/recordingfile/recordingfile-service\";\r\nimport {RecordingFileViewComponent} from \"./speechrecorder/session/recordingfile/recording-file-view.component\";\r\nimport {MatTableModule} from \"@angular/material/table\";\r\nimport { RecordingFileNaviComponent } from './speechrecorder/session/recordingfile/recording-file-navi.component';\r\nimport {RecordingFileMetaComponent} from \"./speechrecorder/session/recordingfile/recording-file-meta.component\";\r\nimport {MatSelectModule} from \"@angular/material/select\";\r\nimport {MatInputModule} from \"@angular/material/input\";\r\nimport {MatSnackBarModule} from \"@angular/material/snack-bar\";\r\n\r\n\r\n\r\nexport const SPR_ROUTES: Routes = [\r\n { path: 'spr/session/:id', component: SpeechrecorderngComponent },\r\n { path: 'spr/db/project/:project/session/:sessionId/recordingfile/_view/:recordingFileId', component: RecordingFileViewComponent },\r\n { path: 'spr/db/project/:project/session/:sessionId/recordingfile/_edit/:recordingFileId', component: RecordingFileUI },\r\n { path: 'spr/db/project/:project/session/:sessionId/recordingfile/_view', component: RecordingFileViewComponent },\r\n { path: 'spr/db/project/:project/session/:sessionId/recordingfile/_edit', component: RecordingFileUI },\r\n { path: 'spr/db/project/:project/session/:sessionId/recordingfile/:recordingFileId', component: RecordingFileUI },\r\n { path: 'spr/db/project/:project/session/:sessionId/recordingfile', component: RecordingFileUI },\r\n { path: 'spr/db/recordingfile/_view/:recordingFileId', component: RecordingFileViewComponent },\r\n { path: 'spr/db/recordingfile/_edit/:recordingFileId', component: RecordingFileUI },\r\n { path: 'spr/db/recordingfile/_view/', component: RecordingFileViewComponent },\r\n { path: 'spr/db/recordingfile/_view', component: RecordingFileViewComponent },\r\n { path: 'spr/db/recordingfile/_edit', component: RecordingFileUI },\r\n { path: 'spr/db/recordingfile/:recordingFileId', component: RecordingFileUI },\r\n { path: 'spr/db/recordingfile', component: RecordingFileUI },\r\n { path: 'spr', component: SpeechrecorderngComponent }\r\n];\r\n\r\n@NgModule({\r\n declarations: [AudioSignal,Sonagram,ScrollPaneHorizontal,AudioClipUIContainer,AudioDisplayScrollPane,AudioDisplay,AudioDisplayPlayer,AudioDisplayControl,LevelBar,Progress,SimpleTrafficLight,Recinstructions,Prompter,PromptContainer,PromptingContainer,Prompting,StatusDisplay,\r\n ProgressDisplay,RecordingItemDisplay,RecordingItemControls,UploadStatus,TransportPanel,ReadyStateIndicator,ControlPanel,WarningBar,SessionManager,MessageDialog,SessionFinishedDialog,SpeechrecorderngComponent,RecordingFileViewComponent,RecordingFileUI,ScrollIntoViewDirective, RecordingFileNaviComponent,RecordingFileMetaComponent],\r\n entryComponents: [\r\n MessageDialog,SessionFinishedDialog\r\n ],\r\n exports: [MessageDialog,SpeechrecorderngComponent,ScrollPaneHorizontal,AudioClipUIContainer,AudioDisplayScrollPane,AudioDisplay,AudioDisplayPlayer,AudioDisplayControl,LevelBar],\r\n imports: [RouterModule.forChild(SPR_ROUTES), FlexLayoutModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule,MatInputModule, MatSelectModule,MatSnackBarModule],\r\n providers: [SessionService,ProjectService,ScriptService,RecordingService,RecordingFileService,SpeechRecorderUploader]\r\n\r\n})\r\nexport class SpeechrecorderngModule{\r\n\r\n static forRoot(config: SpeechRecorderConfig): ModuleWithProviders<SpeechrecorderngModule> {\r\n return {\r\n ngModule: SpeechrecorderngModule,\r\n providers: [\r\n {provide: SPEECHRECORDER_CONFIG, useValue: config }\r\n ]\r\n };\r\n }\r\n}\r\n","export const VERSION='2.21.2'","/*\r\n * Public API Surface of speechrecorderng\r\n */\r\n\r\n\r\nimport {AudioDisplayControl} from \"./lib/audio/ui/audio_display_control\";\r\n\r\nexport {SpeechrecorderngModule} from './lib/speechrecorderng.module'\r\nexport {VERSION} from './lib/spr.module.version'\r\nexport {SPEECHRECORDER_CONFIG} from './lib/spr.config'\r\n\r\nexport {UUID} from \"./lib/utils/utils\"\r\nexport {Action} from \"./lib/action/action\";\r\n\r\nexport {MessageDialog} from \"./lib/ui/message_dialog\"\r\n\r\nexport {AudioClip,Selection} from './lib/audio/persistor'\r\nexport {AudioPlayer, AudioPlayerListener, AudioPlayerEvent, EventType} from './lib/audio/playback/player'\r\nexport {AudioDisplay} from './lib/audio/audio_display'\r\nexport {AudioDisplayPlayer} from './lib/audio/audio_player'\r\nexport {AudioClipUIContainer} from './lib/audio/ui/container'\r\nexport {ScrollPaneHorizontal} from './lib/audio/ui/scroll_pane_horizontal'\r\nexport {AudioDisplayScrollPane} from \"./lib/audio/ui/audio_display_scroll_pane\";\r\nexport {AudioContextProvider} from \"./lib/audio/context\";\r\nexport {AudioDisplayControl} from \"./lib/audio/ui/audio_display_control\"\r\nexport {LevelBar} from './lib/audio/ui/livelevel'\r\n\r\nexport {ProjectService} from './lib/speechrecorder/project/project.service'\r\nexport {Session} from './lib/speechrecorder/session/session'\r\nexport {SessionService} from './lib/speechrecorder/session/session.service'\r\nexport {ScriptService} from './lib/speechrecorder/script/script.service'\r\nexport {Script,Section,Group,PromptItem,Mediaitem,PromptPhase,Mode} from './lib/speechrecorder/script/script'\r\nexport {RecordingService} from './lib/speechrecorder/recordings/recordings.service'\r\nexport {RecordingFile} from './lib/speechrecorder/recording'\r\nexport {RecordingFileService} from './lib/speechrecorder/session/recordingfile/recordingfile-service'\r\nexport {RecordingFileViewComponent} from './lib/speechrecorder/session/recordingfile/recording-file-view.component'\r\nexport {RecordingFileUI} from './lib/speechrecorder/session/recordingfile/recording-file-u-i.component'\r\nexport {SpeechRecorderConfig,ApiType} from './lib/spr.config'\r\nexport {SpeechrecorderngComponent} from './lib/speechrecorderng.component'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EventType","Browser","Platform","CfgPlatform","UploadStatus","timeout","InjectionToken","ApiType","Injectable","Inject","Observable","DEFAULT_WARN_DB_LEVEL","MIN_DB_LEVEL","Component","ViewChild","HostListener","Input","EventEmitter","Output","Directive","MatCheckbox","HostBinding","MAT_DIALOG_DATA","HttpHeaders","PlaybackEventType","FlexLayoutModule","CommonModule","MatIconModule","MatButtonModule","MatDialogModule","MatProgressBarModule","MatProgressSpinnerModule","MatTooltipModule","HttpClientModule","MatCheckboxModule","MatCardModule","MatDividerModule","MatGridListModule","MatTableModule","MatInputModule","MatSelectModule","MatSnackBarModule","RouterModule","NgModule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"speechrecorderng.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/speechrecorderng/src/lib/action/action.ts","../../../projects/speechrecorderng/src/lib/audio/playback/player.ts","../../../projects/speechrecorderng/src/lib/utils/ua-parser.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/project/project.ts","../../../projects/speechrecorderng/src/lib/audio/capture/capture.ts","../../../projects/speechrecorderng/src/lib/audio/impl/wavformat.ts","../../../projects/speechrecorderng/src/lib/io/BinaryWriter.ts","../../../projects/speechrecorderng/src/lib/utils/utils.ts","../../../projects/speechrecorderng/src/lib/audio/impl/wavwriter.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/script/script.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/recording.ts","../../../projects/speechrecorderng/src/lib/net/uploader.ts","../../../projects/speechrecorderng/src/lib/spr.config.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/project/project.service.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/session.service.ts","../../../projects/speechrecorderng/src/lib/audio/ui/livelevel.ts","../../../projects/speechrecorderng/src/lib/ui/recordingitem_display.ts","../../../projects/speechrecorderng/src/lib/dsp/utils.ts","../../../projects/speechrecorderng/src/lib/audio/dsp/level_measure.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.ts","../../../projects/speechrecorderng/src/lib/math/2d/geometry.ts","../../../projects/speechrecorderng/src/lib/ui/canvas_layer_comp.ts","../../../projects/speechrecorderng/src/lib/audio/persistor.ts","../../../projects/speechrecorderng/src/lib/audio/ui/common.ts","../../../projects/speechrecorderng/src/lib/audio/ui/audio_canvas_layer_comp.ts","../../../projects/speechrecorderng/src/lib/audio/ui/audiosignal.ts","../../../projects/speechrecorderng/src/lib/math/complex.ts","../../../projects/speechrecorderng/src/lib/math/dft.ts","../../../projects/speechrecorderng/src/lib/math/utils.ts","../../../projects/speechrecorderng/src/lib/utils/css_utils.ts","../../../projects/speechrecorderng/src/lib/audio/ui/sonagram.ts","../../../projects/speechrecorderng/src/lib/audio/ui/container.ts","../../../projects/speechrecorderng/src/lib/audio/ui/audio_display_scroll_pane.ts","../../../projects/speechrecorderng/src/lib/audio/ui/audio_display_control.ts","../../../projects/speechrecorderng/src/lib/audio/audio_display.ts","../../../projects/speechrecorderng/src/lib/utils/scrollIntoViewToBottom.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/progress.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/prompting.ts","../../../projects/speechrecorderng/src/lib/io/stream.ts","../../../projects/speechrecorderng/src/lib/audio/io/stream.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/controlpanel.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/session_finished_dialog.ts","../../../projects/speechrecorderng/src/lib/ui/message_dialog.ts","../../../projects/speechrecorderng/src/lib/audio/context.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/item.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/recordings/recordings.service.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/spruploader.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/warning_bar.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/sessionmanager.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/script/script.service.ts","../../../projects/speechrecorderng/src/lib/speechrecorderng.component.ts","../../../projects/speechrecorderng/src/lib/audio/ui/scroll_pane_horizontal.ts","../../../projects/speechrecorderng/src/lib/audio/audio_player.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recordingfile/recording-file.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recordingfile/recordingfile-service.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recordingfile/recording-file-meta.component.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recordingfile/recording-file-navi.component.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recordingfile/recording-file-view.component.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.ts","../../../projects/speechrecorderng/src/lib/speechrecorderng.module.ts","../../../projects/speechrecorderng/src/lib/spr.module.version.ts","../../../projects/speechrecorderng/src/public-api.ts","../../../projects/speechrecorderng/src/speechrecorderng.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","\r\n export class ActionEvent<T> {\r\n get value(): T|null {\r\n return this._value;\r\n }\r\n constructor(private _value:T|null=null) {\r\n\r\n }\r\n }\r\n\r\n export interface ActionEventListener<T>{\r\n (ae:ActionEvent<T>):void;\r\n }\r\n\r\n export class Action<T> {\r\n get value(): T|null {\r\n return this._value;\r\n }\r\n\r\n private _name:string;\r\n private _value:T|null;\r\n _disabled=true;\r\n private _onAction:ActionEventListener<T>|null=null;\r\n listeners:Array<ActionEventListener<T>>;\r\n private controls:HTMLInputElement[];\r\n\r\n constructor(name:string,value:T|null=null) {\r\n this._name = name;\r\n this._value=value\r\n this.listeners = new Array<ActionEventListener<T>>();\r\n this.controls = [];\r\n }\r\n\r\n get name():string {\r\n return this._name;\r\n }\r\n\r\n\r\n get onAction():ActionEventListener<T>|null {\r\n return this._onAction;\r\n }\r\n\r\n set onAction(value:ActionEventListener<T>|null) {\r\n this._onAction = value;\r\n }\r\n\r\n protected createActionEvent(value: T|null=null):ActionEvent<T> {\r\n // default:\r\n return new ActionEvent(value);\r\n }\r\n\r\n perform(value: T|null=null):void {\r\n this._value=value\r\n if (!this.disabled && this._onAction) {\r\n let ae=this.createActionEvent(value)\r\n this._onAction(ae);\r\n }\r\n }\r\n\r\n set disabled(disabled:boolean) {\r\n this._disabled = disabled;\r\n for (let c of this.controls) {\r\n c.disabled = this._disabled;\r\n }\r\n //let disStr=this.disabled?\"disabled\":\"enabled\";\r\n //console.log(this._name+\": \"+disStr);\r\n }\r\n\r\n get disabled():boolean {\r\n return this._disabled;\r\n }\r\n\r\n addControl(ctrl: HTMLInputElement, actionEventName?: string) {\r\n if (ctrl) {\r\n if (this.controls.indexOf(ctrl) < 0) {\r\n ctrl.disabled = this.disabled;\r\n this.controls.push(ctrl);\r\n if (actionEventName) {\r\n ctrl.addEventListener(actionEventName, (e) => {\r\n this.perform();\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n removeControl(ctrl:HTMLInputElement) {\r\n var i = this.controls.indexOf(ctrl);\r\n if (i >= 0) {\r\n this.controls = this.controls.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n","import { Action } from '../../action/action'\r\nimport { AudioClip } from '../persistor'\r\n\r\n export enum EventType {CLOSED,READY,STARTED,POS_UPDATE, STOPPED, ENDED}\r\n\r\n export class AudioPlayerEvent{\r\n\r\n private _type:EventType;\r\n private _timePosition:number | undefined;\r\n\r\n constructor(type:EventType, timePosition?:number) {\r\n this._type = type;\r\n this._timePosition = timePosition;\r\n }\r\n\r\n get type() {\r\n return this._type;\r\n }\r\n\r\n get timePosition() {\r\n return this._timePosition;\r\n }\r\n }\r\n export interface AudioPlayerListener {\r\n audioPlayerUpdate(e:AudioPlayerEvent):void;\r\n }\r\n\r\n export class AudioPlayer {\r\n get autoPlayOnSelectToggleAction(): Action<boolean> {\r\n return this._autoPlayOnSelectToggleAction;\r\n }\r\n public static DEFAULT_BUFSIZE:number = 8192;\r\n private running=false;\r\n private _startAction:Action<void>;\r\n private _startSelectionAction:Action<void>;\r\n private _autoPlayOnSelectToggleAction:Action<boolean>\r\n private _stopAction:Action<void>;\r\n bufSize:number;\r\n context:AudioContext;\r\n listener:AudioPlayerListener;\r\n _audioClip:AudioClip|null=null;\r\n _audioBuffer:AudioBuffer | null=null;\r\n sourceBufferNode:AudioBufferSourceNode|null=null;\r\n buffPos:number;\r\n private zeroBufCnt:number;\r\n n:any;\r\n zb:Float32Array;\r\n private playStartTime:number|null=null;\r\n\r\n private timerVar:number|null=null;\r\n\r\n constructor(context:AudioContext, listener:AudioPlayerListener) {\r\n this.context=context;\r\n this.listener=listener;\r\n this.bufSize = AudioPlayer.DEFAULT_BUFSIZE;\r\n this.n=navigator;\r\n this.buffPos=0;\r\n this.zeroBufCnt=0;\r\n this.zb = new Float32Array(this.bufSize);\r\n this._startAction = new Action('Start');\r\n this._startAction.disabled = true;\r\n this._startAction.onAction = ()=>this.start();\r\n this._startSelectionAction=new Action('Start selected')\r\n this._startSelectionAction.disabled=true\r\n this._startSelectionAction.onAction = ()=>this.startSelected();\r\n this._autoPlayOnSelectToggleAction=new Action<boolean>(\"Autoplay on select\",false);\r\n this._stopAction = new Action('Stop');\r\n this._stopAction.disabled = true;\r\n this._stopAction.onAction = ()=>this.stop();\r\n }\r\n\r\n get startAction() {\r\n return this._startAction;\r\n }\r\n\r\n get startSelectionAction(){\r\n return this._startSelectionAction\r\n }\r\n\r\n get stopAction() {\r\n return this._stopAction;\r\n }\r\n\r\n set audioClip(audioClip:AudioClip| null) {\r\n\r\n var length = 0;\r\n var chs = 0;\r\n if (audioClip && audioClip.buffer) {\r\n chs = audioClip.buffer.numberOfChannels;\r\n if (chs > 0) {\r\n length = audioClip.buffer.length;\r\n if (chs > this.context.destination.maxChannelCount) {\r\n // TODO exception\r\n }\r\n }\r\n this.audioBuffer = audioClip.buffer;\r\n audioClip.addSelectionObserver((ac)=> {\r\n this._startSelectionAction.disabled = this.startSelectionDisabled()\r\n if (!this.startSelectionAction.disabled && this._autoPlayOnSelectToggleAction.value) {\r\n this.startSelected()\r\n }\r\n }\r\n )\r\n }else{\r\n this.audioBuffer=null;\r\n }\r\n this._audioClip=audioClip\r\n\r\n }\r\n\r\n set audioBuffer(audioBuffer:AudioBuffer | null) {\r\n this.stop();\r\n this._audioBuffer = audioBuffer;\r\n if (audioBuffer && this.context) {\r\n this._startAction.disabled = false;\r\n this._startSelectionAction.disabled=this.startSelectionDisabled()\r\n if(this.listener){\r\n this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.READY));\r\n }\r\n }else{\r\n this._startAction.disabled = true;\r\n this._startSelectionAction.disabled=true\r\n if(this.listener){\r\n this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.CLOSED));\r\n }\r\n }\r\n }\r\n get audioBuffer():AudioBuffer| null{\r\n return this._audioBuffer;\r\n }\r\n\r\n start() {\r\n if(!this._startAction.disabled && !this.running) {\r\n this.context.resume();\r\n this.sourceBufferNode = this.context.createBufferSource();\r\n this.sourceBufferNode.buffer = this._audioBuffer;\r\n this.sourceBufferNode.connect(this.context.destination);\r\n this.sourceBufferNode.onended = () => this.onended();\r\n\r\n this.playStartTime = this.context.currentTime;\r\n this.running=true;\r\n this.sourceBufferNode.start();\r\n\r\n this.playStartTime = this.context.currentTime;\r\n this._startAction.disabled = true;\r\n this._startSelectionAction.disabled=true\r\n this._stopAction.disabled = false;\r\n //this.timerVar = window.setInterval((e)=>this.updatePlayPosition(), 200);\r\n if (this.listener) {\r\n this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.STARTED));\r\n }\r\n }\r\n }\r\n\r\n startSelectionDisabled(){\r\n return !(this._audioClip && this.context && !this.startAction.disabled && this._audioClip.selection )\r\n }\r\n\r\n startSelected() {\r\n if(!this._startAction.disabled && !this.running) {\r\n this.context.resume();\r\n this.sourceBufferNode = this.context.createBufferSource();\r\n\r\n this.sourceBufferNode.buffer = this._audioBuffer;\r\n this.sourceBufferNode.connect(this.context.destination);\r\n this.sourceBufferNode.onended = () => this.onended();\r\n\r\n this.playStartTime = this.context.currentTime;\r\n this.running=true;\r\n // unfortunately Web Audio API uses time values not frames\r\n let ac=this._audioClip\r\n let offset=0\r\n if(ac && ac.selection){\r\n let s=ac.selection\r\n let sr=ac.buffer.sampleRate\r\n offset=s.leftFrame/sr\r\n let stopPosInsecs=s.rightFrame/sr\r\n let dur=stopPosInsecs-offset\r\n // TODO check valid values\r\n this.sourceBufferNode.start(0,offset,dur)\r\n }else {\r\n this.sourceBufferNode.start();\r\n }\r\n this.playStartTime = this.context.currentTime-offset;\r\n this._startAction.disabled = true;\r\n this._startSelectionAction.disabled=true\r\n this._stopAction.disabled = false;\r\n //this.timerVar = window.setInterval((e)=>this.updatePlayPosition(), 200);\r\n if (this.listener) {\r\n this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.STARTED));\r\n }\r\n }\r\n }\r\n\r\n stop(){\r\n if(this.running) {\r\n if (this.sourceBufferNode) {\r\n this.sourceBufferNode.stop();\r\n }\r\n if(this.timerVar!==null) {\r\n window.clearInterval(this.timerVar);\r\n }\r\n this.running=false;\r\n if (this.listener) {\r\n this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.STOPPED));\r\n }\r\n }\r\n\r\n }\r\n\r\n onended() {\r\n if(this.timerVar!=null) {\r\n window.clearInterval(this.timerVar);\r\n }\r\n this._startAction.disabled = !(this.audioBuffer);\r\n this._startSelectionAction.disabled=this.startSelectionDisabled()\r\n this._stopAction.disabled = true;\r\n this.running=false;\r\n if (this.listener) {\r\n this.listener.audioPlayerUpdate(new AudioPlayerEvent(EventType.ENDED));\r\n }\r\n }\r\n\r\n get playPositionTime():number|null {\r\n let ppt=null;\r\n if(this.playStartTime!==null) {\r\n ppt= this.context.currentTime - this.playStartTime;\r\n }\r\n return ppt;\r\n }\r\n\r\n get playPositionFrames():number|null {\r\n let ppFrs:number|null=null;\r\n if(this._audioBuffer ) {\r\n let ppTime = this.playPositionTime;\r\n if(ppTime!==null) {\r\n ppFrs = this._audioBuffer.sampleRate * ppTime;\r\n }\r\n }\r\n return ppFrs;\r\n }\r\n\r\n }\r\n\r\n","export class UserAgentComponent{\r\n constructor(public name:string,public version:string|null,public comment?:string) {\r\n\r\n }\r\n\r\n toString():string{\r\n let s='['+this.name+']';\r\n if(this.version){\r\n s=s+' ['+this.version+']';\r\n }\r\n if(this.comment){\r\n s=s+' ['+this.comment+']';\r\n }\r\n return s;\r\n }\r\n}\r\nexport const NAME_FIREFOX='Firefox';\r\nexport const NAME_CHROME='Chrome';\r\nexport const NAME_SAFARI='Safari';\r\nexport const NAME_EDGE='Edge';\r\n\r\n\r\n\r\nexport enum Browser {Firefox='Firefox',Chrome='Chrome',Safari='Safari',Edge='Edge'}\r\n\r\nexport const OS_WINDOWS='Windows';\r\nexport const OS_ANDROID='Android';\r\n\r\nexport enum Platform {Windows='Windows',Android='Android',macOS='MAC OS X'}\r\n\r\nexport class UserAgent{\r\n\r\n constructor(private _detectedPlatform:Platform|null,private _detectedBrowser:Browser|null) {\r\n }\r\n\r\n get detectedBrowser(): Browser | null {\r\n return this._detectedBrowser;\r\n }\r\n\r\n get detectedPlatform(): Platform | null {\r\n return this._detectedPlatform;\r\n }\r\n\r\n}\r\n\r\nexport class UserAgentBuilder {\r\n static instance:UserAgentBuilder|undefined=undefined;\r\n private comps:Array<UserAgentComponent>=new Array<UserAgentComponent>();\r\n private userAgent!:UserAgent;\r\n\r\n private build() {\r\n\r\n // // @ts-ignore\r\n // if(navigator.userAgentData){\r\n // // maybe we can use this in the future\r\n // console.info(\"Browser provides userAgentData:\");\r\n //\r\n // console.info(\"Brands:\");\r\n // // @ts-ignore\r\n // navigator.userAgentData.brands.forEach((br=>{\r\n // console.info(br.brand +\" \"+br.version);\r\n // }))\r\n // // @ts-ignore\r\n // console.info(\"Platform: \"+navigator.userAgentData.platform);\r\n // // @ts-ignore\r\n // console.info(\"Mobile:\"+navigator.userAgentData.mobile);\r\n // // @ts-ignore\r\n // //console.info(navigator.userAgentData.toJSON());\r\n // }else {\r\n // console.info(\"Browser does not provide userAgentData.\");\r\n // }\r\n\r\n let ua=navigator.userAgent;\r\n\r\n this.comps = new Array<UserAgentComponent>();\r\n\r\n let pp = 0;\r\n while (pp < ua.length) {\r\n //parse name/version\r\n let name: string | null = null\r\n let version: string | null = null;\r\n let comment: string | undefined;\r\n\r\n let blPos = ua.indexOf(' ', pp);\r\n let prt: string;\r\n if (blPos == -1) {\r\n prt = ua.substr(pp);\r\n pp += prt.length;\r\n } else {\r\n prt = ua.substr(pp, blPos - pp);\r\n pp = blPos + 1;\r\n }\r\n let sepPos = prt.indexOf('/');\r\n if (sepPos > 0) {\r\n name = prt.substr(0, sepPos);\r\n version = prt.substr(sepPos + 1);\r\n } else {\r\n name = prt;\r\n }\r\n while (ua[pp] === ' ' && pp < ua.length) {\r\n pp++;\r\n }\r\n if (ua[pp] === '(') {\r\n pp++;\r\n let commEnd = ua.indexOf(')', pp);\r\n comment = ua.substr(pp, commEnd - pp);\r\n pp = commEnd + 1;\r\n }\r\n while (ua[pp] === ' ' && pp < ua.length) {\r\n pp++;\r\n }\r\n this.comps.push(new UserAgentComponent(name, version, comment));\r\n }\r\n\r\n let detPlatf:Platform|null=null;\r\n if(this.runsOnOS(Platform.Android)){\r\n detPlatf=Platform.Android;\r\n }else if(this.runsOnOS(Platform.Windows)){\r\n detPlatf=Platform.Windows;\r\n }else if(this.runsOnOS(Platform.macOS)){\r\n detPlatf=Platform.macOS;\r\n }\r\n\r\n\r\n let detBr:Browser|null=null;\r\n if(this.matchesBrowser(Browser.Firefox)){\r\n detBr=Browser.Firefox;\r\n }else if(this.matchesBrowser(Browser.Chrome)){\r\n detBr=Browser.Chrome;\r\n }else if(this.matchesBrowser(Browser.Safari)){\r\n detBr=Browser.Safari;\r\n }\r\n\r\n this.userAgent=new UserAgent(detPlatf,detBr);\r\n\r\n }\r\n\r\n private matchesBrowser(browserName:string){\r\n for(let ci=0;ci<this.comps.length;ci++){\r\n let bn=this.comps[ci].name\r\n let bnRe=new RegExp(browserName,'i');\r\n if(bn.match(bnRe)){\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private runsOnOS(os:string):boolean{\r\n for(let ci=0;ci<this.comps.length;ci++){\r\n let cc=this.comps[ci].comment\r\n if(cc){\r\n var osRe = new RegExp(os,'i');\r\n if(cc.match(osRe)){\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static userAgent():UserAgent{\r\n if(!this.instance){\r\n this.instance=new UserAgentBuilder();\r\n }\r\n this.instance.build();\r\n return this.instance.userAgent;\r\n\r\n }\r\n\r\n}\r\n","\r\nexport interface AudioFormat {\r\n channels: number;\r\n}\r\n\r\nexport interface MediaCaptureFormat {\r\n audioChannelCount: number;\r\n}\r\n\r\nexport interface AudioDevice {\r\n name : string,\r\n playback : boolean,\r\n regex : boolean\r\n}\r\n\r\n\r\nexport enum ConstraintType {Exact='EXACT',Ideal='IDEAL'};\r\n\r\nexport enum Platform {Linux='LINUX',macOS='MACOS',Windows='WINDOWS',Android='ANDROID'}\r\nexport enum BrowserBase {Chromium='CHROMIUM'};\r\nexport enum Browser {Firefox='FIREFOX',Chromium='CHROMIUM',Chrome='CHROME',Edge='EDGE',Opera='OPERA'}\r\n\r\nexport interface AutoGainControlConfig {\r\n value: boolean,\r\n //constraintType : ConstraintType,\r\n platform: Platform,\r\n //browserBase:BrowserBase,\r\n //browser:Browser\r\n}\r\n\r\nexport interface Project {\r\n name: string,\r\n audioFormat?: AudioFormat,\r\n mediaCaptureFormat?: MediaCaptureFormat,\r\n autoGainControlConfigs?:Array<AutoGainControlConfig>,\r\n audioDevices?: Array<AudioDevice>\r\n}\r\n\r\n\r\nexport class ProjectUtil {\r\n\r\n public static readonly DEFAULT_AUDIO_CHANNEL_COUNT=2;\r\n\r\n static audioChannelCount(project:Project): number{\r\n let chs=ProjectUtil.DEFAULT_AUDIO_CHANNEL_COUNT;\r\n if(project.mediaCaptureFormat){\r\n chs=project.mediaCaptureFormat.audioChannelCount;\r\n }else if(project.audioFormat){\r\n chs=project.audioFormat.channels;\r\n }\r\n return chs;\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n","import {SequenceAudioFloat32OutStream} from \"../io/stream\";\r\nimport {Browser, Platform, UserAgentBuilder} from \"../../utils/ua-parser\";\r\n\r\nimport {AutoGainControlConfig, Platform as CfgPlatform} from \"../../speechrecorder/project/project\";\r\n\r\n\r\nexport const CHROME_ACTIVATE_ECHO_CANCELLATION_WITH_AGC=false;\r\n\r\nconst DEBUG_TRACE_LEVEL=0;\r\n\r\nconst ENABLE_AUDIO_WORKLET=true;\r\n\r\n// Super dirty way to load this module\r\n// Copy content of interceptor_worklet.js to this string\r\nconst awpStr=\"class AudioCaptureInterceptorProcessor extends AudioWorkletProcessor{\\n\" +\r\n \"\\n\" +\r\n \" BUFFER_QUANTUMS=64;\\n\" +\r\n \" QUANTUM_FRAME_LEN=128;\\n\" +\r\n \" BUFFER_FRAME_LEN=this.QUANTUM_FRAME_LEN*this.BUFFER_QUANTUMS;\\n\" +\r\n \" buffer=null;\\n\" +\r\n \" bufferPos=0;\\n\" +\r\n \" bufferPosBytes=0;\\n\" +\r\n \" constructor() {\\n\" +\r\n \" super();\\n\" +\r\n \"\\n\" +\r\n \" }\\n\" +\r\n \"\\n\" +\r\n \" process(\\n\" +\r\n \" inputs,\\n\" +\r\n \" outputs,\\n\" +\r\n \" parameters\\n\" +\r\n \" ){\\n\" +\r\n \"\\n\" +\r\n \" let inputsCnt=inputs.length;\\n\" +\r\n \" let channelCount=0;\\n\" +\r\n \" let inputLen=0;\\n\" +\r\n \" let inputLenBytes=0;\\n\" +\r\n \" if(inputsCnt>0) {\\n\" +\r\n \" let input0 = inputs[0];\\n\" +\r\n \" channelCount = input0.length;\\n\" +\r\n \" if (channelCount > 0) {\\n\" +\r\n \" let input0ch0=input0[0];\\n\" +\r\n \" inputLen=input0ch0.length;\\n\" +\r\n \" inputLenBytes=input0ch0.buffer.length;\\n\" +\r\n \" }\\n\" +\r\n \" }\\n\" +\r\n \" if (!this.buffer || this.buffer.length < channelCount) {\\n\" +\r\n \" this.buffer = new Array(channelCount);\\n\" +\r\n \" this.bufferPos = 0\\n\" +\r\n \" for (let bch = 0; bch < channelCount; bch++) {\\n\" +\r\n \" this.buffer[bch] = new Float32Array(this.BUFFER_FRAME_LEN);\\n\" +\r\n \" this.bufferPos = 0;\\n\" +\r\n \" this.bufferPosBytes=0;\\n\" +\r\n \" }\\n\" +\r\n \" }\\n\" +\r\n \" let bufAvail = this.BUFFER_FRAME_LEN - this.bufferPos;\\n\" +\r\n \" // check if buffer has to be transferred\\n\" +\r\n \" if (inputLen > bufAvail) {\\n\" +\r\n \" let ada=new Array(channelCount);\\n\" +\r\n \" for (let ch = 0; ch < channelCount; ch++) {\\n\" +\r\n \" ada[ch]=this.buffer[ch].buffer.slice(0);\\n\" +\r\n \" }\\n\" +\r\n \" this.port.postMessage({\\n\" +\r\n \" data: ada,\\n\" +\r\n \" chs: channelCount,\\n\" +\r\n \" len: this.bufferPos\\n\" +\r\n \" }, ada);\\n\" +\r\n \" // buffer transferred, reset\\n\" +\r\n \" this.bufferPos = 0;\\n\" +\r\n \" this.bufferPosBytes=0;\\n\" +\r\n \" }\\n\" +\r\n \"\\n\" +\r\n \" for(let ii=0;ii<inputsCnt;ii++) {\\n\" +\r\n \" for (let ch = 0; ch < channelCount; ch++) {\\n\" +\r\n \" // Mute outputs\\n\" +\r\n \" //outputs[ii][ch].fill(0);\\n\" +\r\n \" let chSamples = inputs[ii][ch];\\n\" +\r\n \" this.buffer[ch].set(chSamples,this.bufferPos);\\n\" +\r\n \" }\\n\" +\r\n \" this.bufferPos+=inputLen;\\n\" +\r\n \" this.bufferPosBytes+=inputLenBytes;\\n\" +\r\n \" }\\n\" +\r\n \" \\n\" +\r\n \" return true;\\n\" +\r\n \" }\\n\" +\r\n \"}\\n\" +\r\n \"\\n\" +\r\n \"registerProcessor('capture-interceptor',AudioCaptureInterceptorProcessor);\\n\";\r\n\r\n\r\n\r\n\r\nexport interface AudioCaptureListener {\r\n opened(): void;\r\n\r\n started(): void;\r\n\r\n stopped(): void;\r\n\r\n closed(): void;\r\n\r\n error(msg?:string,advice?:string): void;\r\n}\r\n\r\nexport class AudioCapture {\r\n get opened(): boolean {\r\n return this._opened;\r\n }\r\n\r\n static BUFFER_SIZE: number = 8192;\r\n context: AudioContext;\r\n stream!: MediaStream;\r\n channelCount!: number;\r\n mediaStream: any;\r\n agcStatus:boolean|null=null;\r\n bufferingNode: AudioNode|null=null;\r\n listener!: AudioCaptureListener;\r\n data!: Array<Array<Float32Array>>;\r\n currentSampleRate!: number;\r\n n: Navigator;\r\n audioOutStream: SequenceAudioFloat32OutStream | null=null;\r\n private disconnectStreams = true;\r\n private _opened=false;\r\n private capturing = false;\r\n\r\n framesRecorded: number=0;\r\n\r\n constructor(context: AudioContext) {\r\n this.context = context;\r\n this.n = navigator;\r\n }\r\n\r\n private initData() {\r\n this.data = new Array<Array<Float32Array>>();\r\n for (let i = 0; i < this.channelCount; i++) {\r\n this.data.push(new Array<Float32Array>());\r\n }\r\n this.framesRecorded = 0;\r\n }\r\n\r\n listDevices() {\r\n navigator.mediaDevices.enumerateDevices().then((l: MediaDeviceInfo[]) => this.printDevices(l));\r\n }\r\n\r\n private dummySession():Promise<MediaStream>{\r\n // workaround to request permissions:\r\n // Start a dummy session\r\n let mediaStrCnstrs = <MediaStreamConstraints>{audio:\r\n {echoCancelation: false}\r\n };\r\n return navigator.mediaDevices.getUserMedia(mediaStrCnstrs);\r\n\r\n }\r\n\r\n\r\n private stopAllSessionTracks(mediaStream:MediaStream){\r\n let ats = mediaStream.getTracks();\r\n for (let atIdx = 0; atIdx < ats.length; atIdx++) {\r\n //console.debug(\"Stop dummy session track: #\" + atIdx)\r\n ats[atIdx].stop();\r\n }\r\n }\r\n\r\n deviceInfos(cb: (deviceInfos: MediaDeviceInfo[] | null) => any, retry = true,dummyStream?:MediaStream) {\r\n\r\n navigator.mediaDevices.enumerateDevices().then((l: MediaDeviceInfo[]) => {\r\n let labelsAvailable = false;\r\n for (let i = 0; i < l.length; i++) {\r\n let di = l[i];\r\n if (di.label) {\r\n labelsAvailable = true;\r\n }\r\n }\r\n if (!labelsAvailable) {\r\n //console.debug(\"Media device enumeration: No labels.\")\r\n if (retry) {\r\n console.info(\"Starting dummy session to request audio permissions...\")\r\n\r\n this.dummySession().then((s: MediaStream) => {\r\n // and stop it immediately\r\n\r\n if(s) {\r\n //console.debug(\"Got dummy session stream: \" + s + \" .\")\r\n }else{\r\n //console.debug(\"No dummy stream\")\r\n }\r\n // retry (only once)\r\n this.deviceInfos(cb, false,s);\r\n },reason => {\r\n //console.debug(\"Dummy session rejected.\")\r\n // TODO error callback\r\n cb(null);\r\n });\r\n } else {\r\n cb(null);\r\n }\r\n } else {\r\n // success\r\n cb(l);\r\n }\r\n if(dummyStream){\r\n this.stopAllSessionTracks(dummyStream);\r\n }\r\n },(reason)=> {\r\n //rejected\r\n //console.debug(\"Media device enumeration rejected.\")\r\n if (retry) {\r\n //console.debug(\"Starting dummy session to request audio permissions...\")\r\n this.dummySession().then((s: MediaStream) => {\r\n // and stop it immediately\r\n //console.debug(\"Dummy session.\")\r\n if(s) {\r\n //console.debug(\"Got dummy session stream: \" + s + \" .\")\r\n }else{\r\n //console.debug(\"No dummy stream\")\r\n }\r\n // retry (only once)\r\n this.deviceInfos(cb, false,s);\r\n }, reason => {\r\n //console.debug(\"Dummy session rejected.\")\r\n // TODO error callback\r\n cb(null);\r\n });\r\n } else {\r\n cb(null);\r\n }\r\n if(dummyStream){\r\n this.stopAllSessionTracks(dummyStream);\r\n }\r\n });\r\n\r\n\r\n\r\n }\r\n\r\n\r\n printDevices(l: MediaDeviceInfo[]): void {\r\n let selDeviceId = '___dummy___';\r\n for (let i = 0; i < l.length; i++) {\r\n let di = l[i];\r\n\r\n console.log(\"Audio device: Id: \" + di.deviceId + \" groupId: \" + di.groupId + \" label: \" + di.label + \" kind: \" + di.kind);\r\n }\r\n }\r\n\r\n open(channelCount: number, selDeviceId?: ConstrainDOMString|undefined,autoGainControlConfigs?:Array<AutoGainControlConfig>|null|undefined){\r\n this.context.resume().then(()=>{\r\n this._open(channelCount,selDeviceId,autoGainControlConfigs);\r\n })\r\n }\r\n\r\n _open(channelCount: number, selDeviceId?: ConstrainDOMString|undefined,autoGainControlConfigs?:Array<AutoGainControlConfig>|null|undefined) {\r\n this.channelCount = channelCount;\r\n this.framesRecorded = 0;\r\n //var msc = new AudioStreamConstr();\r\n // var msc={};\r\n //msc.video = false;\r\n //msc.audio = true;\r\n\r\n // Chrome and Firefox stereo channels are identical !!\r\n // And even worse: The data coming from the source is already preprocessed on FF and Chrome. It contains DSP artifacts!!\r\n\r\n // https://bugs.chromium.org/p/chromium/issues/detail?id=387737\r\n // The workaround to set these constraints does _NOT_ help:\r\n //var msc={audio: {echoCancellation: false,channelCount: 2, googAudioMirroring: false},video: false};\r\n\r\n // Safari at least version 11: Support for media streams\r\n // TODO test if input is unprocessed\r\n\r\n let msc:MediaStreamConstraints;\r\n console.info('User agent: '+navigator.userAgent);\r\n\r\n\r\n let ua=UserAgentBuilder.userAgent();\r\n\r\n // ua.components.forEach((c)=>{\r\n // console.info(\"UA_Comp: \"+c.toString());\r\n // })\r\n\r\n let agcCfg:AutoGainControlConfig|null=null;\r\n\r\n let autoGainControl=false;\r\n let chromeEchoCancellation=false;\r\n if(autoGainControlConfigs){\r\n for(let agcc of autoGainControlConfigs){\r\n if(agcc.platform===CfgPlatform.Android && ua.detectedPlatform===Platform.Android){\r\n agcCfg=agcc;\r\n break;\r\n }\r\n if(agcc.platform===CfgPlatform.Windows && ua.detectedPlatform===Platform.Windows){\r\n agcCfg=agcc;\r\n break;\r\n }\r\n }\r\n if(agcCfg){\r\n // TODO use EXACT/IDEAL constraint\r\n autoGainControl=agcCfg.value;\r\n if(CHROME_ACTIVATE_ECHO_CANCELLATION_WITH_AGC){\r\n chromeEchoCancellation=agcCfg.value;\r\n }\r\n // TODO query real AGC status\r\n this.agcStatus=agcCfg.value;\r\n }else{\r\n this.agcStatus=false;\r\n }\r\n }\r\n\r\n // default\r\n msc = {\r\n audio: {\r\n deviceId: selDeviceId,\r\n echoCancellation: false,\r\n channelCount: channelCount,\r\n autoGainControl: autoGainControl\r\n },\r\n video: false\r\n };\r\n\r\n if (ua.detectedBrowser===Browser.Edge) {\r\n\r\n // Microsoft Edge sends unmodified audio\r\n // The constraint can follow the specification\r\n console.info(\"Setting media track constraints for Microsoft Edge.\");\r\n msc = {\r\n audio: {\r\n deviceId: selDeviceId,\r\n echoCancellation: false,\r\n channelCount: channelCount,\r\n autoGainControl: autoGainControl\r\n },\r\n video: false\r\n };\r\n } else if (ua.detectedBrowser===Browser.Chrome) {\r\n // Google Chrome: we need to switch of each of the preprocessing units including the\r\n console.info(\"Setting media track constraints for Google Chrome.\");\r\n\r\n // Chrome 60 -> 61 changed\r\n // it works now without mandatory/optional sub-objects\r\n\r\n\r\n // Requires at least Chrome 61\r\n msc = {\r\n audio: {\r\n deviceId: selDeviceId,\r\n channelCount: channelCount,\r\n echoCancellation: {exact:chromeEchoCancellation},\r\n autoGainControl: {exact:autoGainControl},\r\n sampleSize:{min: 16},\r\n },\r\n video: false,\r\n }\r\n\r\n } else if (ua.detectedBrowser===Browser.Firefox) {\r\n console.info(\"Setting media track constraints for Mozilla Firefox.\");\r\n // Firefox\r\n msc = {\r\n audio: {\r\n deviceId: selDeviceId,\r\n channelCount: channelCount,\r\n echoCancellation: false,\r\n autoGainControl: autoGainControl,\r\n noiseSuppression: false\r\n },\r\n video: false,\r\n }\r\n\r\n } else if (ua.detectedBrowser===Browser.Safari) {\r\n console.info(\"Setting media track constraints for Safari browser.\")\r\n console.info(\"Apply workaround for Safari: Avoid disconnect of streams.\");\r\n\r\n this.disconnectStreams = false;\r\n msc = {\r\n audio: {\r\n deviceId: selDeviceId,\r\n channelCount: channelCount,\r\n echoCancellation: false\r\n },\r\n video: false,\r\n }\r\n\r\n } else {\r\n\r\n // TODO default constraints or error Browser not supported\r\n }\r\n\r\n\r\n\r\n console.debug(\"Audio capture, AGC: \"+this.agcStatus)\r\n\r\n\r\n let ump = navigator.mediaDevices.getUserMedia(msc);\r\n ump.then((s) => {\r\n this.stream = s;\r\n\r\n let aTracks = s.getAudioTracks();\r\n\r\n for (let i = 0; i < aTracks.length; i++) {\r\n let aTrack = aTracks[i];\r\n\r\n console.info(\"Track audio info: id: \" + aTrack.id + \" kind: \" + aTrack.kind + \" label: \\\"\" + aTrack.label + \"\\\"\");\r\n let mtrSts=aTrack.getSettings();\r\n console.info(\"Track audio settings: Ch cnt: \"+mtrSts.channelCount+\", AGC: \"+mtrSts.autoGainControl+\", Echo cancell.: \"+mtrSts.echoCancellation);\r\n if(mtrSts.autoGainControl){\r\n this.agcStatus=mtrSts.autoGainControl;\r\n }\r\n }\r\n\r\n let vTracks = s.getVideoTracks();\r\n for (let i = 0; i < vTracks.length; i++) {\r\n let vTrack = vTracks[i];\r\n console.info(\"Track video info: id: \" + vTrack.id + \" kind: \" + vTrack.kind + \" label: \" + vTrack.label);\r\n }\r\n this.mediaStream = this.context.createMediaStreamSource(s);\r\n // stream channel count ( is always 2 !)\r\n let streamChannelCount: number = this.mediaStream.channelCount;\r\n console.info(\"Stream channel count: \"+streamChannelCount);\r\n // is not set!!\r\n //this.currentSampleRate = this.mediaStream.sampleRate;\r\n this.currentSampleRate = this.context.sampleRate;\r\n console.info(\"Source audio node: channels: \" + streamChannelCount + \" samplerate: \" + this.currentSampleRate);\r\n if (this.audioOutStream) {\r\n this.audioOutStream.setFormat(this.channelCount, this.currentSampleRate);\r\n }\r\n // W3C -> new name is createScriptProcessor\r\n //\r\n // Again deprecated, but AudioWorker not yet implemented in stable releases (June 2016)\r\n // AudioWorker is now AudioWorkletProcessor ... (May 2017)\r\n\r\n // Update 12-2020:\r\n // The ScriptProcessorNode Interface - DEPRECATED\r\n\r\n // Update 06-2021\r\n // AudioWorkletProcessor is here to stay. Web Audio API has now Recommendation status !\r\n\r\n if(ENABLE_AUDIO_WORKLET && this.context.audioWorklet){\r\n //const workletFileName = ('file-loader!./interceptor_worklet.js');\r\n //const workletFileName = 'http://localhost:4200/assets/interceptor_worklet.js';\r\n //console.log(awpStr);\r\n let audioWorkletModuleBlob= new Blob([awpStr], {type: 'text/javascript'});\r\n\r\n let audioWorkletModuleBlobUrl=window.URL.createObjectURL(audioWorkletModuleBlob);\r\n\r\n this.context.audioWorklet.addModule(audioWorkletModuleBlobUrl).then(()=> {\r\n const awn = new AudioWorkletNode(this.context, 'capture-interceptor');\r\n awn.onprocessorerror=(ev:Event)=>{\r\n let msg='Unknwon error';\r\n if(ev instanceof ErrorEvent){\r\n msg=ev.message;\r\n }\r\n console.error(\"Capture audio worklet error: \"+msg);\r\n if(this.listener){\r\n this.listener.error(msg);\r\n }\r\n }\r\n let awnPt = awn.port;\r\n if (awnPt) {\r\n awnPt.onmessage = (ev: MessageEvent<any>) => {\r\n if (this.capturing) {\r\n let dt=ev.data;\r\n let chs = dt.chs;\r\n let adaLen = dt.data.length;\r\n if(DEBUG_TRACE_LEVEL>8) {\r\n console.debug('Received data from worklet: ' +chs + ' ' + dt.len +' Data chs: '+adaLen);\r\n }\r\n //let chunkLen = adaLen / chs;\r\n let chunkLen = adaLen;\r\n let chunk = new Array<Float32Array>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n if (this.data && this.data[ch]) {\r\n let adaPos = ch * chunkLen;\r\n if(dt.data[ch]) {\r\n let fa = new Float32Array(dt.data[ch]);\r\n this.data[ch].push(fa);\r\n chunk[ch] = fa;\r\n // Use samples of channel 0 to count frames (samples)\r\n if (ch == 0) {\r\n this.framesRecorded += fa.length;\r\n }\r\n }else{\r\n if(DEBUG_TRACE_LEVEL>8) {\r\n console.debug('Channel '+ch+' data not set!!');\r\n }\r\n }\r\n }\r\n }\r\n if (this.audioOutStream) {\r\n this.audioOutStream.write(chunk);\r\n }\r\n }\r\n };\r\n }\r\n this.bufferingNode = awn;\r\n this._opened = true;\r\n if (this.listener) {\r\n this.listener.opened();\r\n }\r\n }\r\n ).catch((error: any)=>{\r\n console.log('Could not add module '+error);\r\n });\r\n\r\n }else if(this.context.createScriptProcessor) {\r\n // The ScriptProcessorNode Interface - DEPRECATED Only as fallback\r\n // TODO should we use streamChannelCount or channelCount here ?\r\n let scriptProcessorNode= this.context.createScriptProcessor(AudioCapture.BUFFER_SIZE, streamChannelCount, streamChannelCount);\r\n this.bufferingNode=scriptProcessorNode;\r\n let c = 0;\r\n if(scriptProcessorNode.onaudioprocess){\r\n scriptProcessorNode.onaudioprocess = (e: AudioProcessingEvent) => {\r\n\r\n if (this.capturing) {\r\n let inBuffer = e.inputBuffer;\r\n let duration = inBuffer.duration;\r\n // only process requested count of channels\r\n let currentBuffers = new Array<Float32Array>(channelCount);\r\n for (let ch: number = 0; ch < channelCount; ch++) {\r\n let chSamples = inBuffer.getChannelData(ch);\r\n let chSamplesCopy = chSamples.slice(0);\r\n currentBuffers[ch] = chSamplesCopy.slice(0);\r\n this.data[ch].push(chSamplesCopy);\r\n if(DEBUG_TRACE_LEVEL>8){\r\n console.debug(\"Process \"+chSamplesCopy.length+\" samples.\");\r\n }\r\n this.framesRecorded += chSamplesCopy.length;\r\n }\r\n c++;\r\n if (this.audioOutStream) {\r\n this.audioOutStream.write(currentBuffers);\r\n }\r\n }\r\n };\r\n this._opened = true;\r\n if (this.listener) {\r\n this.listener.opened();\r\n }\r\n }else{\r\n this.listener.error('Browser does not support audio processing (ScriptProcessor.onaudioprocess method not found)!');\r\n }\r\n }else{\r\n this.listener.error('Browser does not support audio processing (neither AudioWorkletProcessor nor ScriptProcessor)!');\r\n }\r\n }, (e) => {\r\n console.error(e + \" Error name: \" +e.name);\r\n if (this.listener) {\r\n if('NotAllowedError' === e.name){\r\n this.listener.error('Not allowed to use your microphone.','Please make sure that microphone access is allowed for this web page and reload the page.');\r\n }else if('NotReadableError' === e.name){\r\n this.listener.error('Could not read from your audio device.','Please make sure your audio device is working.');\r\n }else if('OverconstrainedError' === e.name){\r\n let eMsg=e.msg?e.msg:'Overconstrained media device request error.';\r\n this.listener.error(eMsg);\r\n } else {\r\n this.listener.error();\r\n }\r\n }\r\n }\r\n )\r\n }\r\n\r\n start() {\r\n\r\n this.initData();\r\n if (this.audioOutStream) {\r\n this.audioOutStream.nextStream()\r\n }\r\n this.capturing = true;\r\n if(this.bufferingNode) {\r\n this.mediaStream.connect(this.bufferingNode);\r\n this.bufferingNode.connect(this.context.destination);\r\n }\r\n if (this.listener) {\r\n this.listener.started();\r\n }\r\n\r\n }\r\n\r\n stop() {\r\n\r\n if (this.disconnectStreams && this.bufferingNode) {\r\n this.mediaStream.disconnect(this.bufferingNode);\r\n this.bufferingNode.disconnect(this.context.destination);\r\n }\r\n\r\n if (this.audioOutStream) {\r\n this.audioOutStream.flush();\r\n }\r\n this.capturing = false;\r\n if (this.listener) {\r\n this.listener.stopped();\r\n }\r\n }\r\n\r\n\r\n close() {\r\n this.mediaStream.disconnect();\r\n if (this.stream) {\r\n //this.stream.stop();\r\n //'MediaStream.stop()' is deprecated and will be removed in M47, around November 2015. Please use 'MediaStream.active' instead.\r\n //this.stream.active=false;\r\n var mts = this.stream.getTracks();\r\n for (var i = 0; i < mts.length; i++) {\r\n mts[i].stop();\r\n }\r\n }\r\n this._opened=false;\r\n }\r\n\r\n audioBuffer(): AudioBuffer {\r\n var frameLen: number = 0;\r\n var ch0Data = this.data[0];\r\n\r\n for (var ch0Chk of ch0Data) {\r\n frameLen += ch0Chk.length;\r\n }\r\n var ab = this.context.createBuffer(this.channelCount, frameLen, this.context.sampleRate);\r\n for (var ch = 0; ch < this.channelCount; ch++) {\r\n\r\n var chD = ab.getChannelData(ch);\r\n var pos = 0;\r\n for (var chChk of this.data[ch]) {\r\n var bufLen = chChk.length;\r\n chD.set(chChk, pos);\r\n pos += bufLen;\r\n }\r\n }\r\n return ab;\r\n }\r\n}\r\n\r\n","\n\n export class WavFileFormat {\n static RIFF_KEY:string = 'RIFF';\n static WAV_KEY:string = 'WAVE';\n static PCM:number = 0x0001;\n }\n\n\n\n\n","\n export class BinaryByteWriter {\n static DEFAULT_SIZE_INC = 1024;\n buf: ArrayBuffer;\n private _pos: number;\n\n constructor() {\n const size = BinaryByteWriter.DEFAULT_SIZE_INC;\n this.buf = new ArrayBuffer(size);\n this._pos = 0;\n }\n\n get pos(): number {\n return this._pos;\n }\n\n ensureCapacity(numBytes: number) {\n\n while ( this._pos + numBytes >= this.buf.byteLength ) {\n // buffer increment\n let inc = BinaryByteWriter.DEFAULT_SIZE_INC;\n if (inc < numBytes) {\n inc = numBytes;\n }\n const newSize = this.buf.byteLength + inc;\n\n const arrOld = new Uint8Array(this.buf, 0, this._pos);\n const arrNew = new Uint8Array(newSize);\n arrNew.set(arrOld);\n this.buf = arrNew.buffer;\n }\n }\n\n writeUint8(val: number): void {\n this.ensureCapacity(1);\n const valView = new DataView(this.buf, this._pos, 1);\n valView.setUint8(0, val);\n this._pos++;\n }\n\n writeUint16(val: number, le: boolean): void {\n this.ensureCapacity(2);\n const valView = new DataView(this.buf, this._pos, 2);\n valView.setUint16(0, val, le);\n this._pos += 2;\n\n }\n writeInt16(val: number, le: boolean): void {\n this.ensureCapacity(2);\n const valView = new DataView(this.buf, this._pos, 2);\n valView.setInt16(0, val, le);\n this._pos += 2;\n }\n\n\n writeUint32(val: number, le: boolean): void {\n this.ensureCapacity(4);\n const valView = new DataView(this.buf, this._pos, 4);\n valView.setUint32(0, val, le);\n this._pos += 4;\n }\n\n writeInt32(val: number, le: boolean): void {\n this.ensureCapacity(4);\n const valView = new DataView(this.buf, this._pos, 4);\n valView.setInt32(0, val, le);\n this._pos += 4;\n }\n finish(): Uint8Array {\n const finalArr = new Uint8Array(this._pos);\n const dv = new DataView(this.buf, 0, this._pos);\n for (let i = 0; i < this._pos; i++) {\n finalArr[i] = dv.getUint8(i);\n }\n return finalArr;\n }\n\n writeAscii(text: string): void {\n let i;\n for (i = 0; i < text.length; i++) {\n const asciiCode = text.charCodeAt(i);\n if (asciiCode < 0 || asciiCode > 255) {\n throw new Error('Not an ASCII character at char ' + i + ' in ' + text);\n }\n this.writeUint8(asciiCode);\n }\n }\n\n }\n\n","\r\n export class UUID {\r\n\r\n static generate():string {\r\n return UUID.s4() + UUID.s4() + '-' + UUID.s4() + '-' + UUID.s4() + '-' +\r\n UUID.s4() + '-' + UUID.s4() + UUID.s4() + UUID.s4();\r\n }\r\n\r\n private static s4() {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n }\r\n }\r\n\r\n export class Arrays {\r\n\r\n static cloneNumberArray(numberArray: Array<number>): Array<number> {\r\n let len = numberArray.length;\r\n let cloneArr = new Array<number>(len);\r\n for (let c = 0; c < numberArray.length; c++) {\r\n cloneArr[c] = numberArray[c];\r\n }\r\n return cloneArr;\r\n }\r\n\r\n static swap<T>(items:Array<T>, i:number, j:number) {\r\n let tmp = items[i];\r\n items[i] = items[j];\r\n items[j] = tmp;\r\n }\r\n\r\n static shuffleArray<T>(orgArray:Array<T>):Array<T>{\r\n let shuffledArray = [...orgArray];\r\n for (let i = shuffledArray.length; i > 1; i--) {\r\n let rnd=Math.random();\r\n let rndArrIdx=Math.floor(rnd*i);\r\n Arrays.swap(shuffledArray, i - 1, rndArrIdx);\r\n }\r\n return shuffledArray;\r\n }\r\n }\r\n\r\n export class WorkerHelper {\r\n\r\n static DEBUG=false;\r\n static buildWorkerBlobURL(workerFct: Function): string {\r\n\r\n if(! (workerFct instanceof Function)) {\r\n throw new Error(\r\n 'Parameter workerFct is not a function! (XSS attack?).'\r\n )\r\n }\r\n let woFctNm = workerFct.name\r\n if (WorkerHelper.DEBUG) {\r\n console.info(\"Worker method name: \" + woFctNm)\r\n }\r\n\r\n let woFctStr = workerFct.toString()\r\n if (WorkerHelper.DEBUG) {\r\n console.info(\"Worker method string:\")\r\n console.info(woFctStr)\r\n }\r\n\r\n\r\n // Make sure code starts with \"function()\"\r\n\r\n // Chrome, Firefox: \"[wofctNm](){...}\", Safari: \"function [wofctNm](){...}\"\r\n // we need an anonymous function: \"function() {...}\"\r\n let piWoFctStr = woFctStr.replace(/^function +/, '');\r\n\r\n if(WorkerHelper.DEBUG){\r\n console.info(\"Worker platform independent function string:\")\r\n console.info(piWoFctStr)\r\n }\r\n\r\n // Convert to anonymous function\r\n let anonWoFctStr = piWoFctStr.replace(woFctNm + '()', 'function()')\r\n if(WorkerHelper.DEBUG){\r\n console.info(\"Worker anonymous function string:\")\r\n console.info(piWoFctStr)\r\n }\r\n // Self executing\r\n let ws = '(' + anonWoFctStr + ')();'\r\n if(WorkerHelper.DEBUG){\r\n console.info(\"Worker self executing anonymous function string:\")\r\n console.info(anonWoFctStr)\r\n }\r\n // Build the worker blob\r\n let wb = new Blob([ws], {type: 'text/javascript'});\r\n\r\n let workerBlobUrl=window.URL.createObjectURL(wb);\r\n return workerBlobUrl;\r\n }\r\n }\r\n","import { WavFileFormat } from './wavformat'\r\nimport { PCMAudioFormat } from '../format'\r\nimport { BinaryByteWriter } from '../../io/BinaryWriter'\r\nimport {WorkerHelper} from \"../../utils/utils\";\r\ndeclare function postMessage (message:any, transfer:Array<any>):void;\r\n\r\n\r\n export class WavWriter {\r\n\r\n static PCM:number = 1;\r\n static DEFAULT_SAMPLE_SIZE_BYTES:number = 2;\r\n private bw:BinaryByteWriter;\r\n private format:PCMAudioFormat|null=null;\r\n private dataLength:number|null=null;\r\n private workerURL: string|null=null;\r\n\r\n constructor() {\r\n this.bw = new BinaryByteWriter();\r\n }\r\n\r\n /*\r\n * Method used as worker code.\r\n */\r\n workerFunction() {\r\n self.onmessage = function (msg:MessageEvent) {\r\n\r\n let bufLen=msg.data.frameLength * msg.data.chs;\r\n let valView = new DataView(msg.data.buf,msg.data.bufPos);\r\n\r\n let bufPos = 0;\r\n let hDynIntRange = 1 << (msg.data.sampleSizeInBits - 1);\r\n for (let s = 0; s < msg.data.frameLength; s++) {\r\n // interleaved channel data\r\n\r\n for (let ch = 0; ch < msg.data.chs; ch++) {\r\n let srcPos=(ch*msg.data.frameLength)+s;\r\n let valFlt = msg.data.audioData[srcPos];\r\n let valInt = Math.round(valFlt * hDynIntRange);\r\n valView.setInt16(bufPos, valInt, true);\r\n bufPos+=2;\r\n }\r\n }\r\n postMessage({buf:msg.data.buf}, [msg.data.buf]);\r\n //self.close()\r\n }\r\n }\r\n\r\n\r\n writeFmtChunk(audioBuffer:AudioBuffer){\r\n\r\n this.bw.writeUint16(WavFileFormat.PCM,true);\r\n let frameSize=WavWriter.DEFAULT_SAMPLE_SIZE_BYTES*audioBuffer.numberOfChannels; // fixed 16-bit for now\r\n this.bw.writeUint16(audioBuffer.numberOfChannels,true);\r\n this.bw.writeUint32(audioBuffer.sampleRate,true);\r\n // dwAvgBytesPerSec\r\n this.bw.writeUint32(frameSize*audioBuffer.sampleRate,true);\r\n this.bw.writeUint16(frameSize,true);\r\n // sample size in bits (PCM format only)\r\n this.bw.writeUint16(WavWriter.DEFAULT_SAMPLE_SIZE_BYTES*8,true);\r\n }\r\n\r\n writeDataChunk(audioBuffer:AudioBuffer){\r\n\r\n let chData0=audioBuffer.getChannelData(0);\r\n let dataLen=chData0.length;\r\n let hDynIntRange=1 << ((WavWriter.DEFAULT_SAMPLE_SIZE_BYTES*8)-1);\r\n for(let s=0;s<dataLen;s++) {\r\n // interleaved channel data\r\n for (let ch = 0; ch < audioBuffer.numberOfChannels; ch++) {\r\n let chData = audioBuffer.getChannelData(ch);\r\n let valFlt=chData[s];\r\n let valInt=Math.round(valFlt*hDynIntRange);\r\n this.bw.writeInt16(valInt,true);\r\n }\r\n }\r\n\r\n }\r\n\r\n writeChunkHeader(name:string,chkLen:number){\r\n this.bw.writeAscii(name);\r\n this.bw.writeUint32(chkLen,true);\r\n }\r\n\r\n writeAsync(audioBuffer:AudioBuffer,callback: (wavFileData:Uint8Array)=> any){\r\n\r\n let dataChkByteLen=this.writeHeader(audioBuffer);\r\n if (!this.workerURL) {\r\n this.workerURL = WorkerHelper.buildWorkerBlobURL(this.workerFunction)\r\n }\r\n let wo = new Worker(this.workerURL);\r\n\r\n let chs = audioBuffer.numberOfChannels;\r\n\r\n let frameLength = audioBuffer.getChannelData(0).length;\r\n let ad = new Float32Array(chs * frameLength);\r\n for (let ch = 0; ch < chs; ch++) {\r\n ad.set(audioBuffer.getChannelData(ch), ch * frameLength);\r\n }\r\n // ensureCapacity blocks !!!\r\n this.bw.ensureCapacity(dataChkByteLen);\r\n wo.onmessage = (me) => {\r\n callback(me.data.buf);\r\n wo.terminate();\r\n }\r\n //TODO Fixed sample size of 16 bits\r\n wo.postMessage({sampleSizeInBits:16, chs: chs, frameLength: frameLength, audioData: ad,buf:this.bw.buf,bufPos:this.bw.pos}, [ad.buffer,this.bw.buf]);\r\n\r\n }\r\n\r\n write(audioBuffer:AudioBuffer):Uint8Array{\r\n this.writeHeader(audioBuffer);\r\n this.writeDataChunk(audioBuffer);\r\n return this.bw.finish();\r\n }\r\n\r\n\r\n writeHeader(audioBuffer:AudioBuffer):number{\r\n\r\n this.bw.writeAscii(WavFileFormat.RIFF_KEY);\r\n let dataChkByteLen=audioBuffer.getChannelData(0).length*WavWriter.DEFAULT_SAMPLE_SIZE_BYTES*audioBuffer.numberOfChannels;\r\n let wavChunkByteLen=(4+4)*3+16+dataChkByteLen;\r\n let wavFileDataByteLen=wavChunkByteLen+8;\r\n\r\n this.bw.writeUint32(wavChunkByteLen,true); // must be set to file length-8 later\r\n this.bw.writeAscii(WavFileFormat.WAV_KEY);\r\n this.writeChunkHeader('fmt ',16);\r\n this.writeFmtChunk(audioBuffer);\r\n this.writeChunkHeader('data',dataChkByteLen);\r\n return dataChkByteLen;\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n","\r\nexport type Mode = \"MANUAL\" | \"AUTOPROGRESS\" | \"AUTORECORDING\";\r\nexport type PromptPhase = \"IDLE\" | \"PRERECORDING\" | \"RECORDING\";\r\n\r\nexport type Order = 'SEQUENTIAL' | 'RANDOM' | 'RANDOMIZED';\r\n\r\nexport type Decoration ='underline'\r\nexport type Style ='italic' | 'normal'\r\nexport type FontWeight='normal' | 'bold'\r\nexport type BlockType='p';\r\nexport type TextType='text' | 'font';\r\n\r\nexport interface Recinstructions{\r\n recinstructions:string;\r\n}\r\n\r\nexport interface Text {\r\n type: TextType,\r\n color? : string,\r\n decoration? : Decoration,\r\n size?: string,\r\n weight?: FontWeight,\r\n style?: Style,\r\n text : string | Text;\r\n}\r\n\r\nexport interface Block {\r\n type: BlockType,\r\n texts: Array<Text>\r\n}\r\nexport interface Body{\r\n blocks?: Array<Block>,\r\n}\r\n\r\nexport interface PromptDoc{\r\n body?: Body\r\n}\r\n\r\nexport interface Mediaitem {\r\n text?: string,\r\n src?: string,\r\n promptDoc?: PromptDoc,\r\n mimetype?:string,\r\n defaultVirtualViewBox?:VirtualViewBox,\r\n alt?:string\r\n}\r\n\r\nexport interface PromptItem {\r\n type?:string;\r\n itemcode?: string,\r\n prerecording: number,\r\n recduration?: number,\r\n postrecording: number,\r\n recinstructions?: Recinstructions,\r\n mediaitems: Array<Mediaitem>\r\n}\r\n\r\nexport interface Group {\r\n order?:Order;\r\n promptItems: Array<PromptItem>;\r\n _shuffledPromptItems: Array<PromptItem>;\r\n}\r\n\r\nexport interface Section {\r\n mode: Mode;\r\n promptphase: PromptPhase;\r\n order?: Order;\r\n training: boolean;\r\n groups: Array<Group>;\r\n _shuffledGroups: Array<Group>;\r\n}\r\n\r\nexport interface VirtualViewBox{\r\n height:number;\r\n}\r\n\r\nexport interface Script {\r\n virtualViewBox?:VirtualViewBox;\r\n sections: Array<Section>;\r\n}\r\n\r\nexport class PromptDocUtil{\r\n\r\n static toPlainTextString(promptDoc:PromptDoc):string{\r\n let pt=\"\";\r\n let b=promptDoc.body;\r\n if(b!=null) {\r\n let blks=b.blocks\r\n if(blks) {\r\n for(let bli=0;bli<blks.length;bli++){\r\n let blk=blks[bli];\r\n let txts=blk.texts;\r\n for(let ti=0;ti<txts.length;ti++){\r\n let txtEl=txts[ti];\r\n let txt =txtEl.text;\r\n if( txtEl.type === 'font'){\r\n if(typeof txt === 'string'){\r\n pt = pt.concat(<string>txt);\r\n }else{\r\n let subTxtEl=<Text>txt;\r\n let subTxt=subTxtEl.text;\r\n if(typeof subTxt === 'string') {\r\n pt=pt.concat(subTxt);\r\n }\r\n }\r\n }else if(typeof txt === 'string'){\r\n pt = pt.concat(<string>txt);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return pt;\r\n }\r\n}\r\n\r\nexport class MediaitemUtil {\r\n static toPlainTextString(mediaitem: Mediaitem): string|null {\r\n\r\n let txt = mediaitem.text;\r\n let pd = mediaitem.promptDoc;\r\n if (txt == null) {\r\n let pt = null;\r\n if (pd != null) {\r\n pt = PromptDocUtil.toPlainTextString(pd);\r\n }\r\n return pt;\r\n } else {\r\n return txt;\r\n }\r\n }\r\n\r\n static description(mi: Mediaitem): string {\r\n let description = \"\";\r\n\r\n if (mi.alt != null) {\r\n description = description.concat(mi.alt)\r\n } else {\r\n let src = mi.src;\r\n let mimeType = mi.mimetype;\r\n if (!mimeType) {\r\n mimeType = 'text/plain';\r\n }\r\n if (mimeType.startsWith(\"image\")) {\r\n description = description.concat(\"IMAGE: \");\r\n } else if (mimeType.startsWith(\"audio\")) {\r\n description = description.concat(\"AUDIO: \");\r\n } else if (mimeType.startsWith(\"video\")) {\r\n description = description.concat(\"VIDEO: \");\r\n }\r\n let promptText = MediaitemUtil.toPlainTextString(mi);\r\n if (promptText != null) {\r\n description = description.concat(promptText);\r\n } else if (src != null) {\r\n let srcPn;\r\n try {\r\n let srcUrl = new URL(src);\r\n srcPn=srcUrl.pathname;\r\n }catch{\r\n srcPn=src;\r\n }\r\n\r\n // Get filename without extension\r\n let srcFnM=srcPn.match(/([^\\/]*)$/);\r\n if(srcFnM && srcFnM.length==2){\r\n let srcFn=srcFnM[1];\r\n let srcFnNm=srcFn.replace(/[\\.][^\\.]*/,'');\r\n description = description.concat(srcFnNm);\r\n }\r\n }\r\n }\r\n return description;\r\n }\r\n}\r\n\r\nexport class PromptitemUtil {\r\n static toPlainTextString(promptItem: PromptItem): string {\r\n\r\n let mis = promptItem.mediaitems;\r\n let description = \"\";\r\n if (mis) {\r\n\r\n let misSize = mis.length;\r\n for (let i = 0; i < misSize; i++) {\r\n let mi = mis[i];\r\n description = description.concat(MediaitemUtil.description(mi));\r\n if (i + 1 < misSize) {\r\n // not last item\r\n description = description.concat(\", \");\r\n }\r\n }\r\n }\r\n return description;\r\n }\r\n}\r\n\r\n\r\n","import { UUID } from '../utils/utils'\r\nimport {PromptItem} from \"./script/script\";\r\n\r\n\r\nexport class RecordingFileDescriptor {\r\n recording!:PromptItem;\r\n version!:number;\r\n constructor() {}\r\n}\r\n\r\n export class RecordingFile extends RecordingFileDescriptor{\r\n recordingFileId: string | number | null= null;\r\n uuid:string|null=null;\r\n date: string|null=null;\r\n _dateAsDateObj:Date|null=null;\r\n audioBuffer:AudioBuffer|null=null;\r\n session:string|number|null=null;\r\n itemCode:string;\r\n frames:number|null=null;\r\n editSampleRate:number|null=null;\r\n editStartFrame:number|null=null\r\n editEndFrame:number|null=null\r\n\r\n constructor(sessionId:string|number,itemcode:string,version:number,audioBuffer:AudioBuffer|null) {\r\n super()\r\n this.session=sessionId;\r\n this.itemCode=itemcode;\r\n this.version=version;\r\n this.audioBuffer=audioBuffer;\r\n this.uuid=UUID.generate();\r\n }\r\n\r\n filenameString():string{\r\n let fns:string='';\r\n if(this.session){\r\n fns+=this.session;\r\n fns+='_';\r\n }\r\n if(this.itemCode){\r\n fns+=this.itemCode;\r\n fns+='_';\r\n }\r\n fns+=this.uuid;\r\n return fns;\r\n }\r\n }\r\n\r\n","\r\n import {HttpClient, HttpErrorResponse} from \"@angular/common/http\";\r\n import { timeout } from 'rxjs/operators'\r\n\r\n // state of an upload\r\n export enum UploadStatus {IDLE = 1, UPLOADING = 2, ABORT = 3, DONE = 0, ERR = -1}\r\n\r\n // state of the uploader\r\n // TRY_UPLOADING is uploading state after an error (for example if disconnected from server)\r\n export enum UploaderStatus { DONE = 0, UPLOADING = 1, TRY_UPLOADING = 2,NEXT = 3, ERR = -1}\r\n\r\n export class UploaderStatusChangeEvent {\r\n private _sizeQueued:number;\r\n private _sizeDone:number;\r\n private _status: UploaderStatus;\r\n\r\n\r\n constructor(sizeQueued: number, sizeDone: number, status: UploaderStatus) {\r\n this._sizeQueued = sizeQueued;\r\n this._sizeDone = sizeDone;\r\n this._status = status;\r\n }\r\n\r\n get sizeQueued():number {\r\n return this._sizeQueued;\r\n }\r\n\r\n get sizeDone():number {\r\n return this._sizeDone;\r\n }\r\n\r\n get status(): UploaderStatus {\r\n return this._status;\r\n }\r\n\r\n uploadDone(): boolean {\r\n return (this._sizeDone >= this._sizeQueued);\r\n }\r\n\r\n percentDone(): number {\r\n if (this._sizeQueued == 0) {\r\n // no data queued, we are \"done\"\r\n return 100;\r\n }\r\n let percent = Math.floor(this._sizeDone * 100 / this._sizeQueued);\r\n //console.log(\"Upload status: queued: \"+this._sizeQueued+\", done: \"+this._sizeDone+\", \"+percent+\"%\")\r\n return percent;\r\n }\r\n\r\n }\r\n\r\n export class Upload {\r\n\r\n private _data:Blob;\r\n private _url:string;\r\n status: UploadStatus;\r\n\r\n constructor(blob:Blob, url:string) {\r\n this._data = blob;\r\n this._url = url;\r\n this.status = UploadStatus.IDLE;\r\n }\r\n\r\n get url():string {\r\n return this._url;\r\n }\r\n\r\n get data():Blob {\r\n return this._data;\r\n }\r\n\r\n public toString = () : string => {\r\n\r\n return `Upload: Status: ${this.status}, URL: ${this._url}, Size: ${this._data.size}`;\r\n }\r\n }\r\n\r\n export class Uploader {\r\n POST_MIN_TIMEOUT=120000; // 2min plus ...\r\n POST_TIMEOUT_PER_KB=1000; // ... 1s per kB\r\n\r\n RETRY_DELAY: number = 30000; // retry every 30s\r\n DEBUG_DELAY: number = 0;\r\n //DEBUG_DELAY:number=0;\r\n private status: UploaderStatus = UploaderStatus.DONE;\r\n private que:Array<Upload>;\r\n listener: ((ue: UploaderStatusChangeEvent) => void) | null=null;\r\n private _sizeQueued: number = 0;\r\n private _sizeDone: number = 0;\r\n\r\n private retryTimerRunning=false;\r\n private retryTimerId: number|null=null;\r\n\r\n constructor(private http: HttpClient,private withCredentials:boolean=false) {\r\n this.que = new Array<Upload>();\r\n }\r\n\r\n\r\n private uploadDone(ul:Upload) {\r\n\r\n ul.status = UploadStatus.DONE;\r\n\r\n // remove upload from queue\r\n for (let i = 0; i < this.que.length; i++) {\r\n if (this.que[i] === ul) {\r\n // found, remove\r\n this.que.splice(i, 1);\r\n let ulSize = ul.data.size;\r\n this._sizeDone += ulSize;\r\n break;\r\n }\r\n }\r\n // set to done for now...\r\n this.status = UploaderStatus.NEXT;\r\n // continue\r\n this.process();\r\n }\r\n\r\n private startUpload(ul:Upload) {\r\n\r\n ul.status = UploadStatus.UPLOADING;\r\n if (UploaderStatus.ERR === this.status) {\r\n this.status = UploaderStatus.TRY_UPLOADING;\r\n } else {\r\n this.status = UploaderStatus.UPLOADING;\r\n }\r\n\r\n let dSize=ul.data.size\r\n let timeoutForDataSize=dSize*this.POST_TIMEOUT_PER_KB/1000;\r\n let timeoVal:number=Math.round(this.POST_MIN_TIMEOUT+timeoutForDataSize)\r\n // pipe(timeout()) is not the same as xhr.timeout\r\n\r\n let uploadedUpload:Upload|null=null;\r\n //console.debug(\"Post upload: \"+ul)\r\n this.http.post(ul.url,ul.data,{withCredentials:this.withCredentials}).pipe(timeout(timeoVal)).subscribe(\r\n data => {\r\n uploadedUpload = ul;\r\n //console.debug('Next method called for upload: '+uploadedUpload)\r\n },(err: HttpErrorResponse) => {\r\n if (err.error instanceof Error) {\r\n // A client-side or network error occurred. Handle it accordingly.\r\n console.error('Upload error occurred:', err.error.message);\r\n } else {\r\n // The backend returned an unsuccessful response code.\r\n // The response body may contain clues as to what went wrong,\r\n console.error(`Upload error: Server returned code ${err.status}`);\r\n }\r\n this.processError(ul)\r\n },()=>{\r\n //console.debug('Upload complete method called')\r\n if(uploadedUpload) {\r\n if (this.DEBUG_DELAY>0) {\r\n window.setTimeout(() => {\r\n this.uploadDone(ul);\r\n }, this.DEBUG_DELAY);\r\n } else {\r\n this.uploadDone(uploadedUpload)\r\n }\r\n }else{\r\n console.error('Upload post complete, but upload not set in next method!')\r\n }\r\n });\r\n }\r\n\r\n private processError(ul:Upload) {\r\n //console.debug(\"Process upload error...\")\r\n ul.status=UploadStatus.ERR\r\n this.status = UploaderStatus.ERR;\r\n\r\n let ue = new UploaderStatusChangeEvent(this._sizeQueued, this._sizeDone, this.status);\r\n if (this.listener) {\r\n this.listener(ue);\r\n }\r\n\r\n // set retry timer\r\n this.retryTimerId=window.setTimeout(() => {\r\n this.retryTimerRunning=false;\r\n //console.debug(\"Upload retry timer exprired. Continue processing...\")\r\n this.process();\r\n }, this.RETRY_DELAY);\r\n\r\n this.retryTimerRunning=true;\r\n //console.debug(\"Started upload retry timer \"+this.RETRY_DELAY+\"ms ...\")\r\n }\r\n\r\n private process() {\r\n // clear retry timer if set\r\n if(this.retryTimerRunning){\r\n if(this.retryTimerId) {\r\n window.clearTimeout(this.retryTimerId)\r\n }\r\n this.retryTimerRunning=false\r\n //console.debug(\"Cleared retry timer.\")\r\n }\r\n\r\n let pul: Upload | null = null;\r\n\r\n //console.debug(\"Uploader status: \"+this.status)\r\n\r\n let s = this.que.length;\r\n //console.debug(s+\" uploads are in the queue.\")\r\n\r\n if (s>0 && UploaderStatus.UPLOADING != this.status && UploaderStatus.TRY_UPLOADING != this.status) {\r\n\r\n for (let i = 0; i < s; i++) {\r\n let ul = this.que[i];\r\n //console.log(\"Upload \"+ul+\" status:\"+ul.status)\r\n if (ul.status === UploadStatus.IDLE) {\r\n //console.log(\"Upload \"+ul+\" startUpload\")\r\n this.startUpload(ul);\r\n pul = ul;\r\n break;\r\n }\r\n }\r\n if (!pul) {\r\n //console.log(\"Check ERR uploads...\")\r\n // now failed uploads\r\n //console.debug(\"No regular upload found. Looking for error state uploads.\")\r\n for (let i = 0; i < s; i++) {\r\n let ul = this.que[i];\r\n //console.log(\"Upload \"+ul+\" status:\"+ul.status)\r\n if (ul.status === UploadStatus.ERR) {\r\n //console.log(\"Upload (ERR) \"+ul+\" startUpload\")\r\n //console.debug(\"Start error state upload \"+ul)\r\n this.startUpload(ul);\r\n pul = ul;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if(s==0){\r\n //console.debug(\"Upload done.\")\r\n this.status=UploaderStatus.DONE\r\n }\r\n let ue = new UploaderStatusChangeEvent(this._sizeQueued, this._sizeDone, this.status);\r\n if (this.listener) {\r\n this.listener(ue);\r\n }\r\n }\r\n\r\n queueUpload(ul: Upload) {\r\n if (ul) {\r\n let ulSize = ul.data.size;\r\n this.que.push(ul);\r\n this._sizeQueued += ulSize;\r\n this.process();\r\n }\r\n }\r\n }\r\n\r\n\r\n","import {Injectable, InjectionToken} from \"@angular/core\";\r\n\r\nexport const SPEECHRECORDER_CONFIG = new InjectionToken<SpeechRecorderConfig>('speechrecorder.config');\r\n\r\n\r\nexport enum ApiType {\r\n NORMAL,FILES\r\n}\r\n@Injectable()\r\nexport class SpeechRecorderConfig{\r\n apiEndPoint?: string | null=null;\r\n apiType?: ApiType | null=null;\r\n withCredentials?: boolean=false;\r\n enableDownloadRecordings?: boolean=false;\r\n enableUploadRecordings?: boolean=true;\r\n constructor(){\r\n this.apiEndPoint=null;\r\n this.apiType=null;\r\n this.withCredentials=false;\r\n }\r\n}\r\n\r\n","/**\r\n * Created by klausj on 17.06.2017.\r\n */\r\nimport {Inject, Injectable} from '@angular/core';\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {ApiType, SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../../spr.config\";\r\nimport {Project} from \"./project\";\r\nimport {UUID} from \"../../utils/utils\";\r\nimport {Observable} from \"rxjs\";\r\nimport {PlatformLocation} from \"@angular/common\";\r\n\r\n\r\n\r\n@Injectable()\r\nexport class ProjectService {\r\n public static readonly PROJECT_API_CTX='project'\r\n private projectCtxUrl:string;\r\n private withCredentials:boolean=false;\r\n\r\n constructor(private http:HttpClient,private platformLoaction:PlatformLocation,@Inject(SPEECHRECORDER_CONFIG) private config?:SpeechRecorderConfig) {\r\n\r\n console.log(\"Base Href: \"+platformLoaction.getBaseHrefFromDOM());\r\n\r\n let apiEndPoint = ''\r\n\r\n if(config && config.apiEndPoint) {\r\n apiEndPoint=config.apiEndPoint;\r\n }\r\n if(apiEndPoint !== ''){\r\n apiEndPoint=apiEndPoint+'/'\r\n }\r\n if(config!=null && config.withCredentials!=null){\r\n this.withCredentials=config.withCredentials;\r\n }\r\n\r\n this.projectCtxUrl = apiEndPoint + ProjectService.PROJECT_API_CTX;\r\n\r\n }\r\n\r\n private appendRequestUUIDForDevelopmentServer(url:string):string{\r\n let resUrl=url;\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n resUrl = resUrl + '.json?requestUUID='+UUID.generate();\r\n }\r\n return resUrl\r\n }\r\n\r\n projectUrl(id:string):string{\r\n let encPrjId=encodeURIComponent(id);\r\n return this.appendRequestUUIDForDevelopmentServer(this.projectCtxUrl + '/' + encPrjId);\r\n }\r\n\r\n projectResourceUrl(projectId: string,relResourcePath:string):string{\r\n let encPrjId=encodeURIComponent(projectId);\r\n // Use encodeURI here since the relatice resource path from recording scripts is already a URI\r\n // encodeURIComponent function would encode the slashes and fetching the resource would fail\r\n let encRelResPath=encodeURI(relResourcePath);\r\n return this.projectCtxUrl + '/' + encPrjId +'/'+encRelResPath;\r\n }\r\n\r\n projectObservable(id:string):Observable<Project>{\r\n let prjUrl=this.projectUrl(id);\r\n return this.http.get<Project>(prjUrl,{withCredentials: this.withCredentials})\r\n }\r\n\r\n}\r\n\r\n\r\n","import {Inject, Injectable} from '@angular/core';\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {ApiType, SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../../spr.config\";\r\nimport {Session} from \"./session\";\r\nimport {UUID} from \"../../utils/utils\";\r\nimport {Observable} from \"rxjs\";\r\nimport {ProjectService} from \"../project/project.service\";\r\n\r\n\r\n\r\n@Injectable()\r\nexport class SessionService {\r\n get uploadCount(): number {\r\n return this._uploadCount;\r\n }\r\n public static readonly SESSION_API_CTX='session';\r\n private apiEndPoint='';\r\n private sessionsUrl:string;\r\n private withCredentials:boolean=false;\r\n private _uploadCount=0;\r\n\r\n constructor(private http:HttpClient,@Inject(SPEECHRECORDER_CONFIG) private config?:SpeechRecorderConfig) {\r\n\r\n if(config && config.apiEndPoint) {\r\n this.apiEndPoint=config.apiEndPoint;\r\n }\r\n if(this.apiEndPoint !== ''){\r\n this.apiEndPoint=this.apiEndPoint+'/'\r\n }\r\n if(config!=null && config.withCredentials!=null){\r\n this.withCredentials=config.withCredentials;\r\n }\r\n this.sessionsUrl = this.apiEndPoint + SessionService.SESSION_API_CTX;\r\n }\r\n\r\n sessionObserver(id: string): Observable<Session> {\r\n\r\n let sessUrl = this.sessionsUrl + '/' + id;\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n sessUrl = sessUrl + '.json?requestUUID='+UUID.generate();\r\n }\r\n return this.http.get<Session>(sessUrl,{ withCredentials: this.withCredentials });\r\n\r\n }\r\n\r\n patchSessionObserver(session:Session,body:any): Observable<Session> {\r\n\r\n let sesssUrl = this.apiEndPoint + ProjectService.PROJECT_API_CTX + '/' + session.project + '/' + SessionService.SESSION_API_CTX + '/' + session.sessionId\r\n\r\n let wrapObs = new Observable<Session>(subscriber => {\r\n this._uploadCount++;\r\n let obs = this.http.patch<Session>(sesssUrl, body, {withCredentials: this.withCredentials});\r\n obs.subscribe((value) => {\r\n subscriber.next(value);\r\n }, error => {\r\n this._uploadCount--;\r\n subscriber.error(error);\r\n }, () => {\r\n this._uploadCount--;\r\n subscriber.complete();\r\n });\r\n });\r\n return wrapObs;\r\n }\r\n\r\n // putSessionObserver(session: Session): Observable<Session> {\r\n //\r\n // let sesssUrl = this.apiEndPoint + ProjectService.PROJECT_API_CTX + '/' + session.project + '/' + SessionService.SESSION_API_CTX + '/' + session.session\r\n //\r\n // let wrapObs = new Observable<Session>(subscriber => {\r\n // this._uploadCount++;\r\n // let obs = this.http.put<Session>(sesssUrl, session, {withCredentials: this.withCredentials});\r\n // obs.subscribe((value) => {\r\n // subscriber.next(value);\r\n // }, error => {\r\n // this._uploadCount--;\r\n // subscriber.error(error);\r\n // }, () => {\r\n // this._uploadCount--;\r\n // subscriber.complete();\r\n // });\r\n // });\r\n // return wrapObs;\r\n // }\r\n //\r\n\r\n\r\n}\r\n\r\n\r\n\r\n","import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, HostListener, Input, ViewChild} from \"@angular/core\"\r\nimport {LevelInfo, LevelInfos, LevelListener} from \"../dsp/level_measure\";\r\n\r\nexport const DEFAULT_WARN_DB_LEVEL = -2;\r\nexport const MIN_DB_LEVEL = -60.0;\r\nexport const CONSIDERED_SILENCE_DB_LEVEL = MIN_DB_LEVEL*2;\r\nexport const LINE_WIDTH = 2;\r\nexport const LINE_DISTANCE = 2;\r\nexport const LEVEL_INDICATOR_HEIGHT=3;\r\n\r\nexport const OVERFLOW_THRESHOLD = 0.25;\r\nexport const OVERFLOW_INCR_FACTOR = 0.5;\r\n\r\n\r\n@Component({\r\n\r\n selector: 'audio-levelbar',\r\n template: `\r\n <div #virtualCanvas>\r\n <canvas #levelbar></canvas>\r\n <canvas #markerCanvas></canvas>\r\n </div>\r\n `,\r\n styles: [`:host {\r\n\r\n width: 100%;\r\n background: darkgray;\r\n box-sizing: border-box;\r\n height: 100%;\r\n position: relative;\r\n overflow-x: scroll;\r\n overflow-y: auto;\r\n }`, `div {\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n\r\n /*position: absolute;*/\r\n box-sizing: border-box;\r\n }`, `canvas {\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n }`]\r\n\r\n})\r\nexport class LevelBar implements LevelListener,AfterViewInit {\r\n\r\n @ViewChild('virtualCanvas', { static: true }) virtualCanvasRef!: ElementRef;\r\n virtualCanvas!: HTMLDivElement;\r\n @ViewChild('levelbar', { static: true }) liveLevelCanvasRef!: ElementRef;\r\n liveLevelCanvas!: HTMLCanvasElement;\r\n @ViewChild('markerCanvas', { static: true }) markerCanvasRef!: ElementRef;\r\n markerCanvas!: HTMLCanvasElement;\r\n ce!: HTMLDivElement;\r\n dbValues: Array<Array<number>>;\r\n peakDbLvl = MIN_DB_LEVEL;\r\n private _streamingMode = false;\r\n private _staticLevelInfos: LevelInfos | null = null;\r\n private _playFramePosition: number|null=null;\r\n\r\n warnDBLevel = DEFAULT_WARN_DB_LEVEL;\r\n\r\n constructor(private ref: ElementRef, private changeDetectorRef: ChangeDetectorRef) {\r\n this.dbValues = new Array<Array<number>>();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.ce = this.ref.nativeElement;\r\n this.liveLevelCanvas = this.liveLevelCanvasRef.nativeElement;\r\n this.markerCanvas = this.markerCanvasRef.nativeElement;\r\n this.markerCanvas.style.zIndex = '4';\r\n this.virtualCanvas = this.virtualCanvasRef.nativeElement;\r\n this.layout();\r\n this.drawAll();\r\n }\r\n\r\n\r\n @HostListener('scroll', ['$event'])\r\n onScroll(se: Event) {\r\n setTimeout(()=>{\r\n this.updateViewportPosition();\r\n this.drawAll();\r\n this.drawPlayPosition();\r\n });\r\n }\r\n\r\n private updateViewportPosition(){\r\n // Move canvases to visible viewport position\r\n let viewPortStyleLeft=this.ce.scrollLeft + 'px';\r\n this.liveLevelCanvas.style.left = viewPortStyleLeft;\r\n this.markerCanvas.style.left = viewPortStyleLeft;\r\n }\r\n\r\n @Input()\r\n set streamingMode(streamingMode: boolean) {\r\n if (this._streamingMode !== streamingMode) {\r\n this._streamingMode = streamingMode;\r\n this.reset();\r\n this.layoutStatic();\r\n }\r\n }\r\n\r\n @Input()\r\n set displayLevelInfos(levelInfos: LevelInfos | null) {\r\n this._staticLevelInfos = levelInfos;\r\n if (levelInfos) {\r\n\r\n this.dbValues = levelInfos.bufferLevelInfos.map((li) => {\r\n return li.powerLevelsDB()\r\n });\r\n } else {\r\n this.dbValues = new Array<Array<number>>();\r\n }\r\n this.layoutStatic();\r\n }\r\n\r\n set channelCount(channelCount: number) {\r\n this.reset();\r\n }\r\n\r\n set playFramePosition(playFramePosition: number) {\r\n this._playFramePosition = playFramePosition;\r\n this.drawPlayPosition();\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event: Event) {\r\n\r\n this.layout();\r\n this.drawAll();\r\n }\r\n\r\n layout() {\r\n\r\n // set Canvas size to viewport size\r\n this.liveLevelCanvas.width = this.ce.offsetWidth;\r\n this.liveLevelCanvas.height = this.ce.offsetHeight;\r\n\r\n this.markerCanvas.width = this.ce.offsetWidth;\r\n this.markerCanvas.height = this.ce.offsetHeight;\r\n\r\n // and move to viewport position\r\n this.updateViewportPosition();\r\n\r\n this.drawAll();\r\n this.drawPlayPosition();\r\n }\r\n\r\n update(levelInfos: LevelInfo) {\r\n if (this._streamingMode) {\r\n let dbVals = levelInfos.powerLevelsDB();\r\n let peakDBVal = levelInfos.powerLevelDB();\r\n if (this.peakDbLvl < peakDBVal) {\r\n this.peakDbLvl = peakDBVal;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n this.dbValues.push(dbVals);\r\n let i = this.dbValues.length - 1;\r\n let x = i * (LINE_DISTANCE + LINE_WIDTH);\r\n this.drawPushValue(x, dbVals);\r\n this.checkWidth();\r\n }\r\n }\r\n\r\n streamFinished() {\r\n this.layoutStatic();\r\n }\r\n\r\n private layoutStatic() {\r\n\r\n let requiredWidth = Math.round(this.dbValues.length * (LINE_DISTANCE + LINE_WIDTH));\r\n if (this.virtualCanvas && this.ce) {\r\n\r\n this.virtualCanvas.style.width = requiredWidth + 'px';\r\n this.ce.scrollLeft = requiredWidth - this.ce.offsetWidth;\r\n this.layout();\r\n }\r\n\r\n }\r\n\r\n private checkWidth() {\r\n let requiredWidth = this.dbValues.length * (LINE_DISTANCE + LINE_WIDTH);\r\n if (this.virtualCanvas.offsetWidth - requiredWidth < this.ce.offsetWidth * OVERFLOW_THRESHOLD) {\r\n let newWidth = Math.floor(this.virtualCanvas.offsetWidth + (this.ce.offsetWidth * OVERFLOW_INCR_FACTOR));\r\n this.virtualCanvas.style.width = newWidth + 'px';\r\n this.ce.scrollLeft = newWidth - this.ce.offsetWidth;\r\n\r\n // do not call layout here it is triggered by the scroll event\r\n //this.layout();\r\n }\r\n }\r\n\r\n reset() {\r\n this.peakDbLvl = MIN_DB_LEVEL;\r\n this.dbValues = new Array<Array<number>>();\r\n this.layout();\r\n this.drawAll();\r\n this.drawPlayPosition();\r\n }\r\n\r\n private drawLevelBackground(g: CanvasRenderingContext2D, x: number, h: number){\r\n g.strokeStyle = 'black';\r\n g.fillStyle = 'black';\r\n g.fillRect(x,0,LINE_WIDTH+LINE_DISTANCE,h)\r\n }\r\n\r\n // private drawLevelLine(g: CanvasRenderingContext2D, x: number, h: number, dbVal: number) {\r\n // //translate to viewport\r\n // let xc = x - this.ce.scrollLeft;\r\n //\r\n // this.drawLevelBackground(g,xc,h);\r\n // g.lineWidth = LINE_WIDTH;\r\n // if (dbVal >= this.warnDBLevel) {\r\n // g.strokeStyle = 'red';\r\n // g.fillStyle = 'red';\r\n //\r\n // } else {\r\n // g.strokeStyle = '#00c853';\r\n // g.fillStyle = '#00c853';\r\n // }\r\n // g.beginPath();\r\n // g.moveTo(xc, h);\r\n // let pVal = ((dbVal - MIN_DB_LEVEL) / -MIN_DB_LEVEL) * h;\r\n //\r\n // g.lineTo(xc, h - pVal);\r\n // g.closePath();\r\n // g.stroke();\r\n //\r\n // }\r\n\r\n private drawLevelLines(g: CanvasRenderingContext2D, x: number, h: number, dbVals: Array<number>) {\r\n //translate to viewport\r\n let xc = x - this.ce.scrollLeft;\r\n this.drawLevelBackground(g,xc,h);\r\n\r\n let chH = Math.floor(h / dbVals.length);\r\n g.lineWidth = LINE_WIDTH;\r\n for (let ch = 0; ch < dbVals.length; ch++) {\r\n let dbVal = dbVals[ch];\r\n\r\n let y = Math.floor(ch * chH);\r\n if (dbVal >= this.warnDBLevel) {\r\n g.strokeStyle = 'red';\r\n g.fillStyle = 'red';\r\n } else if(dbVal < CONSIDERED_SILENCE_DB_LEVEL) {\r\n g.strokeStyle='grey';\r\n g.fillStyle='grey'\r\n } else{\r\n g.strokeStyle = '#00c853';\r\n g.fillStyle = '#00c853'\r\n }\r\n g.beginPath();\r\n g.moveTo(xc, y + chH);\r\n g.lineTo(xc, y + chH - LEVEL_INDICATOR_HEIGHT);\r\n let pnVal=((dbVal - MIN_DB_LEVEL) / -MIN_DB_LEVEL);\r\n let lvlIndicatorSpace=LEVEL_INDICATOR_HEIGHT+LINE_DISTANCE;\r\n let levelH=chH-lvlIndicatorSpace;\r\n let pVal = pnVal * levelH;\r\n if(pVal>levelH-1){\r\n pVal=levelH-1\r\n }else if(pVal<0){\r\n pVal=0\r\n }\r\n g.moveTo(xc, y + chH - lvlIndicatorSpace );\r\n g.lineTo(xc, y + chH - lvlIndicatorSpace - pVal);\r\n g.closePath();\r\n g.stroke();\r\n }\r\n }\r\n\r\n private drawPushValue(x: number, dbVals: Array<number>) {\r\n\r\n if (this.liveLevelCanvas) {\r\n let h = this.liveLevelCanvas.height;\r\n let g = this.liveLevelCanvas.getContext(\"2d\");\r\n if (g) {\r\n this.drawLevelLines(g, x, h, dbVals);\r\n }\r\n }\r\n }\r\n\r\n private drawAll() {\r\n if (this.liveLevelCanvas) {\r\n let w = this.liveLevelCanvas.width;\r\n let h = this.liveLevelCanvas.height;\r\n let g = this.liveLevelCanvas.getContext(\"2d\");\r\n if (g) {\r\n // clear canvas\r\n g.fillStyle = 'grey';\r\n g.fillRect(0, 0, w, h);\r\n\r\n g.lineWidth = LINE_WIDTH;\r\n\r\n if (this.dbValues.length > 0) {\r\n // draw only viewport part:\r\n\r\n // draw from x1 to x2\r\n let x1 = this.ce.scrollLeft;\r\n let x2 = x1 + this.ce.offsetWidth;\r\n\r\n // corresponds to this level values:\r\n let i1 = Math.floor(x1 / (LINE_DISTANCE + LINE_WIDTH));\r\n let i2 = Math.ceil(x2 / (LINE_DISTANCE + LINE_WIDTH));\r\n // some values around\r\n i1 -= 2;\r\n i2 += 2;\r\n // limits\r\n if (i1 < 0) {\r\n i1 = 0;\r\n }\r\n if (i2 > this.dbValues.length) {\r\n i2 = this.dbValues.length;\r\n }\r\n\r\n var c=0;\r\n for (let i = i1; i < i2; i++) {\r\n let x = i * (LINE_DISTANCE + LINE_WIDTH);\r\n let dbVals = this.dbValues[i];\r\n if (dbVals) {\r\n this.drawLevelLines(g, x, h, dbVals);\r\n c++;\r\n }\r\n\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n\r\n private framesPerPixel(): number | null {\r\n // one buffer\r\n if (this._staticLevelInfos) {\r\n let framesPerBuffer = this._staticLevelInfos.framesPerBuffer();\r\n let pixelsPerBuffer = LINE_DISTANCE + LINE_WIDTH;\r\n\r\n return framesPerBuffer / pixelsPerBuffer;\r\n }\r\n return null;\r\n }\r\n\r\n\r\n private drawPlayPosition() {\r\n if (this.markerCanvas) {\r\n let w = this.markerCanvas.width;\r\n let h = this.markerCanvas.height;\r\n let g = this.markerCanvas.getContext(\"2d\");\r\n if (g) {\r\n g.clearRect(0, 0, w, h);\r\n let framesPerPixel = this.framesPerPixel();\r\n if (framesPerPixel && this._playFramePosition) {\r\n let x = this._playFramePosition / framesPerPixel;\r\n\r\n // Get position in viewport\r\n let xc = x - this.ce.scrollLeft;\r\n // Only draw if inside marker (viewport) canvas\r\n if(xc>=0 && xc<=w) {\r\n g.fillStyle = 'red';\r\n g.strokeStyle = 'red';\r\n g.lineWidth = LINE_WIDTH;\r\n g.beginPath();\r\n // paint over all channels\r\n g.moveTo(xc, 0);\r\n g.lineTo(xc, h);\r\n g.closePath();\r\n g.stroke();\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n}\r\n","import {\r\n ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnDestroy, Output,\r\n ViewChild\r\n} from \"@angular/core\"\r\nimport {LevelInfo, LevelInfos, LevelListener} from \"../audio/dsp/level_measure\";\r\nimport {LevelBar} from \"../audio/ui/livelevel\";\r\nimport {Action} from \"../action/action\";\r\n\r\n\r\nexport const MIN_DB_LEVEL = -40.0;\r\nexport const DEFAULT_WARN_DB_LEVEL = -2;\r\n\r\n@Component({\r\n selector: 'spr-recordingitemcontrols',\r\n template: `\r\n <button matTooltip=\"Start playback\" (click)=\"playStartAction?.perform()\"\r\n [disabled]=\"playStartAction?.disabled\"\r\n [style.color]=\"playStartAction?.disabled ? 'grey' : 'green'\">\r\n <mat-icon>play_arrow</mat-icon>\r\n </button>\r\n <button matTooltip=\"Stop playback\" (click)=\"playStopAction?.perform()\"\r\n [disabled]=\"playStopAction?.disabled\"\r\n [style.color]=\"playStopAction?.disabled ? 'grey' : 'yellow'\">\r\n <mat-icon>stop</mat-icon>\r\n </button>\r\n <button fxHide.xs matTooltip=\"Toggle detailed audio display\" [disabled]=\"!audioLoaded\"\r\n (click)=\"showRecordingDetails()\">\r\n <mat-icon>{{(audioSignalCollapsed) ? \"expand_less\" : \"expand_more\"}}</mat-icon>\r\n </button>\r\n <button matTooltip=\"Download current recording\" *ngIf=\"enableDownload\" [disabled]=\"!audioLoaded\"\r\n (click)=\"downloadRecording()\">\r\n <mat-icon>file_download</mat-icon>\r\n </button>\r\n <div style=\"min-width: 14ch;padding:2px\"><table style=\"border-style: none\"><tr><td>Peak:</td><td><span matTooltip=\"Peak level\"\r\n [style.color]=\"(peakDbLvl > warnDbLevel)?'red':'black'\">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>\r\n <tr *ngIf=\"_agc\"><td>AGC:</td><td><span matTooltip=\"Auto gain control\">{{agcString}}</span></td></tr></table></div>\r\n `,\r\n styles: [`:host {\r\n flex: 0; /* only required vertical space */\r\n width: 100%;\r\n background: darkgray;\r\n padding: 4px;\r\n box-sizing: border-box;\r\n height: 100%;\r\n\r\n display: flex; /* flex container: left level bar, right decimal peak level value */\r\n flex-direction: row;\r\n flex-wrap: nowrap; /* wrap could completely destroy the layout */\r\n }`, `span {\r\n flex: 0;\r\n font-weight: bold;\r\n display: inline-block;\r\n white-space: nowrap;\r\n box-sizing: border-box;\r\n }`]\r\n\r\n})\r\nexport class RecordingItemControls implements OnDestroy {\r\n\r\n ce: HTMLDivElement|null=null;\r\n @Input() audioSignalCollapsed: boolean=true;\r\n private _displayAudioBuffer: AudioBuffer | null|undefined;\r\n @Input() enableDownload: boolean=false;\r\n\r\n @Input() peakDbLvl = MIN_DB_LEVEL;\r\n\r\n _displayLevelInfos: LevelInfos | null=null;\r\n\r\n _agc:boolean|null|undefined=undefined;\r\n agcString='n/a';\r\n\r\n @Input() set agc(agc:boolean|null|undefined){\r\n this._agc=agc;\r\n if(this._agc===undefined || this._agc===null){\r\n this.agcString='n/a';\r\n }else{\r\n if(this._agc===true){\r\n this.agcString='On';\r\n }else{\r\n this.agcString='Off';\r\n }\r\n }\r\n }\r\n\r\n @Output() onShowRecordingDetails: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() onDownloadRecording: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n @Input() audioLoaded=false;\r\n //@Input() controlAudioPlayer: AudioPlayer;\r\n @Input() playStartAction:Action<void>|undefined;\r\n @Input() playStopAction:Action<void>|undefined;\r\n playStartEnabled = false;\r\n playStopEnabled = false;\r\n private updateTimerId: number|null=null;\r\n\r\n private destroyed = false;\r\n\r\n warnDbLevel = DEFAULT_WARN_DB_LEVEL;\r\n\r\n constructor(private ref: ElementRef, private changeDetectorRef: ChangeDetectorRef) {\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroyed = true;\r\n }\r\n\r\n showRecordingDetails() {\r\n this.onShowRecordingDetails.emit();\r\n }\r\n\r\n downloadRecording() {\r\n this.onDownloadRecording.emit();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.ce = this.ref.nativeElement;\r\n }\r\n\r\n @Input()\r\n set displayLevelInfos(levelInfos: LevelInfos | null) {\r\n this._displayLevelInfos = levelInfos;\r\n }\r\n\r\n error() {\r\n // this.status = 'ERROR';\r\n }\r\n\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'spr-recordingitemdisplay',\r\n template: `\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" [ngStyle]=\"{'height.px':100,'min-height.px': 100}\" [ngStyle.xs]=\"{'height.px':125,'min-height.px': 125}\">\r\n <audio-levelbar fxFlex=\"1 0 1\" [streamingMode]=\"streamingMode\" [displayLevelInfos]=\"_displayLevelInfos\"></audio-levelbar>\r\n <spr-recordingitemcontrols fxFlex=\"0 0 0\" [audioLoaded]=\"displayAudioBuffer!==null\" [playStartAction]=\"playStartAction\" [playStopAction]=\"playStopAction\" [peakDbLvl]=\"peakDbLvl\" [agc]=\"_agc\" (onShowRecordingDetails)=\"onShowRecordingDetails.emit()\"></spr-recordingitemcontrols>\r\n </div>\r\n `,\r\n styles: [`div {\r\n width: 100%;\r\n background: darkgray;\r\n padding: 4px;\r\n box-sizing: border-box;\r\n flex-wrap: nowrap; /* wrap could completely destroy the layout */\r\n }`, `audio-levelbar {\r\n box-sizing: border-box;\r\n }`]\r\n\r\n})\r\nexport class RecordingItemDisplay implements LevelListener, OnDestroy {\r\n\r\n ce: HTMLDivElement|null=null;\r\n @ViewChild(LevelBar, { static: true }) liveLevel!: LevelBar;\r\n @Input() streamingMode: boolean=false;\r\n @Input() audioSignalCollapsed: boolean=true;\r\n private _displayAudioBuffer: AudioBuffer | null|undefined;\r\n @Input() enableDownload: boolean=false;\r\n\r\n peakDbLvl = MIN_DB_LEVEL;\r\n\r\n _displayLevelInfos: LevelInfos | null=null;\r\n\r\n _agc:boolean|null|undefined=undefined;\r\n agcString='n/a';\r\n\r\n @Input() set agc(agc:boolean|null|undefined){\r\n this._agc=agc;\r\n }\r\n\r\n @Output() onShowRecordingDetails: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() onDownloadRecording: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n //@Input() controlAudioPlayer: AudioPlayer;\r\n @Input() playStartAction:Action<void>|undefined;\r\n @Input() playStopAction:Action<void>|undefined;\r\n playStartEnabled = false;\r\n playStopEnabled = false;\r\n private updateTimerId: number|null=null;\r\n\r\n private destroyed = false;\r\n\r\n warnDbLevel = DEFAULT_WARN_DB_LEVEL;\r\n\r\n constructor(private ref: ElementRef, private changeDetectorRef: ChangeDetectorRef) {\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroyed = true;\r\n }\r\n\r\n\r\n @Input()\r\n set displayAudioBuffer(displayAudioBuffer: AudioBuffer | null| undefined) {\r\n this._displayAudioBuffer = displayAudioBuffer;\r\n }\r\n\r\n get displayAudioBuffer() {\r\n return this._displayAudioBuffer;\r\n }\r\n\r\n showRecordingDetails() {\r\n this.onShowRecordingDetails.emit();\r\n }\r\n\r\n downloadRecording() {\r\n this.onDownloadRecording.emit();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.ce = this.ref.nativeElement;\r\n //this.controlAudioPlayer.listener=this;\r\n }\r\n\r\n @Input()\r\n set displayLevelInfos(levelInfos: LevelInfos | null) {\r\n this._displayLevelInfos = levelInfos;\r\n }\r\n\r\n set channelCount(channelCount: number) {\r\n this.reset();\r\n this.liveLevel.channelCount = channelCount;\r\n }\r\n\r\n set playFramePosition(playFramePosition: number) {\r\n this.liveLevel.playFramePosition=playFramePosition;\r\n }\r\n\r\n update(levelInfo: LevelInfo, peakLevelInfo: LevelInfo) {\r\n let peakDBVal = levelInfo.powerLevelDB();\r\n if (this.peakDbLvl < peakDBVal) {\r\n this.peakDbLvl = peakDBVal;\r\n // the event comes from outside of an Angular zone\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n this.liveLevel.update(levelInfo);\r\n }\r\n\r\n error() {\r\n // this.status = 'ERROR';\r\n }\r\n\r\n streamFinished() {\r\n this.liveLevel.streamFinished();\r\n }\r\n\r\n reset() {\r\n this.peakDbLvl = MIN_DB_LEVEL;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n\r\n}\r\n","\n export class DSPUtils {\n\n private static OCTAVE_FACTOR: number = 1.0 / (Math.log(2) / Math.log(10));\n\n /**\n * Get normalized amplitude level in dB\n * @param linearLevel a normalized positive linear level (1.0 corresponds to 0dB)\n * @return level in dB\n */\n public static toLevelInDB(linearLevel: number): number {\n if (linearLevel < 0) {\n throw new RangeError('Linear level argument must be positive.');\n }\n\n return 10 * Math.log(linearLevel) / Math.log(10);\n }\n\n\n public static toLinearLevel(dbLevel: number): number {\n return Math.pow(10, (dbLevel / 10));\n }\n\n /**\n * Get normalized amplitude power level in dB\n * @param linearLevel a normalized positive linear level (1.0 corresponds to 0dB)\n * @return power level in dB\n */\n public static toPowerLevelInDB(linearLevel: number): number {\n if (linearLevel < 0) {\n throw new RangeError('Linear level argument must be positive.');\n }\n return 20 * Math.log(linearLevel) / Math.log(10);\n }\n\n public static toPowerLinearLevel(dbLevel: number): number {\n return Math.pow(10, (dbLevel / 20));\n }\n\n public static toOctaves(fq: number): number {\n return DSPUtils.OCTAVE_FACTOR * Math.log(fq) / Math.log(10);\n }\n\n public static maxLevel(audioBuffer: AudioBuffer): number {\n let ml = 0.0;\n for (let ch = 0; ch < audioBuffer.numberOfChannels; ch++) {\n const chArr = audioBuffer.getChannelData(ch);\n for (let s = 0; s < chArr.length; s++) {\n const l = Math.abs(chArr[s]);\n if (l > ml) {\n ml = l;\n }\n }\n }\n return ml;\n }\n\n }\n","import {DSPUtils} from \"../../dsp/utils\";\r\nimport {SequenceAudioFloat32OutStream} from \"../io/stream\";\r\nimport {Arrays, WorkerHelper} from \"../../utils/utils\";\r\n\r\nexport const MIN_DB_LEVEL = -40.0;\r\n\r\n\r\n\r\nexport class LevelInfo {\r\n\r\n private readonly _minLinLevels: Array<number>;\r\n private readonly _maxLinLevels: Array<number>;\r\n\r\n constructor(public readonly channelCount: number,\r\n public startFrame: number = 0,\r\n public frameLength: number = 0,\r\n minLinLevels?: Array<number>,\r\n maxLinLevels?: Array<number>) {\r\n this._minLinLevels = this.checkOrInitArray(minLinLevels);\r\n this._maxLinLevels = this.checkOrInitArray(maxLinLevels);\r\n }\r\n\r\n get minLinLevels() {\r\n return this._minLinLevels;\r\n }\r\n\r\n get maxLinLevels() {\r\n return this._maxLinLevels;\r\n }\r\n\r\n private checkOrInitArray(arr: Array<number> | undefined): Array<number> {\r\n if (arr) {\r\n if (arr.length !== this.channelCount)\r\n throw new Error(\"Level arrays must be equal to channel count \" + this.channelCount);\r\n return arr;\r\n } else {\r\n return new Array<number>(this.channelCount)\r\n }\r\n }\r\n\r\n merge(levelInfo: LevelInfo) {\r\n if (levelInfo === null) {\r\n return;\r\n }\r\n if (this.channelCount !== levelInfo.channelCount) {\r\n throw new Error(\"Channel count of level info to merge must be equal. (\" + this.channelCount + \" != \" + levelInfo.channelCount + \")\");\r\n }\r\n\r\n let endFrame = this.startFrame + this.frameLength;\r\n let mergeEndFrame = levelInfo.startFrame + levelInfo.frameLength;\r\n\r\n if (levelInfo.startFrame < this.startFrame) {\r\n this.startFrame = levelInfo.startFrame;\r\n }\r\n\r\n if (mergeEndFrame > endFrame) {\r\n this.frameLength = mergeEndFrame - this.startFrame;\r\n }\r\n\r\n for (let ch = 0; ch < this.channelCount; ch++) {\r\n\r\n if (levelInfo.minLinLevels[ch] < this.minLinLevels[ch]) {\r\n this.minLinLevels[ch] = levelInfo.minLinLevels[ch];\r\n }\r\n if (levelInfo.maxLinLevels[ch] > this.maxLinLevels[ch]) {\r\n this.maxLinLevels[ch] = levelInfo.maxLinLevels[ch];\r\n }\r\n }\r\n }\r\n\r\n levelsLin(): Array<number> {\r\n let lvlsLin = new Array<number>(this.channelCount);\r\n for (let ch = 0; ch < this.channelCount; ch++) {\r\n lvlsLin[ch] = Math.max(Math.abs(this.minLinLevels[ch]), Math.abs(this.maxLinLevels[ch]));\r\n }\r\n return lvlsLin;\r\n }\r\n\r\n powerLevelsDB(): Array<number> {\r\n let lvlsDb = new Array<number>(this.channelCount);\r\n for (let ch = 0; ch < this.channelCount; ch++) {\r\n lvlsDb[ch] = DSPUtils.toPowerLevelInDB(this.levelsLin()[ch]);\r\n }\r\n return lvlsDb;\r\n }\r\n\r\n powerLevelDB(): number {\r\n let pLvlsDb = this.powerLevelsDB();\r\n return Math.max(...pLvlsDb);\r\n }\r\n\r\n clone(): LevelInfo {\r\n return new LevelInfo(this.channelCount, this.startFrame, this.frameLength, Arrays.cloneNumberArray(this.minLinLevels),\r\n Arrays.cloneNumberArray(this.maxLinLevels));\r\n }\r\n}\r\n\r\nexport class LevelInfos {\r\n constructor(public readonly bufferLevelInfos: Array<LevelInfo>, public readonly peakLevelInfo: LevelInfo) {\r\n }\r\n\r\n framesPerBuffer():number{\r\n if(this.bufferLevelInfos.length>0){\r\n return this.bufferLevelInfos[0].frameLength;\r\n }\r\n return this.peakLevelInfo.frameLength/this.bufferLevelInfos.length;\r\n }\r\n}\r\n\r\n\r\nexport interface LevelListener {\r\n channelCount: number;\r\n\r\n update(levelInfo: LevelInfo, peakLevelInfo: LevelInfo): void;\r\n\r\n streamFinished(): void;\r\n\r\n reset(): void;\r\n}\r\n\r\nexport interface PeakLevelListener {\r\n update(peakLevel:number): void;\r\n}\r\n\r\nexport interface PeakLevelListener {\r\n\r\n update(levelInfo: LevelInfo, peakLevelInfo: LevelInfo): void;\r\n\r\n streamFinished(): void;\r\n\r\n reset(): void;\r\n}\r\n\r\nexport class PeakLevelInterceptor implements LevelListener{\r\n get peakDbLvl(): number {\r\n return this._peakDbLvl;\r\n }\r\n get channelCount(): number {\r\n return this._channelCount;\r\n }\r\n\r\n set channelCount(value: number) {\r\n this._channelCount = value;\r\n if(this.levelListener){\r\n this.levelListener.channelCount=value;\r\n }\r\n }\r\n\r\n private _channelCount: number=0;\r\n\r\n private _peakDbLvl = MIN_DB_LEVEL;\r\n\r\n\r\n\r\n constructor(private levelListener?:LevelListener) {}\r\n\r\n update(levelInfo: LevelInfo, peakLevelInfo: LevelInfo): void{\r\n let peakDBVal = levelInfo.powerLevelDB();\r\n if (this.peakDbLvl < peakDBVal) {\r\n this._peakDbLvl = peakDBVal;\r\n }\r\n }\r\n\r\n streamFinished(): void{\r\n if(this.levelListener){\r\n this.levelListener.streamFinished();\r\n }\r\n }\r\n\r\n reset(): void{\r\n this._peakDbLvl = MIN_DB_LEVEL;\r\n if(this.levelListener){\r\n this.levelListener.reset();\r\n }\r\n }\r\n}\r\n\r\ndeclare function postMessage(message: any, transfer?: Array<any>): void;\r\n\r\n\r\nexport class LevelMeasure {\r\n\r\n private readonly workerURL: string;\r\n private worker: Worker|null=null;\r\n\r\n constructor() {\r\n this.workerURL = WorkerHelper.buildWorkerBlobURL(this.workerFunction)\r\n }\r\n\r\n calcBufferLevelInfos(audioBuffer: AudioBuffer, bufferTimeLength: number): Promise<LevelInfos> {\r\n return new Promise<LevelInfos>((resolve)=>{\r\n let chs = audioBuffer.numberOfChannels;\r\n let bufferFrameLength=Math.round(audioBuffer.sampleRate*bufferTimeLength);\r\n let buffers = new Array<any>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n let adCh=audioBuffer.getChannelData(ch);\r\n let adChCopy=new Float32Array(adCh.length);\r\n adChCopy.set(adCh);\r\n buffers[ch] = adChCopy.buffer;\r\n }\r\n\r\n this.worker = new Worker(this.workerURL);\r\n this.worker.onmessage = (me) => {\r\n\r\n let linLevelArrs=new Array<Float32Array>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n linLevelArrs[ch] = new Float32Array(me.data.linLevelBuffers[ch]);\r\n }\r\n\r\n let bufferCount=Math.ceil(me.data.frameLength/me.data.bufferFrameLength);\r\n let framePos=0;\r\n let bufferLevelInfos=new Array<LevelInfo>();\r\n let peakLevelInfo=new LevelInfo(chs);\r\n for(let bi=0;bi<bufferCount;bi++) {\r\n let minLevels = new Array<number>(chs);\r\n let maxLevels = new Array<number>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n let linLvlArrPos=bi*2;\r\n minLevels[ch]=linLevelArrs[ch][linLvlArrPos];\r\n maxLevels[ch]=linLevelArrs[ch][linLvlArrPos+1];\r\n }\r\n let bli = new LevelInfo(chs, framePos, me.data.bufferFrameLength, minLevels, maxLevels);\r\n bufferLevelInfos.push(bli);\r\n peakLevelInfo.merge(bli);\r\n }\r\n this.terminateWorker();\r\n resolve(new LevelInfos(bufferLevelInfos, peakLevelInfo));\r\n };\r\n\r\n this.worker.postMessage({bufferFrameLength:bufferFrameLength,audioData: buffers, chs: chs}, buffers);\r\n\r\n });\r\n\r\n }\r\n\r\n\r\n private terminateWorker() {\r\n this.worker?.terminate();\r\n\r\n }\r\n\r\n /*\r\n * Method used as worker code.\r\n */\r\n workerFunction() {\r\n self.onmessage = function (msg:MessageEvent) {\r\n\r\n let chs = msg.data.chs;\r\n let bufferFrameLength = msg.data.bufferFrameLength;\r\n\r\n let audioData = new Array<Float32Array>(chs);\r\n let linLevels = new Array<Float32Array>(chs);\r\n\r\n for (let ch = 0; ch < chs; ch++) {\r\n audioData[ch] = new Float32Array(msg.data.audioData[ch]);\r\n }\r\n let frameLength = audioData[0].length;\r\n let bufferCount=Math.ceil(frameLength/bufferFrameLength);\r\n for (let ch = 0; ch < chs; ch++) {\r\n linLevels[ch] = new Float32Array(bufferCount*2);\r\n }\r\n if (audioData && chs > 0) {\r\n for (let ch = 0; ch < chs; ch++) {\r\n let chData = audioData[ch];\r\n\r\n for (let s = 0; s < frameLength; s++) {\r\n let bi = Math.floor(s / bufferFrameLength);\r\n let lvlArrPos = bi * 2;\r\n //let bs = s % bufferFrameLength;\r\n let chSample=chData[s];\r\n if (chSample < linLevels[ch][lvlArrPos]) {\r\n linLevels[ch][lvlArrPos] = chSample;\r\n }\r\n lvlArrPos++;\r\n if (chSample > linLevels[ch][lvlArrPos]) {\r\n linLevels[ch][lvlArrPos] = chSample;\r\n }\r\n }\r\n }\r\n const linLevelBufs = new Array<any>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n linLevelBufs[ch] = linLevels[ch].buffer;\r\n }\r\n postMessage({bufferFrameLength:bufferFrameLength,frameLength:frameLength,linLevelBuffers: linLevelBufs}, linLevelBufs);\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\nexport class StreamLevelMeasure implements SequenceAudioFloat32OutStream {\r\n\r\n currentLevelInfos: LevelInfo|null=null;\r\n peakLevelInfo: LevelInfo|null=null;\r\n\r\n private readonly workerURL: string;\r\n private worker: Worker|null=null;\r\n private channelCount: number=0;\r\n private bufferIndex: number = 0;\r\n private frameCount: number = 0;\r\n\r\n levelListener: LevelListener|null=null;\r\n peakLevelListener: ((peakLvlInDb:number)=>void)|null=null;\r\n private peakLevelInDb:number=MIN_DB_LEVEL;\r\n\r\n constructor() {\r\n this.workerURL = WorkerHelper.buildWorkerBlobURL(this.workerFunction)\r\n }\r\n\r\n setFormat(channels: number, sampleRate: number) {\r\n this.channelCount = channels;\r\n this.currentLevelInfos = new LevelInfo(this.channelCount);\r\n this.peakLevelInfo = new LevelInfo(this.channelCount);\r\n this.worker = new Worker(this.workerURL);\r\n this.worker.onmessage = (me) => {\r\n let streamFinished = me.data.streamFinished;\r\n if (streamFinished) {\r\n if (this.levelListener) {\r\n this.levelListener.streamFinished()\r\n }\r\n } else {\r\n\r\n let minLevels = new Array<number>(this.channelCount);\r\n let maxLevels = new Array<number>(this.channelCount);\r\n for (let ch = 0; ch < this.channelCount; ch++) {\r\n let fls = new Float32Array(me.data.linLevelBuffers[ch]);\r\n minLevels[ch] = fls[0];\r\n maxLevels[ch] = fls[1];\r\n }\r\n let bi = new LevelInfo(this.channelCount, this.frameCount, me.data.fraemLength, minLevels, maxLevels);\r\n this.updateLevels(bi);\r\n }\r\n }\r\n }\r\n\r\n\r\n nextStream() {\r\n this.reset();\r\n }\r\n\r\n private reset() {\r\n this.currentLevelInfos = new LevelInfo(this.channelCount);\r\n this.peakLevelInfo = new LevelInfo(this.channelCount);\r\n if (this.levelListener) {\r\n this.levelListener.reset();\r\n this.levelListener.channelCount = this.channelCount;\r\n }\r\n if (this.peakLevelListener) {\r\n this.peakLevelInDb=MIN_DB_LEVEL;\r\n this.peakLevelListener(this.peakLevelInDb);\r\n }\r\n }\r\n\r\n write(bufferData: Array<Float32Array>): number {\r\n let bufArrCopies = new Array<Float32Array>(bufferData.length);\r\n let buffers = new Array<any>(bufferData.length);\r\n for (let ch = 0; ch < bufferData.length; ch++) {\r\n bufArrCopies[ch] = bufferData[ch].slice();\r\n buffers[ch] = bufArrCopies[ch].buffer;\r\n }\r\n this.worker?.postMessage({\r\n streamFinished: false,\r\n audioData: buffers,\r\n chs: this.channelCount,\r\n bufferIndex: this.bufferIndex\r\n }, buffers);\r\n this.bufferIndex++;\r\n return bufArrCopies[0].length;\r\n }\r\n\r\n flush() {\r\n this.worker?.postMessage({streamFinished: true});\r\n\r\n }\r\n\r\n close() {\r\n this.worker?.terminate();\r\n }\r\n\r\n /*\r\n * Method used as worker code.\r\n */\r\n workerFunction() {\r\n self.onmessage = function (msg:MessageEvent) {\r\n let streamFinished = msg.data.streamFinished;\r\n if (streamFinished) {\r\n postMessage({streamFinished: true});\r\n } else {\r\n let chs = msg.data.chs;\r\n let frameLength = null;\r\n let audioData = new Array<Float32Array>(chs);\r\n let linLevels = new Array<Float32Array>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n linLevels[ch] = new Float32Array(2);\r\n audioData[ch] = new Float32Array(msg.data.audioData[ch]);\r\n }\r\n\r\n if (audioData) {\r\n for (let ch = 0; ch < chs; ch++) {\r\n let chData = audioData[ch];\r\n if (frameLength === null) {\r\n frameLength = chData.length;\r\n }\r\n for (let s = 0; s < frameLength; s++) {\r\n let chSample=chData[s];\r\n if (chSample < linLevels[ch][0]) {\r\n linLevels[ch][0] = chSample;\r\n }\r\n if (chSample > linLevels[ch][1]) {\r\n linLevels[ch][1] = chSample;\r\n }\r\n }\r\n }\r\n }\r\n let linLevelBufs = new Array<any>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n linLevelBufs[ch] = linLevels[ch].buffer;\r\n }\r\n postMessage({streamFinished: false, frameLength: frameLength, linLevelBuffers: linLevelBufs}, linLevelBufs);\r\n }\r\n }\r\n }\r\n\r\n updateLevels(bufferLevelInfo: LevelInfo) {\r\n\r\n this.currentLevelInfos = bufferLevelInfo;\r\n if(this.peakLevelInfo) {\r\n this.peakLevelInfo.merge(bufferLevelInfo);\r\n if (this.levelListener) {\r\n this.levelListener.update(this.currentLevelInfos, this.peakLevelInfo.clone());\r\n }\r\n if(this.peakLevelListener){\r\n let peakDBVal = bufferLevelInfo.powerLevelDB();\r\n if (this.peakLevelInDb < peakDBVal) {\r\n this.peakLevelInDb = peakDBVal;\r\n // the event comes from outside of an Angular zone\r\n this.peakLevelListener(this.peakLevelInDb);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n stop() {\r\n this.worker?.terminate();\r\n }\r\n\r\n\r\n}\r\n","import {Component,Input} from '@angular/core'\r\nimport {StartStopSignal, State} from '../startstopsignal'\r\n\r\n@Component({\r\n\r\n selector: 'app-simpletrafficlight',\r\n\r\n template: `\r\n\r\n <div>\r\n <div class=\"circle {{lighttop}}\"></div>\r\n <div class=\"circle {{lightmid}}\"></div>\r\n <div class=\"circle {{lightbottom}}\"></div>\r\n </div>\r\n `\r\n ,\r\n styles: [`.circle {\r\n width: 50px;\r\n height: 50px;\r\n border-radius: 50%;\r\n margin: 5px;\r\n background: grey;\r\n }`, `.red {\r\n background: red;\r\n }\r\n `, `\r\n .yellow {\r\n background: yellow;\r\n }\r\n `, `\r\n .green {\r\n background: green;\r\n }\r\n `, `\r\n .black {\r\n background: black;\r\n }`,\r\n `:host {\r\n display: flex;\r\n flex-direction: column;\r\n background: black;\r\n \r\n padding: 2px;\r\n height: 170px;\r\n max-height: 170px;\r\n flex: 0 0 content;\r\n }\r\n `]\r\n})\r\nexport class SimpleTrafficLight implements StartStopSignal {\r\n\r\n lighttop!: string;\r\n lightmid!: string;\r\n lightbottom!: string;\r\n\r\n constructor() {\r\n this.status=State.OFF;\r\n }\r\n\r\n @Input()\r\n set status(status: State) {\r\n if (State.OFF === status) {\r\n this.lighttop = 'grey';\r\n this.lightmid = 'grey';\r\n this.lightbottom = 'grey';\r\n } else if (State.IDLE === status) {\r\n this.lighttop = 'red';\r\n this.lightmid = 'grey';\r\n this.lightbottom = 'grey';\r\n } else if (State.PRERECORDING == status) {\r\n this.lighttop = 'red';\r\n this.lightmid = 'yellow';\r\n this.lightbottom = 'grey';\r\n } else if (State.RECORDING == status) {\r\n this.lighttop = 'grey';\r\n this.lightmid = 'grey';\r\n this.lightbottom = 'green';\r\n } else if (State.POSTRECORDING == status) {\r\n this.lighttop = 'grey';\r\n this.lightmid = 'yellow';\r\n this.lightbottom = 'grey';\r\n }\r\n }\r\n}\r\n\r\n\r\n","export class Position{\r\n constructor(public left:number,public top:number){\r\n\r\n }\r\n toString():string{\r\n return this.left+\",\"+this.top\r\n }\r\n}\r\n\r\n\r\nexport class Dimension {\r\n constructor(public width:number,public height:number){\r\n\r\n }\r\n toString():string{\r\n return this.width+\"x\"+this.height\r\n }\r\n}\r\n\r\n\r\nexport class Rectangle{\r\n\r\n constructor(public position:Position,public dimension:Dimension){\r\n\r\n }\r\n toString():string{\r\n return this.position+\":\"+this.dimension\r\n }\r\n}\r\n","import {Position,Dimension, Rectangle} from \"../math/2d/geometry\";\r\nimport { Directive } from \"@angular/core\";\r\n\r\n@Directive()\r\nexport abstract class CanvasLayerComponent{\r\n\r\n protected bounds:Rectangle|null=null;\r\n protected virtualDimension!:Dimension;\r\n protected canvasLayers:Array<HTMLCanvasElement>;\r\n\r\n constructor(){\r\n\r\n // TODO make clear that first element is background canvas\r\n this.canvasLayers=new Array<HTMLCanvasElement>();\r\n }\r\n\r\n toXViewPortPixelPosition(virtualX:number){\r\n let pixelPos=virtualX;\r\n if(this.bounds){\r\n pixelPos=Math.round(virtualX-this.bounds.position.left);\r\n }\r\n return pixelPos;\r\n }\r\n\r\n toXVirtualPixelPosition(viewPortX:number){\r\n let pixelPos=viewPortX;\r\n if(this.bounds){\r\n pixelPos=Math.round(viewPortX+this.bounds.position.left);\r\n }\r\n return pixelPos;\r\n }\r\n\r\n toViewPortPosition(virtualPos:Position):Position{\r\n\r\n if(this.bounds){\r\n return new Position(virtualPos.left-this.bounds.position.left,virtualPos.top-this.bounds.position.top);\r\n }else{\r\n return virtualPos;\r\n }\r\n }\r\n\r\n\r\n}\r\n"," export class AudioClip {\r\n private _buffer: AudioBuffer;\r\n private _selection:Selection|null=null;\r\n private selectionObservers:Array<(audioClip:AudioClip)=>void>;\r\n\r\n constructor(buffer: AudioBuffer) {\r\n this.selectionObservers=new Array<(audioClip:AudioClip)=>void>()\r\n this._buffer = buffer;\r\n }\r\n\r\n get buffer() {\r\n return this._buffer;\r\n };\r\n\r\n get selection(): Selection|null{\r\n return this._selection;\r\n }\r\n\r\n set selection(value: Selection|null) {\r\n this._selection = value;\r\n // let obsCnt=this.selectionObservers.length\r\n // this.selectionObservers.forEach((obs)=> {\r\n // console.log(\"Calling observer\")\r\n // obs(this)\r\n // });\r\n for(let selObs of this.selectionObservers){\r\n selObs(this)\r\n }\r\n }\r\n\r\n addSelectionObserver(selectionObserver:(audioClip:AudioClip)=>void,init=false){\r\n let obsAlreadyInList=this.selectionObservers.find((obs)=>(obs===selectionObserver))\r\n if(!obsAlreadyInList) {\r\n this.selectionObservers.push(selectionObserver)\r\n }\r\n if(init){\r\n selectionObserver(this)\r\n }\r\n }\r\n\r\n removeSelectionObserver(selectionObserver:(audioClip:AudioClip)=>void){\r\n this.selectionObservers=this.selectionObservers.filter((obs)=>{obs!==selectionObserver})\r\n }\r\n }\r\n\r\n export interface Reader {\r\n read(data: Blob): AudioClip;\r\n }\r\n export interface Writer {\r\n write(audioData: AudioClip): Blob;\r\n }\r\n\r\n export class Selection{\r\n private _sampleRate:number;\r\n private _startFrame:number;\r\n private _endFrame:number;\r\n\r\n constructor(sampleRate:number,startFrame:number,endFrame:number){\r\n this._sampleRate=sampleRate;\r\n this._startFrame=startFrame\r\n this._endFrame=endFrame;\r\n }\r\n\r\n get sampleRate(): number {\r\n return this._sampleRate;\r\n }\r\n get endFrame():number{\r\n return this._endFrame;\r\n }\r\n get startFrame(): number {\r\n return this._startFrame;\r\n }\r\n\r\n get leftFrame(): number {\r\n return (this._startFrame <= this._endFrame) ? this._startFrame : this._endFrame\r\n }\r\n get rightFrame(): number {\r\n return (this._startFrame <= this._endFrame) ? this._endFrame : this._startFrame\r\n }\r\n\r\n equals(otherSelection:Selection|null|undefined):boolean{\r\n if(otherSelection) {\r\n return (this._sampleRate == otherSelection._sampleRate && this._startFrame === otherSelection._startFrame && this._endFrame === otherSelection._endFrame);\r\n }\r\n return false;\r\n }\r\n\r\n toString(){\r\n return \"Selection: from: \"+this.leftFrame+\" to: \"+this.rightFrame+\" frame. Refers to sample rate :\"+this._sampleRate;\r\n }\r\n }\r\n\r\n\r\n","\r\n export class Point {\r\n constructor(private _x:number,private _y:number) {\r\n }\r\n get x():number{\r\n return this._x;\r\n }\r\n get y():number{\r\n return this._y;\r\n }\r\n }\r\n export class Marker {\r\n name: string|null=null;\r\n framePosition: number|null=null;\r\n\r\n }\r\n\r\n\r\n","import {CanvasLayerComponent} from \"../../ui/canvas_layer_comp\";\r\nimport {Selection} from '../persistor'\r\nimport { ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, Directive } from \"@angular/core\";\r\nimport {Marker} from \"./common\";\r\nimport {Dimension, Rectangle} from \"../../math/2d/geometry\";\r\n\r\n\r\nexport class ViewSelection{\r\n get startX(): number {\r\n return this._startX;\r\n }\r\n\r\n get endX(): number {\r\n return this._endX;\r\n }\r\n\r\n width():number{\r\n return this._endX-this._startX\r\n }\r\n\r\n constructor(private _startX:number, private _endX:number){}\r\n}\r\n\r\n@Directive()\r\nexport abstract class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {\r\n protected _audioData: AudioBuffer|null=null;\r\n protected _bgColor:string|null='white';\r\n protected _selectColor='rgba(0%,0%,100%,25%)';\r\n\r\n /**\r\n * Returns pixel position depending on current zoom setting.\r\n * @param framePos audio frame (sample) position\r\n */\r\n frameToXPixelPosition(framePos: number): number | null {\r\n let pixelPos=null;\r\n if (this._audioData && this._audioData.numberOfChannels > 0) {\r\n let ch0 = this._audioData.getChannelData(0);\r\n let frameLength = ch0.length;\r\n let vw;\r\n if(this.bounds) {\r\n vw = this.bounds.dimension.width;\r\n }\r\n if (this.virtualDimension) {\r\n vw = this.virtualDimension.width;\r\n }\r\n if(vw !== undefined) {\r\n pixelPos = framePos * vw / frameLength;\r\n }\r\n }\r\n return pixelPos;\r\n}\r\n\r\n /**\r\n * Returns pixel position in view port (visible window of scroll pane).\r\n * @param framePos audio frame (sample) position\r\n */\r\n frameToViewPortXPixelPosition(framePos: number): number | null {\r\n let pixelPos=this.frameToXPixelPosition(framePos);\r\n if(pixelPos!=null){\r\n let vPixelPos = this.toXViewPortPixelPosition(pixelPos);\r\n return vPixelPos;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n viewPortXPixelToFramePosition(xViewPortPixelPos: number): number | null {\r\n let vpXramePos=null;\r\n if (this._audioData && this._audioData.numberOfChannels > 0) {\r\n let ch0 = this._audioData.getChannelData(0);\r\n let frameLength = ch0.length;\r\n let vw;\r\n if (this.bounds) {\r\n vw= this.bounds.dimension.width;\r\n }\r\n if (this.virtualDimension) {\r\n vw = this.virtualDimension.width;\r\n }\r\n if(vw!== undefined) {\r\n let xVirtualPixelPos = this.toXVirtualPixelPosition(xViewPortPixelPos)\r\n let framesPerPixel = frameLength / vw;\r\n let framePos = framesPerPixel * xVirtualPixelPos;\r\n if (framePos < 0) {\r\n framePos = 0\r\n }\r\n if (framePos >= frameLength) {\r\n framePos = frameLength - 1\r\n }\r\n vpXramePos = Math.round(framePos);\r\n }\r\n }\r\n return vpXramePos;\r\n }\r\n\r\n layoutBounds(bounds:Rectangle, virtualDimension:Dimension,redraw: boolean) {\r\n\r\n this.bounds=bounds;\r\n this.virtualDimension=virtualDimension;\r\n //this.canvasLayers.forEach(cl=>{\r\n for(let ci=0;ci<this.canvasLayers.length;ci++) {\r\n let cl = this.canvasLayers[ci];\r\n const leftStyle=bounds.position.left+ 'px';\r\n const topStyle=bounds.position.top + 'px';\r\n cl.style.left = leftStyle;\r\n cl.style.top = topStyle;\r\n }\r\n if (bounds.dimension.width) {\r\n let intW=Math.round(bounds.dimension.width);\r\n if (redraw) {\r\n // Do not set width of background canvas (causes flicker on start render)\r\n for(let ci=1;ci<this.canvasLayers.length;ci++) {\r\n let cl = this.canvasLayers[ci];\r\n cl.width = intW;\r\n }\r\n }\r\n let wStr = intW.toString() + 'px';\r\n for(let ci=0;ci<this.canvasLayers.length;ci++) {\r\n let cl = this.canvasLayers[ci];\r\n cl.style.width = wStr;\r\n }\r\n }\r\n if (bounds.dimension.height) {\r\n let intH=Math.round(bounds.dimension.height)\r\n if (redraw) {\r\n // Do not set height of background canvas (causes flicker on start render)\r\n for(let ci=1;ci<this.canvasLayers.length;ci++) {\r\n let cl = this.canvasLayers[ci];\r\n cl.height = intH;\r\n }\r\n }\r\n let hStr = intH + 'px';\r\n for(let ci=0;ci<this.canvasLayers.length;ci++) {\r\n let cl = this.canvasLayers[ci];\r\n cl.style.height = hStr;\r\n }\r\n }\r\n //});\r\n\r\n\r\n }\r\n}\r\n\r\n@Directive()\r\nexport abstract class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {\r\n _pointerPosition:Marker|null=null;\r\n\r\n protected selectStartX:number|null=null;\r\n\r\n @ViewChild('bg', { static: true }) bgCanvasRef!: ElementRef;\r\n bgCanvas!: HTMLCanvasElement;\r\n\r\n @ViewChild('cursor', { static: true }) cursorCanvasRef!: ElementRef;\r\n cursorCanvas!: HTMLCanvasElement;\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n onMouseup(me: MouseEvent) {\r\n this.selectionCommit(me)\r\n }\r\n\r\n layoutBounds(bounds:Rectangle, virtualDimension:Dimension,redraw: boolean,clear:boolean=true) {\r\n super.layoutBounds(bounds,virtualDimension,redraw)\r\n if (redraw) {\r\n this.startDraw(clear);\r\n }\r\n }\r\n\r\n @Input() set pointerPosition(pointerPosition:Marker|null){\r\n this._pointerPosition=pointerPosition\r\n this.drawCursorLayer()\r\n }\r\n\r\n _selecting: Selection|null =null;\r\n @Input() set selecting(selecting:Selection| null){\r\n this._selecting=selecting\r\n this.drawBg()\r\n this.drawCursorLayer()\r\n }\r\n\r\n get selecting():Selection|null{\r\n return this._selecting\r\n }\r\n\r\n _selection: Selection|null =null\r\n @Input() set selection(selection:Selection|null){\r\n this._selection=selection;\r\n this.selecting=null;\r\n this.drawBg()\r\n this.drawCursorLayer()\r\n }\r\n\r\n get selection():Selection|null{\r\n return this._selection\r\n }\r\n\r\n selectionStart(me:MouseEvent){\r\n this.selectStartX=me.offsetX;\r\n }\r\n\r\n selectionCommit(me:MouseEvent){\r\n let vs:ViewSelection|null=null;\r\n if(this.selectStartX!=null) {\r\n vs=new ViewSelection(this.selectStartX,me.offsetX)\r\n this.selectStartX=null;\r\n this.select(vs);\r\n }\r\n }\r\n\r\n abstract startDraw(clear:boolean):void;\r\n\r\n updateCursorCanvas(me:MouseEvent,showCursorPosition=true){\r\n\r\n if (this.cursorCanvas) {\r\n\r\n let w = this.cursorCanvas.width;\r\n let h = this.cursorCanvas.height;\r\n let g = this.cursorCanvas.getContext(\"2d\");\r\n\r\n // if (!showCursorPosition) {\r\n // this.selectStartX = null\r\n // this.selectingChange(null)\r\n // }\r\n if (me) {\r\n if (this.selectStartX) {\r\n this.pointerPositionChanged(null)\r\n this.selectingChange(new ViewSelection(this.selectStartX, me.offsetX));\r\n } else {\r\n if (showCursorPosition) {\r\n this.pointerPositionChanged(me.offsetX)\r\n }else{\r\n this.pointerPositionChanged(null)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n @Output() pointerPositionEventEmitter = new EventEmitter<Marker>();\r\n @Output() selectingEventEmitter = new EventEmitter<Selection>();\r\n @Output() selectedEventEmitter = new EventEmitter<Selection>();\r\n\r\n\r\n pointerPositionChanged(xPosition:number| null){\r\n let pointerPosition:Marker|undefined=undefined;\r\n if(xPosition){\r\n pointerPosition=new Marker();\r\n let vpXPos=this.viewPortXPixelToFramePosition(xPosition);\r\n if(vpXPos!=null) {\r\n pointerPosition.framePosition =vpXPos;\r\n }\r\n }\r\n this.pointerPositionEventEmitter.emit(pointerPosition);\r\n }\r\n\r\n selectingChange(viewSel:ViewSelection| null){\r\n let ns:Selection|undefined=undefined;\r\n if(viewSel) {\r\n let frameStart = this.viewPortXPixelToFramePosition(viewSel.startX)\r\n let frameEnd = this.viewPortXPixelToFramePosition(viewSel.endX)\r\n if(this._audioData && frameStart!=null && frameEnd!=null) {\r\n ns = new Selection(this._audioData.sampleRate, frameStart, frameEnd);\r\n }\r\n }\r\n this.selectingEventEmitter.emit(ns)\r\n }\r\n\r\n select(viewSel:ViewSelection| null){\r\n let ns:Selection|undefined=undefined;\r\n if(viewSel) {\r\n let frameStart = this.viewPortXPixelToFramePosition(viewSel.startX)\r\n let frameEnd = this.viewPortXPixelToFramePosition(viewSel.endX)\r\n if(this._audioData && frameStart!=null && frameEnd!=null) {\r\n ns = new Selection(this._audioData.sampleRate, frameStart, frameEnd);\r\n }\r\n }\r\n this.selectedEventEmitter.emit(ns)\r\n }\r\n\r\n viewSelection():ViewSelection|null{\r\n let vs:ViewSelection|null=null;\r\n let s:Selection|null=null;\r\n if(this._selecting){\r\n s=this._selecting\r\n }else if(this._selection){\r\n s=this._selection\r\n }\r\n if(s){\r\n let sf=s.startFrame;\r\n let ef=s.endFrame;\r\n let xs=this.frameToViewPortXPixelPosition(sf)\r\n let xe=this.frameToViewPortXPixelPosition(ef)\r\n if(xs!=null && xe!=null) {\r\n vs = new ViewSelection(xs, xe)\r\n }\r\n }\r\n return vs;\r\n }\r\n\r\n\r\n drawBg(){\r\n if(this.bgCanvas && this.bounds) {\r\n this.bgCanvas.style.left = Math.round(this.bounds.position.left).toString() + 'px';\r\n this.bgCanvas.width = Math.round(this.bounds.dimension.width);\r\n this.bgCanvas.height = Math.round(this.bounds.dimension.height);\r\n let g1 = this.bgCanvas.getContext(\"2d\");\r\n if (g1) {\r\n let w = this.bgCanvas.width;\r\n let h = this.bgCanvas.height;\r\n g1.clearRect(0, 0, w, h);\r\n if(this._bgColor) {\r\n g1.fillStyle = this._bgColor;\r\n g1.fillRect(0, 0, w, h);\r\n }\r\n let vs = this.viewSelection()\r\n if (vs) {\r\n g1.fillStyle = this._selectColor;\r\n g1.fillRect(vs.startX, 0, vs.width(), h);\r\n }\r\n }\r\n }\r\n }\r\n drawCursorLayer(){\r\n if (this.cursorCanvas) {\r\n let w = this.cursorCanvas.width;\r\n let h = this.cursorCanvas.height;\r\n let g = this.cursorCanvas.getContext(\"2d\");\r\n if(g) {\r\n g.clearRect(0, 0, w, h);\r\n // let s:Selection=null;\r\n // if(this._selecting){\r\n // s=this._selecting\r\n // }else if(this._selection){\r\n // s=this._selection\r\n // }\r\n // if(s){\r\n // let sf=s.startFrame\r\n // let ef=s.endFrame\r\n // let xs=this.frameToViewPortXPixelPosition(sf)\r\n // let xe=this.frameToViewPortXPixelPosition(ef)\r\n // let sw=xe-xs\r\n // g.fillStyle = 'rgba(0%,0%,100%,25%)';\r\n // g.fillRect(xs,0,sw,h);\r\n // }\r\n\r\n if(this._pointerPosition){\r\n\r\n let framePos=this._pointerPosition.framePosition\r\n if(framePos) {\r\n let xViewPortPixelpos = this.frameToViewPortXPixelPosition(framePos)\r\n if (xViewPortPixelpos) {\r\n\r\n g.fillStyle = 'yellow';\r\n g.strokeStyle = 'yellow';\r\n g.beginPath();\r\n g.moveTo(xViewPortPixelpos, 0);\r\n g.lineTo(xViewPortPixelpos, h);\r\n g.closePath();\r\n\r\n g.stroke();\r\n\r\n if (this._audioData) {\r\n g.font = '14px sans-serif';\r\n g.fillStyle = 'yellow';\r\n g.fillText(framePos.toString(), xViewPortPixelpos + 2, 50);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n","import {Component, ViewChild, ElementRef} from '@angular/core';\r\nimport {AudioCanvasLayerComponent} from \"./audio_canvas_layer_comp\";\r\nimport {WorkerHelper} from \"../../utils/utils\";\r\n\r\ndeclare function postMessage(message: any, transfer: Array<any>): void;\r\n\r\n@Component({\r\n\r\n selector: 'audio-signal',\r\n template: `\r\n <canvas #bg height=\"10\"></canvas>\r\n <canvas #audioSignal height=\"10\"></canvas>\r\n <canvas #cursor height=\"10\" (mousedown)=\"selectionStart($event)\" (mouseover)=\"updateCursorCanvas($event)\" (mousemove)=\"updateCursorCanvas($event)\"\r\n (mouseleave)=\"updateCursorCanvas($event, false)\"></canvas>\r\n <canvas #marker height=\"10\"></canvas>`,\r\n\r\n styles: [`:host{\r\n min-height: 0px;\r\n }`,`canvas {\r\n top: 0;\r\n left: 0;\r\n width: 0;\r\n height: 0;\r\n min-height: 0px;\r\n position: absolute;\r\n }`]\r\n\r\n})\r\nexport class AudioSignal extends AudioCanvasLayerComponent{\r\n\r\n n: any;\r\n ce!: HTMLDivElement;\r\n @ViewChild('audioSignal', { static: true }) audioSignalCanvasRef!: ElementRef;\r\n @ViewChild('marker', { static: true }) playPosCanvasRef!: ElementRef;\r\n signalCanvas!: HTMLCanvasElement;\r\n\r\n markerCanvas!: HTMLCanvasElement;\r\n\r\n private _playFramePosition: number|null=null;\r\n private worker: Worker | null;\r\n private workerURL: string;\r\n\r\n constructor(private ref: ElementRef) {\r\n super();\r\n this.worker = null;\r\n this.workerURL = WorkerHelper.buildWorkerBlobURL(this.workerFunction)\r\n this._audioData = null;\r\n this._bgColor='black';\r\n this._selectColor='rgba(255,255,0,0.8)'\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n this.ce = this.ref.nativeElement;\r\n this.bgCanvas = this.bgCanvasRef.nativeElement;\r\n this.bgCanvas.style.zIndex = '1';\r\n this.signalCanvas = this.audioSignalCanvasRef.nativeElement;\r\n this.signalCanvas.style.zIndex = '2';\r\n this.markerCanvas = this.playPosCanvasRef.nativeElement;\r\n this.markerCanvas.style.zIndex = '3';\r\n this.cursorCanvas = this.cursorCanvasRef.nativeElement;\r\n this.cursorCanvas.style.zIndex = '4';\r\n\r\n this.canvasLayers[0]=this.bgCanvas;\r\n this.canvasLayers[1]=this.signalCanvas;\r\n this.canvasLayers[2]=this.cursorCanvas;\r\n this.canvasLayers[3]=this.markerCanvas;\r\n\r\n }\r\n\r\n get playFramePosition(): number |null{\r\n return this._playFramePosition;\r\n }\r\n\r\n set playFramePosition(playFramePosition: number|null) {\r\n this._playFramePosition = playFramePosition;\r\n this.drawPlayPosition();\r\n }\r\n\r\n\r\n\r\n drawPlayPosition() {\r\n if (this.markerCanvas) {\r\n let w = this.markerCanvas.width;\r\n let h = this.markerCanvas.height;\r\n let g = this.markerCanvas.getContext(\"2d\");\r\n if (g) {\r\n g.clearRect(0, 0, w, h);\r\n if(this._playFramePosition) {\r\n let pixelPos = this.frameToViewPortXPixelPosition(this._playFramePosition);\r\n if (pixelPos) {\r\n g.fillStyle = 'red';\r\n g.strokeStyle = 'red';\r\n g.beginPath();\r\n g.moveTo(pixelPos, 0);\r\n g.lineTo(pixelPos, h);\r\n g.closePath();\r\n g.stroke();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /*\r\n * Method used as worker code.\r\n */\r\n workerFunction() {\r\n addEventListener('message', ({ data }) => {\r\n\r\n let audioData = data.audioData;\r\n let l= data.l;\r\n let w = data.w;\r\n let h = data.h;\r\n let vw = data.vw;\r\n let chs = data.chs;\r\n let frameLength = data.frameLength;\r\n let psMinMax= new Float32Array(0);\r\n\r\n if(audioData && w>=0 && vw>0) {\r\n\r\n let framesPerPixel = frameLength / vw;\r\n\r\n let y = 0;\r\n let pointsLen = w * chs;\r\n // one for min one for max\r\n let arrLen = pointsLen * 2;\r\n psMinMax = new Float32Array(arrLen);\r\n let chFramePos = 0;\r\n for (let ch = 0; ch < chs; ch++) {\r\n let x = 0;\r\n\r\n chFramePos = ch * frameLength;\r\n for (let pii = 0; pii < w; pii++) {\r\n let virtPii=l+pii;\r\n let pMin = Infinity;\r\n let pMax = -Infinity;\r\n let pixelFramePos = Math.round(chFramePos + (virtPii * framesPerPixel));\r\n\r\n // calculate pixel min/max amplitude\r\n for (let ai = 0; ai < framesPerPixel; ai++) {\r\n let framePos = pixelFramePos + ai;\r\n\r\n let a = 0;\r\n if(framePos>=0 && framePos<audioData.length){\r\n a=audioData[framePos];\r\n }\r\n if (a < pMin) {\r\n pMin = a;\r\n }\r\n if (a > pMax) {\r\n pMax = a;\r\n }\r\n }\r\n\r\n let psMinPos = ch * w + pii;\r\n psMinMax[psMinPos] = pMin;\r\n let psMaxPos = pointsLen + psMinPos;\r\n psMinMax[psMaxPos] = pMax;\r\n\r\n }\r\n\r\n }\r\n }\r\n\r\n\r\n postMessage({psMinMax: psMinMax, l:data.l,t:data.t,w: data.w, h: data.h, chs: data.chs}, [psMinMax.buffer]);\r\n })\r\n }\r\n\r\n startDraw(clear = true) {\r\n if (clear) {\r\n if(this.bounds) {\r\n this.signalCanvas.style.left = Math.round(this.bounds.position.left).toString() + 'px';\r\n this.signalCanvas.width = Math.round(this.bounds.dimension.width);\r\n this.signalCanvas.height = Math.round(this.bounds.dimension.height);\r\n\r\n let g = this.signalCanvas.getContext(\"2d\");\r\n if (g) {\r\n //g.clearRect(0, 0,w, h);\r\n g.fillStyle = \"black\";\r\n g.fillRect(0, 0, Math.round(this.bounds.dimension.width), Math.round(this.bounds.dimension.height));\r\n }\r\n }\r\n }\r\n this.startRender();\r\n this.drawCursorLayer()\r\n }\r\n\r\n\r\n private startRender() {\r\n\r\n if (this.worker) {\r\n this.worker.terminate();\r\n this.worker = null;\r\n }\r\n if (this.bounds && this.bounds.dimension) {\r\n\r\n let w = Math.round(this.bounds.dimension.width);\r\n let h = Math.round(this.bounds.dimension.height);\r\n\r\n if (this._audioData && w>0 && h>0) {\r\n //this.wo = new Worker('./audiosignal.worker.js',{type: 'module'});\r\n this.worker = new Worker(this.workerURL);\r\n //this.wo = new Worker('worker/audiosignal.worker.ts');\r\n\r\n //let Worker = require('worker!../../../workers/uploader/main');\r\n let chs = this._audioData.numberOfChannels;\r\n\r\n let frameLength = this._audioData.getChannelData(0).length;\r\n // if(frameLength != this.audioData.getChannelData(1).length){\r\n // alert(\"Ungleiche Länge\");\r\n // }\r\n let ad = new Float32Array(chs * frameLength);\r\n for (let ch = 0; ch < chs; ch++) {\r\n ad.set(this._audioData.getChannelData(ch), ch * frameLength);\r\n }\r\n //let start = Date.now();\r\n if (this.worker) {\r\n this.worker.onmessage = (me) => {\r\n //console.log(\"As rendertime: \", Date.now() - start);\r\n this.drawRendered(me);\r\n if (this.worker) {\r\n this.worker.terminate();\r\n }\r\n this.worker = null;\r\n }\r\n }\r\n this.worker.postMessage({\r\n l: Math.round(this.bounds.position.left),\r\n t: Math.round(this.bounds.position.top),\r\n w: w,\r\n h: h,\r\n vw: Math.round(this.virtualDimension.width),\r\n chs: chs,\r\n frameLength: frameLength,\r\n audioData: ad\r\n }, [ad.buffer]);\r\n } else {\r\n let g = this.signalCanvas.getContext(\"2d\");\r\n if (g) {\r\n g.clearRect(0, 0, w, h);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n drawRendered(me: MessageEvent) {\r\n this.drawBg();\r\n this.signalCanvas.style.left=me.data.l.toString()+'px';\r\n this.signalCanvas.width = me.data.w;\r\n this.signalCanvas.height = me.data.h;\r\n let g = this.signalCanvas.getContext(\"2d\");\r\n if (g) {\r\n g.clearRect(0, 0, me.data.w, me.data.h);\r\n //g.fillStyle = \"black\";\r\n //g.fillRect(0, 0, me.data.w, me.data.h);\r\n let pointsLen = me.data.w * me.data.chs;\r\n // one for min one for max\r\n let arrLen = pointsLen * 2;\r\n if (this._audioData) {\r\n let std = Date.now();\r\n\r\n let chH = me.data.h / me.data.chs;\r\n\r\n let y = 0;\r\n for (let ch = 0; ch < me.data.chs; ch++) {\r\n let x = 0;\r\n\r\n let psMinPos = ch * me.data.w;\r\n let psMaxPos = pointsLen + psMinPos;\r\n\r\n g.fillStyle = 'green';\r\n g.strokeStyle = 'green';\r\n\r\n // draw audio signal as single polygon\r\n g.beginPath();\r\n g.moveTo(0, y + (chH / 2) + me.data.psMinMax[psMaxPos] * chH / 2);\r\n\r\n for (let pii = 0; pii < me.data.w; pii++) {\r\n let psMax = me.data.psMinMax[psMaxPos + pii];\r\n let pv = psMax * chH / 2;\r\n let yd=y + (chH / 2) - pv;\r\n //console.log(\"LineTo: : \"+pii+\" \"+yd)\r\n g.lineTo(pii, yd);\r\n }\r\n let revPixelStart=me.data.w-1;\r\n\r\n for (let pii = revPixelStart; pii >= 0; pii--) {\r\n let psMin = me.data.psMinMax[psMinPos + pii];\r\n let pv = psMin * chH / 2;\r\n let yd=y + (chH / 2) - pv;\r\n //console.log(\"LineTo: : \"+pii+\" \"+yd)\r\n g.lineTo(pii, yd);\r\n }\r\n g.closePath();\r\n\r\n g.fill();\r\n g.stroke();\r\n y += chH;\r\n }\r\n\r\n //this.drawPlayPosition();\r\n }\r\n }\r\n }\r\n\r\n redraw() {\r\n this.drawBg()\r\n let g = this.signalCanvas.getContext(\"2d\");\r\n if (g) {\r\n let w = this.signalCanvas.width;\r\n let h = this.signalCanvas.height;\r\n g.clearRect(0, 0, w, h);\r\n //g.fillStyle = \"black\";\r\n //g.fillRect(0, 0, w, h);\r\n if (this._audioData) {\r\n let std = Date.now();\r\n let chs = this._audioData.numberOfChannels;\r\n let chH = h / chs;\r\n\r\n let frameLength = this._audioData.getChannelData(0).length;\r\n\r\n let framesPerPixel = frameLength / w;\r\n let y = 0;\r\n for (let ch = 0; ch < chs; ch++) {\r\n let x = 0;\r\n let psMin = new Float32Array(w);\r\n let psMax = new Float32Array(w);\r\n let framePos = 0;\r\n for (let pii = 0; pii < w; pii++) {\r\n let pMin = 0;\r\n let pMax = 0;\r\n\r\n // calculate pixel min/max amplitude\r\n for (let ai = 0; ai < framesPerPixel; ai++) {\r\n //let framePos=(pii*framesPerPixel)+ai;\r\n let a = this._audioData.getChannelData(ch)[framePos++];\r\n\r\n if (a < pMin) {\r\n pMin = a;\r\n }\r\n if (a > pMax) {\r\n pMax = a;\r\n }\r\n }\r\n psMin[pii] = pMin;\r\n psMax[pii] = pMax;\r\n //console.log(\"Min: \", pMin, \" max: \", pMax);\r\n\r\n }\r\n\r\n g.fillStyle = 'green';\r\n g.strokeStyle = 'green';\r\n\r\n // draw audio signal as single polygon\r\n g.beginPath();\r\n g.moveTo(0, y + (chH / 2) + psMin[0] * chH / 2);\r\n\r\n for (let pii = 0; pii < w; pii++) {\r\n let pv = psMin[pii] * chH / 2;\r\n //console.log(\"Min: \",pv);\r\n g.lineTo(pii, y + (chH / 2) + pv);\r\n }\r\n for (let pii = w; pii >= 0; pii--) {\r\n let pv = psMax[pii] * chH / 2;\r\n //console.log(\"Max: \",pv);\r\n g.lineTo(pii, y + (chH / 2) + pv);\r\n }\r\n g.closePath();\r\n //g.lineTo()\r\n g.fill();\r\n g.stroke();\r\n g.fillStyle = \"yellow\";\r\n g.stroke();\r\n y += chH;\r\n }\r\n\r\n //this.drawPlayPosition();\r\n }\r\n }\r\n }\r\n\r\n setData(audioData: AudioBuffer | null) {\r\n this._audioData = audioData;\r\n this.playFramePosition = 0;\r\n }\r\n}\r\n\r\n","\n export class Complex {\n\n real: number;\n img: number;\n\n public static fromPolarForm(magnitude: number, argument: number): Complex {\n const r = Math.cos(argument) * magnitude;\n const i = Math.sin(argument) * magnitude;\n return new Complex(r, i);\n }\n constructor(real: number, img: number) {\n this.real = real;\n this.img = img;\n }\n public magnitude(): number {\n return Math.sqrt((this.real * this.real) + (this.img * this.img));\n }\n\n public argument(): number {\n return Math.atan2(this.img, this.real);\n }\n\n public add(addC: Complex): Complex {\n return new Complex(this.real + addC.real, this.img + addC.img);\n }\n\n public sub(subC: Complex): Complex {\n return new Complex(this.real - subC.real, this.img - subC.img);\n }\n\n public mult(multC: Complex): Complex {\n const multR = (this.real * multC.real) - (this.img * multC.img);\n const multI = (this.real * multC.img) + (multC.real * this.img);\n return new Complex(multR, multI);\n }\n\n public multReal(multF: number): Complex {\n return new Complex(this.real * multF, this.img * multF);\n }\n\n public div(divisor: Complex): Complex {\n const divReal = divisor.real;\n const divImg = divisor.img;\n const div = (divReal * divReal) + (divImg * divImg);\n const divisionReal = ((this.real * divReal) + (this.img * divImg)) / div;\n const divisionImg = ((divReal * this.img) - (this.real * divImg)) / div;\n\n return new Complex(divisionReal, divisionImg);\n }\n\n public divReal(divisor: number): Complex {\n const div = divisor * divisor;\n const divsionReal = (this.real * divisor) / div;\n const divsionImg = (divisor * this.img) / div;\n\n return new Complex(divsionReal, divsionImg);\n }\n\n public conjugate(): Complex {\n return new Complex(this.real, -this.img);\n }\n\n public equals(c: Complex): boolean {\n if (c === null) {\n return false;\n }\n return (this.real === c.real && this.img === c.img);\n }\n\n public toString(): string {\n return 'Real: ' + this.real + ', Img: ' + this.img;\n }\n }\n","import { Complex } from './complex';\n\n export class DFTFloat32 {\n\n private n: number;\n private m: number;\n\n private cosLookup: Float32Array;\n private sinLookup: Float32Array;\n\n constructor(n: number) {\n this.n = n;\n this.m = Math.log(n) / Math.log(2);\n\n // if(n != (1 << m))throw new RuntimeException(\"length N must be power of 2\");\n\n // lookup tables\n this.cosLookup = new Float32Array(n / 2);\n this.sinLookup = new Float32Array(n / 2);\n\n for (let i = 0; i < n / 2; i++) {\n const arc = (-2 * Math.PI * i) / n;\n this.cosLookup[i] = Math.cos(arc);\n this.sinLookup[i] = Math.sin(arc);\n }\n }\n\n public processReal(srcBuf: Float32Array): Array<Complex> {\n const x = srcBuf.slice();\n const y = new Float32Array(srcBuf.length);\n for (let yi = 0; yi < y.length; yi++) {\n y[yi] = 0.0;\n }\n this.fftCooleyTukey(x, y);\n const rc = new Array<Complex>(x.length);\n for (let i = 0; i < x.length; i++) {\n rc[i] = new Complex(x[i], y[i]);\n }\n return rc;\n }\n\n public processRealMagnitude(srcBuf: Float32Array): Float32Array {\n const x = srcBuf.slice();\n const y = new Float32Array(srcBuf.length);\n for (let yi = 0; yi < y.length; yi++) {\n y[yi] = 0.0;\n }\n this.fftCooleyTukey(x, y);\n const rc = new Float32Array(x.length);\n for (let i = 0; i < x.length; i++) {\n const rcc = new Complex(x[i], y[i]);\n rc[i] = rcc.magnitude();\n }\n return rc;\n }\n\n public fftCooleyTukey(real: Float32Array, img: Float32Array): void {\n let i: number;\n let j = 0;\n let k: number;\n let n1: number;\n let n2: number = this.n / 2;\n let a: number;\n let c: number;\n let s: number;\n let t1: number;\n let t2: number;\n\n for (i = 1; i < this.n - 1; i++) {\n n1 = n2;\n while (j >= n1) {\n j = j - n1;\n n1 = n1 / 2;\n }\n j = j + n1;\n\n if (i < j) {\n t1 = real[i];\n real[i] = real[j];\n real[j] = t1;\n t1 = img[i];\n img[i] = img[j];\n img[j] = t1;\n }\n }\n\n n1 = 0;\n n2 = 1;\n for (i = 0; i < this.m; i++) {\n n1 = n2;\n n2 = n2 + n2;\n a = 0;\n for (j = 0; j < n1; j++) {\n c = this.cosLookup[a];\n s = this.sinLookup[a];\n a += ( 1 << (this.m - i - 1));\n\n for (k = j; k < this.n; k = k + n2) {\n t1 = c * real[k + n1] - s * img[k + n1];\n t2 = s * real[k + n1] + c * img[k + n1];\n real[k + n1] = real[k] - t1;\n img[k + n1] = img[k] - t2;\n real[k] = real[k] + t1;\n img[k] = img[k] + t2;\n }\n }\n }\n }\n\n\n public process(t: Array<Complex>): Array<Complex> {\n const reals: Float32Array = new Float32Array(this.n);\n const imgs: Float32Array = new Float32Array(this.n);\n const trans: Array<Complex> = new Array<Complex>(this.n);\n for (let i = 0; i < this.n; i++) {\n reals[i] = t[i].real;\n imgs[i] = t[i].img;\n }\n this.fftCooleyTukey(reals, imgs);\n for (let i = 0; i < this.n; i++) {\n trans[i] = new Complex(reals[i], imgs[i]);\n }\n return trans;\n\n\n }\n\n }\n export class DFT {\n\n private n: number;\n private m: number;\n\n private cosLookup: Array<number>;\n private sinLookup: Array<number>;\n\n constructor(n: number) {\n this.n = n;\n this.m = Math.log(n) / Math.log(2);\n\n // if(n != (1 << m))throw new RuntimeException(\"length N must be power of 2\");\n\n // lookup tables\n this.cosLookup = new Array<number>(n / 2);\n this.sinLookup = new Array<number>(n / 2);\n\n for (let i = 0; i < n / 2; i++) {\n const arc = (-2 * Math.PI * i) / n;\n this.cosLookup[i] = Math.cos(arc);\n this.sinLookup[i] = Math.sin(arc);\n }\n }\n\n public processReal(srcBuf: Array<number>): Array<Complex> {\n const x = srcBuf.slice();\n const y = new Array<number>(srcBuf.length);\n for (let yi = 0; yi < y.length; yi++) {\n y[yi] = 0.0;\n }\n this.fftCooleyTukey(x, y);\n const rc = new Array<Complex>(x.length);\n for (let i = 0; i < x.length; i++) {\n rc[i] = new Complex(x[i], y[i]);\n }\n return rc;\n }\n\n public fftCooleyTukey(real: Array<number>, img: Array<number>): void {\n let i: number;\n let j = 0;\n let k: number;\n let n1: number;\n let n2: number = this.n / 2;\n let a: number;\n let c: number;\n let s: number;\n let t1: number;\n let t2: number;\n\n for (i = 1; i < this.n - 1; i++) {\n n1 = n2;\n while (j >= n1) {\n j = j - n1;\n n1 = n1 / 2;\n }\n j = j + n1;\n\n if (i < j) {\n t1 = real[i];\n real[i] = real[j];\n real[j] = t1;\n t1 = img[i];\n img[i] = img[j];\n img[j] = t1;\n }\n }\n\n n1 = 0;\n n2 = 1;\n for (i = 0; i < this.m; i++) {\n n1 = n2;\n n2 = n2 + n2;\n a = 0;\n for (j = 0; j < n1; j++) {\n c = this.cosLookup[a];\n s = this.sinLookup[a];\n a += 1 << (this.m - i - 1);\n\n for (k = j; k < this.n; k = k + n2) {\n t1 = c * real[k + n1] - s * img[k + n1];\n t2 = s * real[k + n1] + c * img[k + n1];\n real[k + n1] = real[k] - t1;\n img[k + n1] = img[k] - t2;\n real[k] = real[k] + t1;\n img[k] = img[k] + t2;\n }\n }\n }\n }\n\n\n public process(t: Array<Complex>): Array<Complex> {\n const reals: Array<number> = new Array<number>(this.n);\n const imgs: Array<number> = new Array<number>(this.n);\n const trans: Array<Complex> = new Array<Complex>(this.n);\n for (let i = 0; i < this.n; i++) {\n reals[i] = t[i].real;\n imgs[i] = t[i].img;\n }\n this.fftCooleyTukey(reals, imgs);\n for (let i = 0; i < this.n; i++) {\n trans[i] = new Complex(reals[i], imgs[i]);\n }\n return trans;\n }\n\n }\n\n","\n\n export class Utils {\n public static toHexString(val: number, radix: number, numberOfDigits: number): string {\n const intVal = Math.round(val);\n let str = intVal.toString(radix);\n const countFillChars = numberOfDigits - str.length;\n if (countFillChars > 0) {\n for (let i = 0; i < countFillChars; i++) {\n str = str + 0;\n }\n }\n return str;\n }\n }\n\n","import { Utils } from '../math/utils';\n\n export class CSSUtils {\n\n static toColorString(red: number, green: number, blue: number): string {\n return '#' + Utils.toHexString(red, 16, 2) + Utils.toHexString(green, 16, 2) + Utils.toHexString(blue, 16, 2);\n }\n }\n","import {DFTFloat32} from '../../math/dft';\r\nimport {DSPUtils} from '../../dsp/utils'\r\nimport {CSSUtils} from '../../utils/css_utils'\r\nimport {Marker, Point} from './common';\r\nimport {Component, ElementRef, ViewChild} from \"@angular/core\";\r\nimport {AudioCanvasLayerComponent} from \"./audio_canvas_layer_comp\";\r\nimport {WorkerHelper} from \"../../utils/utils\";\r\n\r\ndeclare function postMessage(message: any, transfer: Array<any>): void;\r\n\r\nconst DEFAULT_DFT_SIZE = 1024;\r\n\r\n@Component({\r\n\r\n selector: 'audio-sonagram',\r\n template: `\r\n <canvas #sonagram height=\"10\"></canvas>\r\n <canvas #bg height=\"10\"></canvas>\r\n <canvas #cursor height=\"10\" (mousedown)=\"selectionStart($event)\" (mouseover)=\"updateCursorCanvas($event)\" (mousemove)=\"updateCursorCanvas($event)\"\r\n (mouseleave)=\"updateCursorCanvas($event, false)\"></canvas>\r\n <canvas #marker height=\"10\"></canvas>`,\r\n\r\n styles: [`:host{\r\n min-height: 0px;\r\n }`,`canvas {\r\n top: 0;\r\n left: 0;\r\n width: 0;\r\n height: 0;\r\n min-height: 0px;\r\n position: absolute;\r\n }`]\r\n\r\n})\r\nexport class Sonagram extends AudioCanvasLayerComponent {\r\n\r\n dft: DFTFloat32;\r\n n: any;\r\n ce!: HTMLDivElement;\r\n sonagramCanvas!: HTMLCanvasElement;\r\n //cursorCanvas: HTMLCanvasElement;\r\n markerCanvas!: HTMLCanvasElement;\r\n @ViewChild('sonagram', { static: true }) sonagramCanvasRef!: ElementRef;\r\n\r\n @ViewChild('marker', { static: true }) markerCanvasRef!: ElementRef;\r\n markers: Array<Marker>;\r\n private _playFramePosition: number|null=null;\r\n\r\n private worker: Worker | null;\r\n private workerURL: string;\r\n private dftSize = DEFAULT_DFT_SIZE;\r\n\r\n constructor(private ref: ElementRef) {\r\n super();\r\n this.worker = null;\r\n this._audioData = null;\r\n this.markers = new Array<Marker>();\r\n this.dft = new DFTFloat32(this.dftSize);\r\n\r\n this.workerURL = WorkerHelper.buildWorkerBlobURL(this.workerFunction)\r\n this._bgColor=null;\r\n this._selectColor='rgba(255,255,0,0.1)'\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n this.ce = this.ref.nativeElement;\r\n this.sonagramCanvas = this.sonagramCanvasRef.nativeElement;\r\n this.sonagramCanvas.style.zIndex = '1';\r\n this.bgCanvas = this.bgCanvasRef.nativeElement;\r\n this.bgCanvas.style.zIndex = '2';\r\n this.cursorCanvas = this.cursorCanvasRef.nativeElement;\r\n this.cursorCanvas.style.zIndex = '4';\r\n this.markerCanvas = this.markerCanvasRef.nativeElement;\r\n this.markerCanvas.style.zIndex = '3';\r\n\r\n this.canvasLayers[0] = this.sonagramCanvas;\r\n this.canvasLayers[1] = this.bgCanvas;\r\n this.canvasLayers[2] = this.cursorCanvas;\r\n this.canvasLayers[3] = this.markerCanvas;\r\n\r\n }\r\n\r\n get playFramePosition(): number|null {\r\n return this._playFramePosition;\r\n }\r\n\r\n set playFramePosition(playFramePosition: number|null) {\r\n this._playFramePosition = playFramePosition;\r\n // this.redraw();\r\n this.drawPlayPosition();\r\n }\r\n\r\n private canvasMousePos(c: HTMLCanvasElement, e: MouseEvent): Point {\r\n const cr = c.getBoundingClientRect();\r\n\r\n const x = e.x - cr.left;\r\n const y = e.y - cr.top;\r\n return new Point(x,y);\r\n }\r\n\r\n drawCursorPosition(e: MouseEvent, show: boolean) {\r\n\r\n if (this.cursorCanvas) {\r\n const w = this.cursorCanvas.width;\r\n const h = this.cursorCanvas.height;\r\n const g = this.cursorCanvas.getContext('2d');\r\n if (g) {\r\n g.clearRect(0, 0, w, h);\r\n if (show) {\r\n const pp = this.canvasMousePos(this.cursorCanvas, e);\r\n let xViewPortPixelpos = e.offsetX;\r\n\r\n g.fillStyle = 'yellow';\r\n g.strokeStyle = 'yellow';\r\n g.beginPath();\r\n g.moveTo(xViewPortPixelpos, 0);\r\n g.lineTo(xViewPortPixelpos, h);\r\n g.closePath();\r\n\r\n g.stroke();\r\n\r\n if (this._audioData) {\r\n\r\n let framePosRound = this.viewPortXPixelToFramePosition(xViewPortPixelpos);\r\n if(framePosRound!=null) {\r\n g.font = '14px sans-serif';\r\n g.fillStyle = 'yellow';\r\n g.fillText(framePosRound.toString(), xViewPortPixelpos + 2, 50);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n drawPlayPosition() {\r\n if (this.markerCanvas) {\r\n var w = this.markerCanvas.width;\r\n var h = this.markerCanvas.height;\r\n var g = this.markerCanvas.getContext(\"2d\");\r\n if (g) {\r\n\r\n g.clearRect(0, 0, w, h);\r\n if(this._playFramePosition!=null) {\r\n let pixelPos = this.frameToViewPortXPixelPosition(this._playFramePosition);\r\n if (pixelPos) {\r\n g.fillStyle = 'red';\r\n g.strokeStyle = 'red';\r\n g.beginPath();\r\n g.moveTo(pixelPos, 0);\r\n g.lineTo(pixelPos, h);\r\n g.closePath();\r\n g.stroke();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // layout() {\r\n //\r\n //\r\n // var offW = this.sonagramCanvas.offsetWidth;\r\n // var offH = this.sonagramCanvas.offsetHeight;\r\n // this.layoutBounds(0, 0, offW, offH, true);\r\n // }\r\n\r\n\r\n // layoutBounds(left: number, top: number, offW: number, offH: number, virtualWidth:number,redraw: boolean) {\r\n //\r\n // const leftStr = left.toString() + 'px';\r\n // this.sonagramCanvas.style.left = leftStr;\r\n // const topStr = top.toString() + 'px';\r\n // this.sonagramCanvas.style.top = topStr;\r\n // this.cursorCanvas.style.top = topStr;\r\n // this.markerCanvas.style.top = topStr;\r\n //\r\n // if (offW) {\r\n // const wStr = offW.toString() + 'px';\r\n // if (redraw) {\r\n //\r\n // this.cursorCanvas.width = offW;\r\n // this.markerCanvas.width = offW;\r\n // }\r\n // this.sonagramCanvas.style.width = wStr;\r\n // this.cursorCanvas.style.width = wStr;\r\n // this.markerCanvas.style.width = wStr;\r\n // }\r\n // if (offH) {\r\n // const hStr = offH.toString() + 'px';\r\n // if (redraw) {\r\n // this.cursorCanvas.height = offH;\r\n // this.markerCanvas.height = offH;\r\n // }\r\n // this.sonagramCanvas.style.height = hStr;\r\n // this.cursorCanvas.style.height = hStr;\r\n // this.markerCanvas.style.height = hStr;\r\n //\r\n // }\r\n // if (redraw) {\r\n // //this.redraw();\r\n // if (offW > 0) {\r\n // if (offH > 0) {\r\n // this.startDraw(left,top,offW, offH,virtualWidth);\r\n // }\r\n // }\r\n // }\r\n // }\r\n\r\n\r\n /*\r\n * Method used as worker code.\r\n */\r\n workerFunction() {\r\n\r\n // Redefine some DSP classes for worker function\r\n // See e.g. audio.math.Complex\r\n class Complex {\r\n\r\n real: number;\r\n img: number;\r\n\r\n public static fromPolarForm(magnitude: number, argument: number): Complex {\r\n const r = Math.cos(argument) * magnitude;\r\n const i = Math.sin(argument) * magnitude;\r\n return new Complex(r, i);\r\n }\r\n\r\n constructor(real: number, img: number) {\r\n this.real = real;\r\n this.img = img;\r\n }\r\n\r\n public magnitude(): number {\r\n return Math.sqrt((this.real * this.real) + (this.img * this.img));\r\n }\r\n\r\n public argument(): number {\r\n return Math.atan2(this.img, this.real);\r\n }\r\n\r\n public add(addC: Complex): Complex {\r\n return new Complex(this.real + addC.real, this.img + addC.img);\r\n }\r\n\r\n public sub(subC: Complex): Complex {\r\n return new Complex(this.real - subC.real, this.img - subC.img);\r\n }\r\n\r\n public mult(multC: Complex): Complex {\r\n const multR = (this.real * multC.real) - (this.img * multC.img);\r\n const multI = (this.real * multC.img) + (multC.real * this.img);\r\n return new Complex(multR, multI);\r\n }\r\n\r\n public multReal(multF: number): Complex {\r\n return new Complex(this.real * multF, this.img * multF);\r\n }\r\n\r\n public div(divisor: Complex): Complex {\r\n const divReal = divisor.real;\r\n const divImg = divisor.img;\r\n const div = (divReal * divReal) + (divImg * divImg);\r\n const divisionReal = ((this.real * divReal) + (this.img * divImg)) / div;\r\n const divisionImg = ((divReal * this.img) - (this.real * divImg)) / div;\r\n\r\n return new Complex(divisionReal, divisionImg);\r\n }\r\n\r\n public divReal(divisor: number): Complex {\r\n const div = divisor * divisor;\r\n const divsionReal = (this.real * divisor) / div;\r\n const divsionImg = (divisor * this.img) / div;\r\n\r\n return new Complex(divsionReal, divsionImg);\r\n }\r\n\r\n public conjugate(): Complex {\r\n return new Complex(this.real, -this.img);\r\n }\r\n\r\n public equals(c: Complex): boolean {\r\n if (c === null) {\r\n return false;\r\n }\r\n return (this.real === c.real && this.img === c.img);\r\n }\r\n\r\n public toString(): string {\r\n return 'Real: ' + this.real + ', Img: ' + this.img;\r\n }\r\n }\r\n\r\n class DFTFloat32 {\r\n\r\n private n: number;\r\n private m: number;\r\n\r\n private cosLookup: Float32Array;\r\n private sinLookup: Float32Array;\r\n\r\n constructor(n: number) {\r\n this.n = n;\r\n this.m = Math.log(n) / Math.log(2);\r\n\r\n // if(n != (1 << m))throw new RuntimeException(\"length N must be power of 2\");\r\n\r\n // lookup tables\r\n this.cosLookup = new Float32Array(n / 2);\r\n this.sinLookup = new Float32Array(n / 2);\r\n\r\n for (let i = 0; i < n / 2; i++) {\r\n const arc = (-2 * Math.PI * i) / n;\r\n this.cosLookup[i] = Math.cos(arc);\r\n this.sinLookup[i] = Math.sin(arc);\r\n }\r\n }\r\n\r\n public processReal(srcBuf: Float32Array): Array<Complex> {\r\n const x = srcBuf.slice();\r\n const y = new Float32Array(srcBuf.length);\r\n for (let yi = 0; yi < y.length; yi++) {\r\n y[yi] = 0.0;\r\n }\r\n this.fftCooleyTukey(x, y);\r\n const rc = new Array<Complex>(x.length);\r\n for (let i = 0; i < x.length; i++) {\r\n rc[i] = new Complex(x[i], y[i]);\r\n }\r\n return rc;\r\n }\r\n\r\n public processRealMagnitude(srcBuf: Float32Array): Float32Array {\r\n const x = srcBuf.slice();\r\n const y = new Float32Array(srcBuf.length);\r\n for (let yi = 0; yi < y.length; yi++) {\r\n y[yi] = 0.0;\r\n }\r\n this.fftCooleyTukey(x, y);\r\n const rc = new Float32Array(x.length);\r\n for (let i = 0; i < x.length; i++) {\r\n const rcc = new Complex(x[i], y[i]);\r\n rc[i] = rcc.magnitude();\r\n }\r\n return rc;\r\n }\r\n\r\n public fftCooleyTukey(real: Float32Array, img: Float32Array): void {\r\n let i: number;\r\n let j = 0;\r\n let k: number;\r\n let n1: number;\r\n let n2: number = this.n / 2;\r\n let a: number;\r\n let c: number;\r\n let s: number;\r\n let t1: number;\r\n let t2: number;\r\n\r\n for (i = 1; i < this.n - 1; i++) {\r\n n1 = n2;\r\n while (j >= n1) {\r\n j = j - n1;\r\n n1 = n1 / 2;\r\n }\r\n j = j + n1;\r\n\r\n if (i < j) {\r\n t1 = real[i];\r\n real[i] = real[j];\r\n real[j] = t1;\r\n t1 = img[i];\r\n img[i] = img[j];\r\n img[j] = t1;\r\n }\r\n }\r\n\r\n n1 = 0;\r\n n2 = 1;\r\n for (i = 0; i < this.m; i++) {\r\n n1 = n2;\r\n n2 = n2 + n2;\r\n a = 0;\r\n for (j = 0; j < n1; j++) {\r\n c = this.cosLookup[a];\r\n s = this.sinLookup[a];\r\n a += (1 << (this.m - i - 1));\r\n\r\n for (k = j; k < this.n; k = k + n2) {\r\n t1 = c * real[k + n1] - s * img[k + n1];\r\n t2 = s * real[k + n1] + c * img[k + n1];\r\n real[k + n1] = real[k] - t1;\r\n img[k + n1] = img[k] - t2;\r\n real[k] = real[k] + t1;\r\n img[k] = img[k] + t2;\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n public process(t: Array<Complex>): Array<Complex> {\r\n const reals: Float32Array = new Float32Array(this.n);\r\n const imgs: Float32Array = new Float32Array(this.n);\r\n const trans: Array<Complex> = new Array<Complex>(this.n);\r\n for (let i = 0; i < this.n; i++) {\r\n reals[i] = t[i].real;\r\n imgs[i] = t[i].img;\r\n }\r\n this.fftCooleyTukey(reals, imgs);\r\n for (let i = 0; i < this.n; i++) {\r\n trans[i] = new Complex(reals[i], imgs[i]);\r\n }\r\n return trans;\r\n\r\n\r\n }\r\n\r\n }\r\n\r\n interface WindowFunction {\r\n getScale(i: number): number;\r\n }\r\n\r\n class GaussianWindow implements WindowFunction {\r\n\r\n public static DEFAULT_SIGMA = 0.3;\r\n // Gaussian window function,\r\n // http://reference.wolfram.com/language/ref/GaussianWindow.html\r\n // val=exp(-50*x*x/9) => sigma=0.3\r\n\r\n private buf: Float32Array;\r\n\r\n constructor(size: number, sigma: number = GaussianWindow.DEFAULT_SIGMA) {\r\n this.buf = new Float32Array(size);\r\n const center = (size - 1) / 2;\r\n for (let i = 0; i < size; i++) {\r\n const quot = (i - center) / (sigma * center);\r\n const exp = -0.5 * quot * quot;\r\n this.buf[i] = Math.exp(exp);\r\n }\r\n }\r\n\r\n getScale(i: number): number {\r\n return this.buf[i];\r\n }\r\n\r\n }\r\n\r\n self.onmessage = function (msg:MessageEvent) {\r\n\r\n let l = msg.data.l;\r\n let w = msg.data.w;\r\n let h = msg.data.h;\r\n let vw = msg.data.vw;\r\n let chs = msg.data.chs;\r\n let audioData = new Array(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n audioData[ch] = new Float32Array(msg.data['audioData'][ch]);\r\n }\r\n\r\n let frameLength = msg.data.frameLength;\r\n let dftSize = msg.data.dftSize;\r\n\r\n let dftBands = dftSize / 2;\r\n let dft = new DFTFloat32(dftSize);\r\n let wf = new GaussianWindow(dftSize);\r\n\r\n let arrSize=w*h*4;\r\n if(arrSize<0){\r\n arrSize=0\r\n }\r\n let imgData = new Uint8ClampedArray(arrSize);\r\n //console.log(\"Render method:\");\r\n if (audioData && arrSize>0) {\r\n let chH = Math.round(h / chs);\r\n let framesPerPixel = frameLength / vw;\r\n //console.log(\"Render: \", w, \"x\", h);\r\n\r\n let b = new Float32Array(dftSize);\r\n let sona = new Array(chs);\r\n\r\n let maxPsd = -Infinity;\r\n let p = 0;\r\n for (let ch = 0; ch < chs; ch++) {\r\n p = ch * frameLength;\r\n let chDataLen=audioData[ch].length;\r\n let x = 0;\r\n // initialize DFT array buffer\r\n sona[ch] = new Array(w);\r\n let framePos = 0;\r\n for (let pii = 0; pii < w; pii++) {\r\n let virtPii = l + pii;\r\n // Position of sample data frame is pixel position mapped to audio frame position.\r\n // Then \"center\" the frame by shifting left by half the DFT size (=dftBands)\r\n framePos = Math.round((virtPii * framesPerPixel)-dftBands);\r\n // fill DFT buffer with windowed sample values\r\n for (let i = 0; i < dftSize; i++) {\r\n let samplePos=framePos + i;\r\n // initialize for negative sample positions and out of bounds positions\r\n let chDat=0;\r\n\r\n // Set audio sample if available\r\n if(samplePos>=0 && samplePos < chDataLen) {\r\n chDat = audioData[ch][samplePos];\r\n }\r\n\r\n // apply Window\r\n b[i] = chDat * wf.getScale(i);\r\n }\r\n // Calc DFT magnitudes\r\n let spectr = dft.processRealMagnitude(b);\r\n\r\n // Get maximum value of spectral energy\r\n for (let s = 0; s < dftBands; s++) {\r\n let psd = (2 * Math.pow(spectr[s], 2)) / dftBands;\r\n if (psd > maxPsd) {\r\n maxPsd = psd;\r\n }\r\n }\r\n // Set render model data for this pixel\r\n sona[ch][pii] = spectr;\r\n }\r\n }\r\n //maxPsd = (2 * Math.pow(max, 2)) / dftBands;\r\n\r\n for (let ch = 0; ch < chs; ch++) {\r\n\r\n for (let pii = 0; pii < w; pii++) {\r\n let allBlack = true;\r\n for (let y = 0; y < chH; y++) {\r\n let freqIdx = Math.round(y * dftBands / chH);\r\n // calculate the one sided power spectral density PSD (f, t) in Pa2/Hz\r\n // PSD(f) proportional to 2|X(f)|2 / (t2 - t1)\r\n let val = sona[ch][pii][freqIdx];\r\n let psd = (2 * Math.pow(val, 2)) / dftBands;\r\n // Calculate logarithmic value\r\n //let psdLog = ips.dsp.DSPUtils.toLevelInDB(psd / maxPsd);\r\n let linearLevel = psd / maxPsd;\r\n let psdLog = 10 * Math.log(linearLevel) / Math.log(10);\r\n // Fixed dynamic Range value of 70dB for now\r\n let dynRangeInDb = 70;\r\n let scaledVal = (psdLog + dynRangeInDb) / dynRangeInDb;\r\n\r\n // are the following checks necessary for clamped array ?\r\n if (scaledVal > 1.0)\r\n scaledVal = 1;\r\n if (scaledVal < 0.0) {\r\n scaledVal = 0;\r\n }\r\n let rgbVal = Math.round(255 * scaledVal);\r\n if (rgbVal < 0) {\r\n //\t\t\t\t\t\t\tSystem.out.println(\"Neg RGB val: \"+rgbVal);\r\n rgbVal = 0;\r\n }\r\n if (rgbVal > 255) {\r\n rgbVal = 255;\r\n }\r\n rgbVal = 255 - rgbVal;\r\n if (rgbVal > 0) {\r\n allBlack = false;\r\n }\r\n let py = chH - y;\r\n let dataPos = ((((ch * chH) + py) * w) + pii) * 4;\r\n imgData[dataPos + 0] = rgbVal; //R\r\n imgData[dataPos + 1] = rgbVal; //G\r\n imgData[dataPos + 2] = rgbVal; //B\r\n imgData[dataPos + 3] = 255; //A (alpha: fully opaque)\r\n }\r\n // if (allBlack) {\r\n // console.log(\"Black: \", pii, \" \", ch);\r\n // }\r\n }\r\n }\r\n }\r\n postMessage({imgData: imgData, l: l, w: msg.data.w, h: msg.data.h, vw: vw}, [imgData.buffer]);\r\n }\r\n }\r\n\r\n startDraw(clear = true) {\r\n if (clear) {\r\n if(this.bounds) {\r\n this.sonagramCanvas.style.left = Math.round(this.bounds.position.left).toString() + 'px';\r\n let intW = Math.round(this.bounds.dimension.width)\r\n let intH = Math.round(this.bounds.dimension.height)\r\n this.sonagramCanvas.width = intW;\r\n this.sonagramCanvas.height = intH;\r\n\r\n let g = this.sonagramCanvas.getContext(\"2d\");\r\n if (g) {\r\n //g.clearRect(0, 0,w, h);\r\n g.fillStyle = \"white\";\r\n g.fillRect(0, 0, intW, intH);\r\n }\r\n }\r\n }\r\n this.startRender();\r\n this.drawCursorLayer()\r\n }\r\n\r\n private startRender() {\r\n\r\n if (this.worker) {\r\n this.worker.terminate();\r\n this.worker = null;\r\n\r\n }\r\n if (this.bounds) {\r\n let w = Math.round(this.bounds.dimension.width);\r\n let h = Math.round(this.bounds.dimension.height);\r\n\r\n\r\n if (this._audioData && w>0 && h>0) {\r\n\r\n this.worker = new Worker(this.workerURL);\r\n //this.wo = new Worker('./worker/sonagram.worker', { type: `module` });\r\n\r\n let chs = this._audioData.numberOfChannels;\r\n\r\n let frameLength = this._audioData.getChannelData(0).length;\r\n let ada = new Array<ArrayBuffer>(chs);\r\n for (let ch = 0; ch < chs; ch++) {\r\n // Need a copy here for the worker, otherwise this.audioData is not accessible after posting to the worker\r\n ada[ch] = this._audioData.getChannelData(ch).buffer.slice(0);\r\n }\r\n let start = Date.now();\r\n if (this.worker) {\r\n this.worker.onmessage = (me) => {\r\n this.drawRendered(me);\r\n if (this.worker) {\r\n this.worker.terminate();\r\n }\r\n this.worker = null;\r\n }\r\n }\r\n if (this.markerCanvas) {\r\n let g = this.markerCanvas.getContext(\"2d\");\r\n if (g) {\r\n g.fillText(\"Rendering...\", 10, 20);\r\n }\r\n\r\n }\r\n this.worker.postMessage({\r\n audioData: ada,\r\n l: Math.round(this.bounds.position.left),\r\n w: w,\r\n h: h,\r\n vw: Math.round(this.virtualDimension.width),\r\n chs: chs,\r\n frameLength: frameLength,\r\n dftSize: this.dftSize\r\n }, ada);\r\n } else {\r\n let g = this.sonagramCanvas.getContext(\"2d\");\r\n if (g) {\r\n g.clearRect(0, 0, w, h);\r\n }\r\n }\r\n }\r\n }\r\n\r\n drawRendered(me: MessageEvent) {\r\n if (this.sonagramCanvas) {\r\n\r\n this.sonagramCanvas.width = me.data.w;\r\n this.sonagramCanvas.height = me.data.h;\r\n let g = this.sonagramCanvas.getContext(\"2d\");\r\n if (g) {\r\n let imgDataArr: Uint8ClampedArray = me.data.imgData;\r\n if (me.data.w > 0 && me.data.h > 0) {\r\n let imgData = g.createImageData(me.data.w, me.data.h);\r\n imgData.data.set(imgDataArr);\r\n g.putImageData(imgData, 0, 0);\r\n }\r\n }\r\n }\r\n this.drawBg()\r\n this.drawPlayPosition();\r\n }\r\n\r\n // synchronous draw (not used anymore)\r\n redraw() {\r\n\r\n let g = this.sonagramCanvas.getContext(\"2d\");\r\n\r\n let w = this.sonagramCanvas.width;\r\n let h = this.sonagramCanvas.height;\r\n if (g) {\r\n g.clearRect(0, 0, w, h);\r\n g.fillStyle = \"white\";\r\n g.fillRect(0, 0, w, h);\r\n if (this._audioData) {\r\n let spectSize = Math.floor(this.dftSize / 2)\r\n let chs = this._audioData.numberOfChannels;\r\n let chH = h / chs;\r\n\r\n let frameLength = this._audioData.getChannelData(0).length;\r\n\r\n let framesPerPixel = frameLength / w;\r\n let y = 0;\r\n // TODO\r\n let b = new Float32Array(this.dftSize)\r\n\r\n let sona = new Array<Array<Float32Array>>(chs);\r\n let max = 0;\r\n let maxPsd = -Infinity;\r\n for (let ch = 0; ch < chs; ch++) {\r\n let x = 0;\r\n sona[ch] = new Array<Float32Array>(w);\r\n\r\n let chData = this._audioData.getChannelData(ch);\r\n // TODO center buffer\r\n\r\n let framePos = 0;\r\n for (let pii = 0; pii < w; pii++) {\r\n framePos = Math.round(pii * framesPerPixel);\r\n // calculate DFT at pixel position\r\n for (let i = 0; i < this.dftSize; i++) {\r\n let chDat = chData[framePos + i];\r\n b[i] = chDat;\r\n }\r\n let spectr = this.dft.processRealMagnitude(b);\r\n sona[ch][pii] = spectr;\r\n // @ts-ignore\r\n let pMax = Math.max.apply(null, spectr);\r\n if (pMax > max) {\r\n max = pMax;\r\n }\r\n\r\n for (let s = 0; s < spectSize; s++) {\r\n let psd = (2 * Math.pow(spectr[s], 2)) / spectSize;\r\n if (psd > maxPsd) {\r\n maxPsd = psd;\r\n }\r\n }\r\n }\r\n }\r\n //console.log(\"max: \", max);\r\n maxPsd = (2 * Math.pow(max, 2)) / spectSize;\r\n for (let ch = 0; ch < chs; ch++) {\r\n\r\n let framePos = 0;\r\n for (let pii = 0; pii < w; pii++) {\r\n framePos = pii * framesPerPixel;\r\n\r\n for (let y = 0; y < h; y++) {\r\n let freqIdx = Math.round(y * spectSize / h);\r\n\r\n // calculate the one sided power spectral density PSD (f, t) in Pa2/Hz\r\n // PSD(f) proportional to 2|X(f)|2 / (t2 - t1)\r\n let val = sona[ch][pii][freqIdx];\r\n let psd = (2 * Math.pow(val, 2)) / spectSize;\r\n\r\n // Calculate logarithmic\r\n let psdLog = DSPUtils.toLevelInDB(psd / maxPsd);\r\n let dynRangeInDb = 70;\r\n let scaledVal = (psdLog + dynRangeInDb) / dynRangeInDb;\r\n\r\n if (scaledVal > 1)\r\n scaledVal = 1;\r\n if (scaledVal < 0) {\r\n scaledVal = 0;\r\n }\r\n let rgbVal = (255 * scaledVal);\r\n if (rgbVal < 0) {\r\n//\t\t\t\t\t\t\tSystem.out.println(\"Neg RGB val: \"+rgbVal);\r\n rgbVal = 0;\r\n }\r\n if (rgbVal > 255) {\r\n rgbVal = 255;\r\n }\r\n rgbVal = 255 - rgbVal;\r\n let colorStr = CSSUtils.toColorString(rgbVal, rgbVal, rgbVal);\r\n g.fillStyle = colorStr;\r\n g.fillRect(pii, chH - y, 1, 1);\r\n }\r\n }\r\n }\r\n this.drawPlayPosition();\r\n }\r\n }\r\n }\r\n\r\n\r\n setData(audioData: AudioBuffer | null) {\r\n this._audioData = audioData;\r\n this.playFramePosition = 0;\r\n //this.redraw();\r\n //this.startRender();\r\n }\r\n\r\n\r\n}\r\n\r\n","import {\r\n ElementRef, AfterViewInit, HostListener, Input, OnInit, Output, EventEmitter\r\n} from '@angular/core'\r\nimport {AudioSignal} from './audiosignal'\r\nimport {Sonagram} from './sonagram'\r\nimport {Marker, Point} from './common'\r\n\r\nimport {Component, ViewChild} from '@angular/core';\r\nimport {Position,Dimension, Rectangle} from \"../../math/2d/geometry\";\r\nimport {AudioClip,Selection} from \"../persistor\";\r\nimport {BasicAudioCanvasLayerComponent} from \"./audio_canvas_layer_comp\";\r\nimport {Element} from \"@angular/compiler\";\r\n\r\n/*\r\n ResizeObserver not yet available in official Typescript declaration\r\n Crreated declaration from IDL until its available.\r\n See specs:\r\n https://www.w3.org/TR/resize-observer\r\n\r\n */\r\n\r\ninterface ResizeObserverSize {\r\n readonly inlineSize:number;\r\n readonly blockSize:number;\r\n};\r\n\r\ndeclare interface ResizeObserverEntry{\r\n readonly target: Element;\r\n readonly contentRect: DOMRectReadOnly ;\r\n readonly borderBoxSize: Array<ResizeObserverSize> ;\r\n readonly contentBoxSize: Array<ResizeObserverSize> ;\r\n readonly devicePixelContentBoxSize: Array<ResizeObserverSize> ;\r\n}\r\n\r\ndeclare interface ResizeObserverCallback {\r\n (entries: Array<ResizeObserverEntry>, observer: ResizeObserver):void;\r\n}\r\n\r\ndeclare enum ResizeObserverBoxOptions {\r\n \"border-box\", \"content-box\", \"device-pixel-content-box\"\r\n};\r\n\r\n// // Declare Resizeobserver\r\n// declare class ResizeObserver{\r\n// constructor(callback: ResizeObserverCallback);\r\n// observe: (el:Element,opts: ResizeObserverBoxOptions | null)=>void;\r\n// unobserve: (el:Element)=>void;\r\n// disconnect: ()=>void;\r\n// }\r\n\r\n/*\r\n * Container component for audio display.\r\n * The display elements are children of a virtual canvas. The virtual canvas makes it possible to have high zoom factors with very wide virtual audio displays.\r\n * Only the visible part of the virtual canvas is implemented as a browser canvas and therefore consuming memory.\r\n * The visible part has the same width as the viewport of the scroll pane parent.\r\n * The virtual canvas itself is implemented as a HTML div element.\r\n * The layout of the component is updated on resize of the parent or changes of the zoom factor.\r\n */\r\n@Component({\r\n\r\n selector: 'app-audio',\r\n template: `\r\n <div #virtualCanvas>\r\n <canvas #divider (mousedown)=\"mousedown($event)\" (mouseover)=\"mouseover($event)\"\r\n (mouseleave)=\"mouseleave($event)\" height=\"10\"></canvas>\r\n <audio-signal [pointerPosition]=\"pointer\" [selecting]=\"selecting\" [selection]=\"selection\" (pointerPositionEventEmitter)=\"pointerPositionChanged($event)\" (selectingEventEmitter)=\"selectingChanged($event)\" (selectedEventEmitter)=\"selectionChanged($event)\"></audio-signal>\r\n <audio-sonagram [pointerPosition]=\"pointer\" [selecting]=\"selecting\" [selection]=\"selection\" (pointerPositionEventEmitter)=\"pointerPositionChanged($event)\" (selectingEventEmitter)=\"selectingChanged($event)\" (selectedEventEmitter)=\"selectionChanged($event)\"></audio-sonagram>\r\n </div>\r\n `,\r\n styles: [`div {\r\n\r\n margin: 0;\r\n padding: 0;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n position: relative; /* TODO container div position must not be 'static' (default) to act as reference for the canvases */\r\n box-sizing: border-box;\r\n transform: none;\r\n }`, `canvas{\r\n top: 0;\r\n left: 0;\r\n width: 0;\r\n height: 0;\r\n cursor: ns-resize;\r\n position: absolute;\r\n zIndex: 1;\r\n transform: none;\r\n }`, `audio-signal {\r\n top: 0;\r\n left: 0;\r\n position: absolute;\r\n zIndex: 1;\r\n transform: none;\r\n }`, `audio-sonagram {\r\n top: 0;\r\n left: 0;\r\n position: absolute;\r\n zIndex: 1;\r\n transform: none;\r\n }`]\r\n\r\n})\r\nexport class AudioClipUIContainer extends BasicAudioCanvasLayerComponent implements OnInit,AfterViewInit{\r\n\r\n private static DIVIDER_PIXEL_SIZE = 10;\r\n\r\n parentE: HTMLElement;\r\n\r\n // Divider canvas\r\n @ViewChild('divider', { static: true }) canvasRef!: ElementRef;\r\n dc!: HTMLCanvasElement;\r\n\r\n // Virtual container\r\n @ViewChild('virtualCanvas', { static: true }) ceRef!: ElementRef;\r\n ce!: HTMLDivElement;\r\n\r\n @ViewChild(AudioSignal, { static: true }) as!: AudioSignal;\r\n @ViewChild(Sonagram, { static: true }) so!: Sonagram;\r\n\r\n private _audioClip:AudioClip | null=null;\r\n pointer: Marker|null=null;\r\n selecting: Selection|null=null;\r\n selection: Selection|null=null;\r\n @Output() selectionEventEmitter = new EventEmitter<Selection>();\r\n private _playFramePosition: number|null=null;\r\n private dragStartMouseY: number | null = null;\r\n private dragStartY: number | null = null;\r\n private dividerPosition = 0.5;\r\n\r\n userAction=false;\r\n\r\n private _xZoom: number | null = null; // pixels per second\r\n\r\n get xZoom(): number | null {\r\n return this._xZoom;\r\n }\r\n\r\n set xZoom(value: number | null) {\r\n this.userAction=true;\r\n this._xZoom = value;\r\n this.layout()\r\n this.userAction=false;\r\n }\r\n\r\n // if true the complete audio file is shown, the display fits to the visible panel, the x-zoom factor is variable, this is the default\r\n private _fixFitToPanel = true;\r\n\r\n set fixFitToPanel(value: boolean) {\r\n this._fixFitToPanel = value;\r\n if (value) {\r\n // we don't need clip bounds\r\n this.bounds=null;\r\n this._xZoom = null;\r\n } else {\r\n // hold current zoom value\r\n //this._xZoom=this.ce.offsetWidth/this._audioData.duration;\r\n }\r\n this.layout()\r\n }\r\n\r\n constructor(private ref: ElementRef) {\r\n super()\r\n this.parentE = this.ref.nativeElement;\r\n }\r\n\r\n ngOnInit() {\r\n this.ce = this.ceRef.nativeElement;\r\n this.dc = this.canvasRef.nativeElement;\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.layout();\r\n let heightListener = new MutationObserver((mrs: Array<MutationRecord>, mo: MutationObserver) => {\r\n\r\n let layout=false;\r\n mrs.forEach((mr: MutationRecord) => {\r\n if (!this.userAction && 'attributes' === mr.type && ('class' === mr.attributeName || 'style' === mr.attributeName)) {\r\n layout=true;\r\n }\r\n });\r\n if(layout){\r\n // re-layout required\r\n this.layout(false);\r\n }\r\n });\r\n\r\n heightListener.observe(this.ce, {attributes: true, childList: true, characterData: true});\r\n heightListener.observe(this.dc, {attributes: true, childList: true, characterData: true});\r\n\r\n let resizeObserver = new ResizeObserver((entries,obs) => {\r\n //console.log(\"Resize observed:\");\r\n entries.forEach((e)=>{\r\n //console.log(e.contentRect.width+\"x\"+e.contentRect.height);\r\n this.layout();\r\n })\r\n });\r\n\r\n resizeObserver.observe(this.ce);\r\n\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event: Event): void {\r\n this.layout();\r\n }\r\n\r\n mouseover(me: MouseEvent) {\r\n this.dividerCursorPosition(me, true);\r\n }\r\n\r\n mouseleave(me: MouseEvent) {\r\n this.dividerCursorPosition(me, false);\r\n }\r\n\r\n mousedown(me: MouseEvent) {\r\n this.dragStartMouseY = me.clientY;\r\n this.dragStartY = this.dc.offsetTop;\r\n this.dragStartMouseY = me.clientY;\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n onMouseup(me: MouseEvent) {\r\n if (this.dragStartY != null) {\r\n this.userAction=true;\r\n this.dividerDrag(me);\r\n this.layout(false);\r\n this.dragStartY = null;\r\n this.userAction=false;\r\n }\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMousemove(me: MouseEvent) {\r\n if (this.dragStartY != null) {\r\n this.userAction=true;\r\n this.dividerDrag(me);\r\n this.layoutScaled();\r\n this.userAction=true;\r\n }\r\n }\r\n\r\n pointerPositionChanged(pp:Marker){\r\n this.pointer=pp\r\n }\r\n\r\n selectingChanged(s:Selection| null){\r\n this.selecting=s\r\n }\r\n\r\n selectionChanged(s:Selection){\r\n this.selection=s\r\n if(this._audioClip){\r\n this._audioClip.selection=s\r\n }\r\n this.selectionEventEmitter.emit(this.selection)\r\n }\r\n\r\n private canvasMousePos(c: HTMLCanvasElement, e: MouseEvent): Point {\r\n const cr = c.getBoundingClientRect();\r\n const x = e.x - cr.left;\r\n const y = e.y - cr.top;\r\n return new Point(x,y);\r\n }\r\n\r\n dividerCursorPosition(e: MouseEvent, show: boolean) {\r\n if (this.dc) {\r\n\r\n const w = this.dc.width;\r\n const h = this.dc.height;\r\n const g = this.dc.getContext('2d');\r\n\r\n const pp = this.canvasMousePos(this.dc, e);\r\n const offX = e.offsetX - this.dc.offsetLeft;\r\n const offY = e.offsetY - this.dc.offsetTop;\r\n\r\n }\r\n }\r\n\r\n dividerDrag(e: MouseEvent) {\r\n if (this.dc && this.dragStartMouseY && this.dragStartY) {\r\n\r\n const dragOffset = e.clientY - this.dragStartMouseY;\r\n const ceHeight = this.ce.offsetHeight;\r\n\r\n let newTop = (this.dragStartY + dragOffset);\r\n if (newTop < 0) {\r\n newTop = 0;\r\n }\r\n if (newTop > ceHeight - AudioClipUIContainer.DIVIDER_PIXEL_SIZE) {\r\n newTop = ceHeight - AudioClipUIContainer.DIVIDER_PIXEL_SIZE;\r\n }\r\n this.dc.style.top = newTop.toString() + 'px';\r\n this.dividerPosition = (this.dc.offsetTop + AudioClipUIContainer.DIVIDER_PIXEL_SIZE / 2) / ceHeight;\r\n if (this.dividerPosition > 1.0) {\r\n this.dividerPosition = 1.0;\r\n }\r\n if (this.dividerPosition < 0.0) {\r\n this.dividerPosition = 0.0;\r\n }\r\n this.drawDivider();\r\n }\r\n }\r\n\r\n\r\n drawDivider() {\r\n const w = this.dc.width;\r\n const h = this.dc.height;\r\n const g = this.dc.getContext('2d');\r\n if (g && w>10 && h>=1) {\r\n g.fillStyle = 'white';\r\n g.fillRect(0, 0, w, h);\r\n g.fillStyle = 'black';\r\n g.fillRect(5, 5, w - 10, 1);\r\n }\r\n }\r\n\r\n clipBounds(clipBounds: Rectangle) {\r\n this.bounds = clipBounds;\r\n this.layout();\r\n }\r\n\r\n currentXZoom(): number | null {\r\n let xz = this._xZoom;\r\n if (xz==null && this._audioData) {\r\n let ow = this.ce.offsetWidth;\r\n if (ow < 1) {\r\n // at least one pixel width to avoid x-zoom zero values\r\n ow = 1;\r\n }\r\n xz = ow / this._audioData.duration;\r\n }\r\n return xz;\r\n }\r\n\r\n private _layout(clear: boolean, redraw: boolean) {\r\n let ceBcr = this.ce.getBoundingClientRect();\r\n\r\n const ceBcrIntW = Math.floor(ceBcr.width);\r\n const ceBcrIntH = Math.floor(ceBcr.height);\r\n\r\n // height available for plugins (audiosignal and sonagram)\r\n let psH = ceBcrIntH - AudioClipUIContainer.DIVIDER_PIXEL_SIZE;\r\n if (psH < 0) {\r\n psH = 0;\r\n }\r\n // audio signal height\r\n const asH = Math.round(psH * this.dividerPosition);\r\n\r\n // sonagram height (rest: available height minus divider height minus audiosignal height)\r\n let soH = ceBcrIntH - AudioClipUIContainer.DIVIDER_PIXEL_SIZE - asH;\r\n if (soH < 0) {\r\n soH = 0;\r\n }\r\n\r\n // sonagram top position\r\n const soTop = asH + AudioClipUIContainer.DIVIDER_PIXEL_SIZE;\r\n\r\n // Visible bounds\r\n // left position\r\n let vbLeft = 0;\r\n // width\r\n let vbWidth = ceBcrIntW;\r\n if (!this._fixFitToPanel && this.bounds) {\r\n vbLeft = Math.round(this.bounds.position.left);\r\n vbWidth = Math.round(this.bounds.dimension.width);\r\n }\r\n\r\n // Divider\r\n // left position\r\n this.dc.style.left = vbLeft + 'px';\r\n // top position\r\n const dTop = asH;\r\n const dTopStr = dTop + 'px';\r\n this.dc.style.top = dTopStr;\r\n // width\r\n this.dc.style.width = vbWidth + 'px';\r\n this.dc.width = vbWidth;\r\n // height\r\n this.dc.height = AudioClipUIContainer.DIVIDER_PIXEL_SIZE;\r\n this.dc.style.height = AudioClipUIContainer.DIVIDER_PIXEL_SIZE.toString() + 'px';\r\n\r\n this.drawDivider();\r\n\r\n\r\n // Virtual dimension, only width is used\r\n let virtualDim = new Dimension(ceBcrIntW, 0)\r\n\r\n // Visible bounds of container\r\n let br = new Rectangle(new Position(vbLeft, 0), new Dimension(vbWidth, ceBcrIntH));\r\n\r\n // Set container bounds\r\n this.layoutBounds(br, virtualDim, false);\r\n\r\n // Visible bounds of audiosignal\r\n let asR = new Rectangle(new Position(vbLeft, 0), new Dimension(vbWidth, asH));\r\n\r\n // Set audiosignal bounds\r\n this.as.layoutBounds(asR, virtualDim, redraw, clear);\r\n\r\n // Visible bounds of sonagram\r\n let soR = new Rectangle(new Position(vbLeft, soTop), new Dimension(vbWidth, soH));\r\n\r\n // Set sonagram bounds\r\n this.so.layoutBounds(soR, virtualDim, redraw, clear);\r\n }\r\n\r\n layoutScaled() {\r\n this._layout(false, false);\r\n }\r\n\r\n layout(clear=true) {\r\n\r\n if(this.ce && this.dc) {\r\n const clientW=this.ce.clientWidth;\r\n if(this._audioData){\r\n if(this._fixFitToPanel) {\r\n // Set the virtual canvas width to the visible width\r\n this.ce.style.width = '100%';\r\n }else{\r\n if (this._xZoom) {\r\n // Set the virtual canvas width according to the value of the user selected xZoom value\r\n const newClW = Math.round( this._xZoom*this._audioData.duration );\r\n this.ce.style.width = newClW + 'px';\r\n } else {\r\n // Set the virtual canvas width to the visible width only\r\n this.ce.style.width = clientW + 'px';\r\n }\r\n }\r\n }\r\n this._layout(clear,true);\r\n }\r\n }\r\n\r\n @Input()\r\n set audioData(audioData: AudioBuffer | null) {\r\n this._audioClip=null\r\n this._audioData=audioData;\r\n this.as.setData(audioData);\r\n this.so.setData(audioData);\r\n this.layout();\r\n }\r\n\r\n get audioData():AudioBuffer|null{\r\n return this._audioData\r\n }\r\n\r\n @Input()\r\n set audioClip(audioClip: AudioClip | null) {\r\n this._audioClip=audioClip\r\n let audioData:AudioBuffer|null=null;\r\n let sel:Selection|null=null;\r\n if(audioClip) {\r\n audioData = audioClip.buffer;\r\n if (this._audioClip) {\r\n this._audioClip.addSelectionObserver((clip) => {\r\n this.selection = clip.selection\r\n });\r\n }\r\n sel=audioClip.selection;\r\n }\r\n this._audioData = audioData;\r\n this.as.setData(this._audioData);\r\n this.so.setData(this._audioData);\r\n this.selecting=null\r\n this.selection=sel\r\n this.layout();\r\n }\r\n\r\n get playFramePosition(): number |null {\r\n return this._playFramePosition;\r\n }\r\n\r\n set playFramePosition(playFramePosition: number|null) {\r\n this._playFramePosition = playFramePosition;\r\n this.as.playFramePosition = playFramePosition;\r\n this.so.playFramePosition = playFramePosition;\r\n }\r\n}\r\n\r\n","import {\r\n Component,\r\n ViewChild,\r\n HostListener, ElementRef, Output, Input,\r\n} from '@angular/core'\r\n\r\n\r\nimport {AudioClipUIContainer} from '../ui/container'\r\nimport {Action} from \"../../action/action\";\r\nimport {Position,Dimension, Rectangle} from \"../../math/2d/geometry\";\r\nimport {AudioClip, Selection} from \"../persistor\";\r\n\r\n@Component({\r\n\r\n selector: 'audio-display-scroll-pane',\r\n\r\n template: `\r\n\r\n <app-audio #audioSignalContainer (selectionEventEmitter)=\"selectionChanged($event)\"></app-audio>\r\n\r\n `,\r\n styles: [\r\n `:host {\r\n flex: 2;\r\n width: 100%;\r\n background: darkgray;\r\n box-sizing: border-box;\r\n height: 100%;\r\n position: relative;\r\n overflow-x: scroll;\r\n overflow-y: auto;\r\n }`,\r\n `app-audio {\r\n\r\n margin: 0;\r\n padding: 0;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n\r\n /*position: absolute;*/\r\n box-sizing: border-box;\r\n }`]\r\n\r\n})\r\nexport class AudioDisplayScrollPane {\r\n\r\n private spEl!:HTMLElement;\r\n\r\n @Output() zoomInAction:Action<void>=new Action('+');\r\n @Output() zoomOutAction:Action<void>=new Action('-');\r\n @Output() zoomSelectedAction:Action<void>=new Action(\"Selected\");\r\n @Output() zoomFitToPanelAction:Action<void>=new Action(\"Fit to panel\");\r\n zoomFixFitToPanelAction:Action<void>=new Action(\"Fix fit to panel\");\r\n\r\n\r\n @ViewChild(AudioClipUIContainer, { static: true })\r\n private ac!: AudioClipUIContainer;\r\n\r\n\r\n\r\n constructor( private ref: ElementRef) {\r\n this.spEl = this.ref.nativeElement;\r\n\r\n this.zoomInAction.onAction = (e) => {\r\n this.ac.fixFitToPanel = false\r\n let oldXZoom = this.ac.currentXZoom()\r\n if(oldXZoom === null){\r\n return;\r\n }\r\n let newXzoom = oldXZoom * 2;\r\n this.ac.xZoom = newXzoom;\r\n\r\n let cbr = new Rectangle(new Position(this.spEl.scrollLeft, this.spEl.scrollTop), new Dimension(this.spEl.clientWidth, this.spEl.clientHeight));\r\n this.ac.clipBounds(cbr);\r\n this.zoomFitToPanelAction.disabled=false\r\n }\r\n this.zoomOutAction.onAction = (e) => {\r\n this.ac.fixFitToPanel = false\r\n let cbr1 = new Rectangle(new Position((this.spEl.scrollLeft / 2) - this.spEl.clientWidth, this.spEl.scrollTop), new Dimension(this.spEl.clientWidth, this.spEl.clientHeight));\r\n this.ac.clipBounds(cbr1);\r\n let oldXZoom = this.ac.currentXZoom()\r\n if(oldXZoom === null){\r\n return;\r\n }\r\n let newXzoom = oldXZoom / 2;\r\n this.ac.xZoom = newXzoom;\r\n\r\n let cbr = new Rectangle(new Position(this.spEl.scrollLeft, this.spEl.scrollTop), new Dimension(this.spEl.clientWidth, this.spEl.clientHeight));\r\n this.ac.clipBounds(cbr);\r\n this.zoomFitToPanelAction.disabled=false\r\n }\r\n\r\n this.zoomFitToPanelAction.onAction = (e) => {\r\n\r\n this.zoomFitToPanelAction.disabled=true\r\n\r\n // set container div width to this (viewport) width\r\n this.ac.ce.style.width=this.spEl.offsetWidth+'px';\r\n\r\n this.ac.fixFitToPanel=true;\r\n }\r\n\r\n this.zoomSelectedAction.onAction = (e) => {\r\n //alert(\"not implemented yet\")\r\n\r\n let s = this.ac.selection\r\n if (s) {\r\n // reset auto fit to panel mode\r\n this.ac.fixFitToPanel = false\r\n\r\n // calculate selection length in seconds\r\n if(this.ac.audioData) {\r\n let sr = this.ac.audioData.sampleRate;\r\n let selFrLen = s.endFrame - s.startFrame;\r\n let selLenInSecs = selFrLen / sr;\r\n // calculate corresponding xZoom value\r\n let newXZoom = this.spEl.clientWidth / selLenInSecs\r\n // apply xZoom\r\n this.ac.xZoom = newXZoom\r\n\r\n // Move viewport to show selection\r\n let x1 = this.ac.frameToXPixelPosition(s.startFrame);\r\n if (x1 !== null) {\r\n this.spEl.scrollLeft = x1;\r\n }\r\n }\r\n this.updateClipBounds()\r\n this.zoomFitToPanelAction.disabled = false\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n updateClipBounds(){\r\n let cbr=new Rectangle(new Position(this.spEl.scrollLeft,this.spEl.scrollTop), new Dimension(this.spEl.clientWidth,this.spEl.clientHeight));\r\n this.ac.clipBounds(cbr);\r\n }\r\n\r\n @HostListener('scroll', ['$event'])\r\n onScroll(se: Event) {\r\n this.updateClipBounds()\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event: Event): void {\r\n this.updateClipBounds()\r\n }\r\n\r\n layout(){\r\n this.ac.layout();\r\n }\r\n\r\n selectionChanged(s:Selection| null){\r\n this.zoomSelectedAction.disabled=(s==null)\r\n }\r\n\r\n set audioData(audioData: AudioBuffer | null) {\r\n this.ac.audioData=audioData;\r\n this.zoomOutAction.disabled=(!audioData)\r\n this.zoomInAction.disabled=(!audioData)\r\n }\r\n\r\n @Input()\r\n set audioClip(audioClip: AudioClip | null) {\r\n\r\n let audioData:AudioBuffer|null=null;\r\n let sel:Selection|null=null;\r\n if(audioClip){\r\n audioData=audioClip.buffer;\r\n sel=audioClip.selection;\r\n audioClip.addSelectionObserver((clip)=>{\r\n this.zoomSelectedAction.disabled=(clip.selection==null)\r\n })\r\n }\r\n\r\n this.selectionChanged(sel)\r\n this.ac.audioClip=audioClip\r\n this.zoomOutAction.disabled=(!audioData)\r\n this.zoomInAction.disabled=(!audioData)\r\n window.setTimeout(()=>{\r\n this.layout();\r\n })\r\n }\r\n\r\n\r\n set playFramePosition(framePos:number){\r\n this.ac.playFramePosition=framePos;\r\n }\r\n\r\n\r\n}\r\n\r\n","import {Component, AfterContentInit, ChangeDetectorRef, Input, ViewChild} from '@angular/core'\r\nimport {Action} from \"../../action/action\";\r\nimport {MatCheckbox, MatCheckboxChange} from \"@angular/material/checkbox\";\r\nimport {AudioClip} from \"../persistor\";\r\n\r\n\r\n @Component({\r\n\r\n selector: 'audio-display-control',\r\n\r\n template: `\r\n <div #controlPanel style=\"display:flex;flex-direction: row;\">\r\n <fieldset>\r\n\r\n <legend>Play</legend>\r\n\r\n <button (click)=\"playStartAction?.perform()\" [disabled]=\"playStartAction?.disabled\"\r\n [style.color]=\"playStartAction?.disabled ? 'grey' : 'green'\" matTooltip=\"Play all\">\r\n <mat-icon>play_arrow</mat-icon>\r\n </button>\r\n <button (click)=\"playSelectionAction?.perform()\" [disabled]=\"playSelectionAction?.disabled\"\r\n [style.color]=\"playSelectionAction?.disabled ? 'grey' : 'green'\" matTooltip=\"Play selection\">\r\n <mat-icon>play_circle_outline</mat-icon>\r\n </button>\r\n <button (click)=\"playStopAction?.perform()\" [disabled]=\"playStopAction?.disabled\"\r\n [style.color]=\"playStopAction?.disabled ? 'grey' : 'yellow'\">\r\n <mat-icon>stop</mat-icon>\r\n </button> \r\n <mat-checkbox #autoplaySelectionCheckbox (change)=\"autoPlaySelectionChange($event)\">Autoplay on select\r\n </mat-checkbox>\r\n </fieldset>\r\n <fieldset>\r\n\r\n <legend>Zoom</legend>\r\n <button (click)=\"zoomFitToPanelAction?.perform()\"\r\n [disabled]=\"zoomFitToPanelAction?.disabled\">{{zoomFitToPanelAction?.name}}</button>\r\n <button (click)=\"zoomOutAction?.perform()\"\r\n [disabled]=\"zoomOutAction?.disabled\">{{zoomOutAction?.name}}</button>\r\n <button (click)=\"zoomInAction?.perform()\"\r\n [disabled]=\"zoomInAction?.disabled\">{{zoomInAction?.name}}</button>\r\n <button (click)=\"zoomSelectedAction?.perform()\"\r\n [disabled]=\"zoomSelectedAction?.disabled\">{{zoomSelectedAction?.name}}</button>\r\n </fieldset>\r\n <fieldset>\r\n <legend>Selection</legend>\r\n {{audioClip?.selection?.leftFrame}} <span\r\n *ngIf=\"audioClip?.selection\">to</span> {{audioClip?.selection?.rightFrame}}\r\n <button (click)=\"clearSelection()\" [disabled]=\"audioClip?.selection==null\"\r\n [style.color]=\"hasSelection() ? 'red' : 'grey'\" matTooltip=\"Clear selection\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n\r\n </fieldset>\r\n </div>`,\r\n styles: [\r\n `:host {\r\n flex: 0;\r\n\r\n }`]\r\n\r\n })\r\n\texport class AudioDisplayControl implements AfterContentInit {\r\n\r\n @Input() audioClip: AudioClip|null=null;\r\n\r\n @ViewChild(MatCheckbox, { static: true })\r\n private autoplaySelectedCheckbox: MatCheckbox|null=null;\r\n @Input() playStartAction: Action<void>|undefined;\r\n @Input() playSelectionAction: Action<void>|undefined;\r\n @Input() playStopAction: Action<void>|undefined;\r\n @Input() zoomInAction: Action<void>|null=null;\r\n @Input() zoomOutAction: Action<void>|null=null;\r\n @Input() zoomFitToPanelAction: Action<void>|undefined;\r\n @Input() zoomSelectedAction: Action<void>|undefined;\r\n @Input() autoPlayOnSelectToggleAction: Action<boolean>|undefined;\r\n\t status:string|null=null;\r\n\r\n\t\taudio:any;\r\n\r\n\t\tconstructor(private ref: ChangeDetectorRef) {\r\n\r\n\t\t}\r\n\r\n ngAfterContentInit() {\r\n\r\n\t\t}\r\n\r\n clearSelection(){\r\n if(this.audioClip!=null){\r\n this.audioClip.selection=null\r\n }\r\n }\r\n\r\n hasSelection():boolean{\r\n let hs=false;\r\n if(this.audioClip){\r\n hs=(this.audioClip.selection!=null);\r\n }\r\n return hs;\r\n }\r\n\r\n autoPlaySelectionChange(ch: MatCheckboxChange) {\r\n if (this.autoPlayOnSelectToggleAction) {\r\n this.autoPlayOnSelectToggleAction.perform(ch.checked)\r\n }\r\n }\r\n\r\n\t\terror(){\r\n\t\t\tthis.status = 'ERROR';\r\n\t\t}\r\n\r\n\r\n }\r\n\r\n","import {\r\n Component,\r\n ViewChild,\r\n ChangeDetectorRef,\r\n AfterViewInit, Input, OnInit, ElementRef,\r\n} from '@angular/core'\r\n\r\nimport {AudioClip, Selection} from './persistor'\r\nimport {ActivatedRoute} from \"@angular/router\";\r\nimport {Action} from \"../action/action\";\r\nimport {AudioDisplayScrollPane} from \"./ui/audio_display_scroll_pane\";\r\n\r\n@Component({\r\n\r\n selector: 'app-audiodisplay',\r\n\r\n template: `\r\n\r\n <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>\r\n\r\n <audio-display-control [audioClip]=\"audioClip\"\r\n [playStartAction]=\"playStartAction\"\r\n [playSelectionAction]=\"playSelectionAction\"\r\n [playStopAction]=\"playStopAction\"\r\n [autoPlayOnSelectToggleAction]=\"autoPlayOnSelectToggleAction\"\r\n [zoomInAction]=\"zoomInAction\"\r\n [zoomOutAction]=\"zoomOutAction\"\r\n [zoomSelectedAction]=\"zoomSelectedAction\"\r\n [zoomFitToPanelAction]=\"zoomFitToPanelAction\"></audio-display-control>\r\n `,\r\n styles: [\r\n `:host {\r\n display: flex;\r\n flex-direction: column;\r\n position: absolute;\r\n bottom: 0px;\r\n height: 100%;\r\n width: 100%;\r\n overflow: hidden;\r\n padding: 20px;\r\n z-index: 5;\r\n box-sizing: border-box;\r\n background-color: rgba(230, 230, 230, 1.0)\r\n }`,`\r\n legend{\r\n margin-left: 1em; padding: 0.2em 0.8em;font-size: 0.8em;\r\n }`,`\r\n fieldset{\r\n border: 1px darkgray solid\r\n }\r\n `]\r\n\r\n})\r\nexport class AudioDisplay implements OnInit,AfterViewInit {\r\n\r\n parentE: HTMLElement;\r\n private _audioClip:AudioClip|null=null\r\n\r\n @Input()\r\n playStartAction: Action<void>|undefined;\r\n @Input()\r\n playStopAction: Action<void>|undefined;\r\n @Input()\r\n playSelectionAction:Action<void>|undefined;\r\n @Input()\r\n autoPlayOnSelectToggleAction!:Action<boolean>|undefined;\r\n\r\n zoomFitToPanelAction!:Action<void>;\r\n zoomSelectedAction!:Action<void>\r\n zoomInAction!:Action<void>;\r\n zoomOutAction!:Action<void>;\r\n\r\n clearSelectionAction!:Action<void>\r\n\r\n status: string;\r\n\r\n audio: any;\r\n\r\n @ViewChild(AudioDisplayScrollPane, { static: true })\r\n audioDisplayScrollPane!: AudioDisplayScrollPane;\r\n\r\n constructor(private route: ActivatedRoute, private ref: ChangeDetectorRef,private eRef:ElementRef) {\r\n //console.log(\"constructor: \"+this.ac);\r\n this.parentE=this.eRef.nativeElement;\r\n this.playStartAction = new Action(\"Start\");\r\n this.playSelectionAction=new Action(\"Play selected\");\r\n this.playStopAction = new Action(\"Stop\");\r\n this.status=\"Player created.\";\r\n\r\n }\r\n\r\n ngOnInit(){\r\n this.zoomSelectedAction=this.audioDisplayScrollPane.zoomSelectedAction\r\n this.zoomFitToPanelAction=this.audioDisplayScrollPane.zoomFitToPanelAction\r\n this.zoomOutAction=this.audioDisplayScrollPane.zoomOutAction\r\n this.zoomInAction=this.audioDisplayScrollPane.zoomInAction\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n this.layout();\r\n let heightListener=new MutationObserver((mrs:Array<MutationRecord>,mo:MutationObserver)=>{\r\n mrs.forEach((mr:MutationRecord)=>{\r\n if('attributes'===mr.type && ('class'===mr.attributeName || 'style'===mr.attributeName)){\r\n this.layout();\r\n }\r\n })\r\n });\r\n heightListener.observe(this.parentE,{attributes: true,childList: true, characterData: true});\r\n }\r\n\r\n\r\n layout(){\r\n this.audioDisplayScrollPane.layout();\r\n }\r\n\r\n\r\n started() {\r\n console.log(\"Play started\");\r\n this.status = 'Playing...';\r\n }\r\n\r\n\r\n @Input()\r\n set audioData(audioBuffer: AudioBuffer){\r\n this.audioDisplayScrollPane.audioData = audioBuffer;\r\n if(this.playStartAction) {\r\n this.playStartAction.disabled = (audioBuffer == null)\r\n }\r\n }\r\n\r\n @Input()\r\n set audioClip(audioClip: AudioClip | null) {\r\n\r\n let audioData:AudioBuffer|null=null;\r\n let sel:Selection|null=null;\r\n if(audioClip){\r\n audioData=audioClip.buffer;\r\n sel=audioClip.selection;\r\n }\r\n this._audioClip=audioClip\r\n this.audioDisplayScrollPane.audioClip = audioClip;\r\n //this.playStartAction.disabled = (audioData!==null)\r\n }\r\n\r\n get audioClip():AudioClip|null{\r\n return this._audioClip\r\n }\r\n\r\n set playFramePosition(playFramePosition:number){\r\n this.audioDisplayScrollPane.playFramePosition = playFramePosition\r\n }\r\n\r\n error() {\r\n this.status = 'ERROR';\r\n }\r\n\r\n}\r\n\r\n","\n\nimport {Directive, ElementRef, Input} from \"@angular/core\";\n@Directive({\n selector: \"[scrollIntoViewToBottom]\"\n})\nexport class ScrollIntoViewDirective{\n\n constructor(private elRef:ElementRef){}\n @Input()\n set scrollIntoViewToBottom(siv:boolean){\n if(siv){\n this.elRef.nativeElement.scrollIntoView(false);\n }\n }\n\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core'\r\nimport {Item} from './item';\r\n\r\n\r\n@Component({\r\n\r\n selector: 'app-sprprogress',\r\n\r\n template: `\r\n\r\n <table class=\"mat-typography\">\r\n <thead>\r\n <tr>\r\n <th>#</th><!--<th>Code</th>-->\r\n <th>Prompt</th>\r\n <th>Status</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngIf=\"items\">\r\n\r\n <tr *ngFor=\"let item of items; let itIdx=index;\"\r\n (click)=\"rowSelect=itIdx\" [class.selRow]=\"itIdx===selectedItemIdx\"\r\n [scrollIntoViewToBottom]=\"itIdx===selectedItemIdx\">\r\n <td>{{itIdx}}</td>\r\n <td class=\"promptDescriptor\">{{item.promptAsString}}</td>\r\n <td>\r\n <mat-icon *ngIf=\"item.recs && item.recs.length>0\">done</mat-icon>\r\n\r\n </td>\r\n </tr>\r\n </ng-container>\r\n\r\n </tbody>\r\n </table>\r\n `,\r\n styles: [`:host {\r\n overflow-x: hidden;\r\n overflow-y: scroll;\r\n padding: 10pt;\r\n /*flex: 0.1 0 300px; \r\n min-width: 300px; */\r\n flex: 0.1 0 content;\r\n background: white;\r\n /* Workaround for Firefox\r\n If the progress table gets long (script with many items) FF increases the height of the overflow progressContainer and\r\n the whole app does not fit into the page anymore. The app overflows and shows a vertical scrollbar for the whole app.\r\n See http://stackoverflow.com/questions/28636832/firefox-overflow-y-not-working-with-nested-flexbox\r\n */\r\n /* min-height:0px; */\r\n min-height: 1px;\r\n }`,\r\n `table {\r\n min-height: 1px;\r\n border-collapse: collapse;\r\n /* Tables do not have a natural min size */\r\n /*min-width: 300px; */\r\n \r\n }\r\n\r\n table, th, td {\r\n border: 1px solid lightgrey;\r\n padding: 0.5em;\r\n \r\n }\r\n\r\n `, `\r\n .selRow {\r\n background: lightblue;\r\n }\r\n `,`.promptDescriptor{\r\n \r\n max-width: 200px;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n }`]\r\n\r\n})\r\nexport class Progress {\r\n @Input() items: Array<Item>|null=null;\r\n @Input() selectedItemIdx = 0;\r\n @Input() enableDownload: boolean=false;\r\n @Output() onRowSelect = new EventEmitter<number>();\r\n @Output()\r\n set rowSelect(rowIdx:number){\r\n this.onRowSelect.emit(rowIdx);\r\n }\r\n\r\n @Output() onShowDoneAction = new EventEmitter<number>();\r\n @Output()\r\n set clickDone(rowIdx:number){\r\n if(this.items &&this.items[rowIdx] && this.items[rowIdx].recs) {\r\n this.onRowSelect.emit(rowIdx);\r\n this.onShowDoneAction.emit(rowIdx);\r\n }\r\n }\r\n\r\n @Output() onDownloadDoneAction = new EventEmitter<number>();\r\n @Output()\r\n set clickDownloadDone(rowIdx:number){\r\n if(this.items && this.items[rowIdx] && this.items[rowIdx].recs) {\r\n this.onRowSelect.emit(rowIdx);\r\n this.onDownloadDoneAction.emit(rowIdx);\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n ViewChild,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n HostListener,\r\n ElementRef,\r\n OnInit,\r\n Renderer2,\r\n HostBinding,\r\n AfterContentChecked\r\n} from \"@angular/core\";\r\n\r\nimport {SimpleTrafficLight} from \"../startstopsignal/ui/simpletrafficlight\";\r\nimport {State as StartStopSignalState} from \"../startstopsignal/startstopsignal\";\r\nimport {Item} from \"./item\";\r\nimport {Block, Text, Mediaitem, PromptItem} from \"../script/script\";\r\nimport {TransportActions} from \"./controlpanel\";\r\nimport {Action} from \"../../action/action\";\r\nimport {AudioDisplay} from \"../../audio/audio_display\";\r\nimport {ProjectService} from \"../project/project.service\";\r\nimport {AudioClip} from \"../../audio/persistor\";\r\n\r\n@Component({\r\n\r\n selector: 'spr-recinstructions',\r\n\r\n template: `\r\n\r\n {{displayText()}}\r\n `,\r\n styles: [`:host {\r\n\r\n justify-content: left; /* align horizontal center */\r\n align-items: flex-start; /* align vertical center */\r\n background: white;\r\n text-align: left;\r\n font-size: 1em;\r\n flex: 0;\r\n width: 100%;\r\n }\r\n `]\r\n})\r\nexport class Recinstructions {\r\n @Input() recinstructions: string|null| undefined;\r\n @Input() selectedItemIdx: number|null|undefined;\r\n @Input() itemCount: number|undefined;\r\n\r\n displayText():string{\r\n let riTxt:string='';\r\n if(this.itemCount && this.selectedItemIdx){\r\n riTxt=riTxt+this.selectedItemIdx+'/'+(this.itemCount-1);\r\n }\r\n if(this.recinstructions){\r\n riTxt=riTxt+': '+this.recinstructions;\r\n }\r\n return riTxt;\r\n }\r\n}\r\n\r\n@Component({\r\n\r\n selector: 'app-sprprompter',\r\n\r\n template: `\r\n\r\n <!--<ng-template [ngIf]=\"text\">{{text}}</ng-template>-->\r\n <!-- <img *ngIf=\"src\" #promptImage [src]=\"srcUrl()\" [height]=\"prompterHeight-20\" /> -->\r\n `,\r\n styles: [`:host {\r\n\r\n justify-content: center; /* align horizontal center */\r\n align-items: center; /* align vertical center */\r\n background: white;\r\n text-align: center;\r\n /* font-size: 2em; */\r\n line-height: 1.2em;\r\n font-weight: bold;\r\n /* Use only natural size of the prompt */\r\n /* The prompter compnent then ets aligned vertically centered */\r\n flex: 0 1;\r\n\r\n }`, `:host(.fill) {\r\n /* Use all space to scale images */\r\n flex: 3;\r\n width: 100%;\r\n height: 100%;\r\n max-height: 100%;\r\n max-width: 100%;\r\n /* A separate flex container might be necessayr to alighn centered */\r\n vertical-align: middle; /* TODO does not work, image is not vertically centered */\r\n }`]\r\n})\r\nexport class Prompter {\r\n @Input() projectName: string | undefined;\r\n private _promptMediaItems: Array<Mediaitem>|null|undefined=null\r\n\r\n @Input() prompterHeight: number=0;\r\n private _text: string|undefined|null = null;\r\n private _src: string|undefined|null = null;\r\n private _blocks: Array<Block>|undefined;\r\n mimetype!: string;\r\n private currPromptChild: HTMLElement|null = null;\r\n\r\n @HostBinding('class.fill') public prompterStyleFill = false;\r\n\r\n constructor(private elRef: ElementRef, private renderer: Renderer2, private projectService: ProjectService) {\r\n\r\n }\r\n\r\n get text() {\r\n return this._text;\r\n }\r\n\r\n get src() {\r\n return this._src;\r\n }\r\n\r\n srcUrl(): string|null{\r\n if (this.projectName && this._src) {\r\n return this.projectService.projectResourceUrl(this.projectName, this._src);\r\n }\r\n return null;\r\n }\r\n\r\n width():number|null{\r\n if(this.elRef){\r\n if(this.elRef.nativeElement){\r\n return this.elRef.nativeElement.clientWidth\r\n }\r\n }\r\n return null;\r\n }\r\n height():number|null{\r\n if(this.elRef){\r\n if(this.elRef.nativeElement){\r\n return this.elRef.nativeElement.clientHeight\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private appendTextElement(parentEl:HTMLElement,txt:Text){\r\n let t: string = <string>txt.text\r\n let txtNd = this.renderer.createText(t)\r\n if(txt.decoration || txt.color){\r\n let spEl = this.renderer.createElement('span')\r\n let styleStr=''\r\n if(txt.decoration) {\r\n styleStr = styleStr +'text-decoration: ' + txt.decoration+';'\r\n }\r\n if(txt.color){\r\n styleStr = styleStr +'color: ' + txt.color+';'\r\n }\r\n spEl.style=styleStr\r\n this.renderer.appendChild(parentEl, spEl)\r\n this.renderer.appendChild(spEl, txtNd)\r\n }else {\r\n this.renderer.appendChild(parentEl, txtNd)\r\n }\r\n }\r\n\r\n @Input() set promptMediaItems(pMis: Array<Mediaitem>|null) {\r\n this._promptMediaItems = pMis\r\n if (this.currPromptChild != null) {\r\n this.renderer.removeChild(this.elRef.nativeElement, this.currPromptChild)\r\n }\r\n if (this._promptMediaItems && this._promptMediaItems.length == 1) {\r\n let mi = this._promptMediaItems[0]\r\n this.mimetype = 'text/plain'\r\n if (mi.mimetype) {\r\n this.mimetype = mi.mimetype.trim();\r\n }\r\n if (this.mimetype === 'text/plain') {\r\n this._text = mi.text\r\n this._src = null;\r\n let prTxt='';\r\n if(this._text){\r\n prTxt=this._text;\r\n }\r\n this.currPromptChild = this.renderer.createText(prTxt);\r\n this.prompterStyleFill = false;\r\n this.renderer.appendChild(this.elRef.nativeElement, this.currPromptChild);\r\n } else if (this.mimetype === 'text/x-prompt') {\r\n //this.rendering=true\r\n this._text=null;\r\n this._src=null;\r\n this._blocks=new Array<Block>();\r\n let pd=mi.promptDoc\r\n if(pd){\r\n let pdBody=pd.body\r\n if(pdBody){\r\n this._blocks=pdBody.blocks;\r\n }\r\n }\r\n\r\n this.prompterStyleFill = false\r\n this.currPromptChild = this.renderer.createElement('div')\r\n if(this._blocks) {\r\n for (let bi = 0; bi < this._blocks.length; bi++) {\r\n let bl = this._blocks[bi]\r\n if ('p' === bl.type) {\r\n let pBlEl = this.renderer.createElement('p')\r\n this.renderer.appendChild(this.currPromptChild, pBlEl)\r\n for (let ti = 0; ti < bl.texts.length; ti++) {\r\n let txt = bl.texts[ti]\r\n if (txt) {\r\n if ('text' === txt.type) {\r\n this.appendTextElement(pBlEl, txt)\r\n } else if ('font' === txt.type) {\r\n let spEl = this.renderer.createElement('span')\r\n let styleStr = ''\r\n if (txt.style) {\r\n styleStr = styleStr + 'font-style: ' + txt.style + ';'\r\n }\r\n if (txt.size) {\r\n styleStr = styleStr + 'font-size: ' + txt.size + ';'\r\n }\r\n if (txt.weight) {\r\n styleStr = styleStr + 'font-weight: ' + txt.weight + ';'\r\n }\r\n spEl.style = styleStr\r\n this.renderer.appendChild(pBlEl, spEl)\r\n this.appendTextElement(spEl, <Text>txt.text)\r\n } else if ('linebreak' === txt.type) {\r\n let brEl = this.renderer.createElement('br')\r\n this.renderer.appendChild(pBlEl, brEl)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this.renderer.appendChild(this.elRef.nativeElement, this.currPromptChild)\r\n //this.rendering=false\r\n } else if (this.mimetype.startsWith('image')) {\r\n this._text = null;\r\n this._src = mi.src\r\n let promptImage = new Image()\r\n\r\n this.currPromptChild = promptImage\r\n this.renderer.appendChild(this.elRef.nativeElement, this.currPromptChild)\r\n this.renderer.setStyle(this.currPromptChild, \"max-width\", \"100%\")\r\n this.renderer.setStyle(this.currPromptChild, \"max-height\", \"100%\")\r\n this.prompterStyleFill = true\r\n // TODO vertical alignment\r\n // https://stackoverflow.com/questions/7273338/how-to-vertically-align-an-image-inside-a-div\r\n\r\n //console.log(promptImage.naturalWidth + \"x\"+promptImage.naturalHeight);\r\n promptImage.onload = (ev: Event) => {}\r\n let srcUrl=this.srcUrl();\r\n if(srcUrl) {\r\n promptImage.src = srcUrl;\r\n }\r\n }\r\n\r\n } else {\r\n this._text = null\r\n this._src = null\r\n }\r\n }\r\n}\r\n\r\nexport const VIRTUAL_HEIGHT = 600;\r\nexport const DEFAULT_PROMPT_FONTSIZE = 48;\r\nexport const MIN_FONT_SIZE=6;\r\nexport const FALLBACK_DEF_USER_AGENT_FONT_SIZE = 14;\r\n\r\n@Component({\r\n\r\n selector: 'app-sprpromptcontainer',\r\n\r\n template: `\r\n <app-sprprompter #prompter [projectName]=\"projectName\" [promptMediaItems]=\"mediaitems\" [style.font-size]=\"fontSize+'px'\" [style.visibility]=\"prDisplay\" [prompterHeight]=\"prompterHeight\"></app-sprprompter>\r\n `\r\n ,\r\n styles: [`:host {\r\n\r\n flex: 3; /* the container consumes all available space */\r\n padding: 10pt;\r\n height: 100%;\r\n max-height: 100%;\r\n\r\n justify-content: center; /* align horizontal center*/\r\n align-items: center; /* align vertical center */\r\n background: white;\r\n text-align: center;\r\n display: flex;\r\n flex-direction: column;\r\n min-height: 0px;\r\n width: 100%;\r\n }\r\n `]\r\n})\r\nexport class PromptContainer implements OnInit,AfterContentChecked {\r\n @Input() projectName: string | undefined;\r\n private _mediaitems: Array<Mediaitem>|null=null;\r\n\r\n prompterHeight: number = VIRTUAL_HEIGHT\r\n fontSize!: number;\r\n fontSizeChange=false\r\n contentChecked=false;\r\n prDisplay='hidden';\r\n defaultStyle!: CSSStyleDeclaration;\r\n defaultFontSizePx!: number;\r\n\r\n autoFontSize=false;\r\n @ViewChild(Prompter, { static: true }) prompter!: Prompter;\r\n\r\n constructor(private elRef:ElementRef){}\r\n\r\n ngOnInit() {\r\n\r\n // fallback\r\n this.defaultFontSizePx = FALLBACK_DEF_USER_AGENT_FONT_SIZE;\r\n // try to parse default user agent font size (no comment about DOM API design ;) )\r\n this.defaultStyle = window.getComputedStyle(this.elRef.nativeElement);\r\n let defFontSizeStr = this.defaultStyle.fontSize;\r\n if (defFontSizeStr) {\r\n defFontSizeStr = defFontSizeStr.trim();\r\n if (defFontSizeStr.endsWith('px')) {\r\n // parseFloat ignores non number characters at the end (again no comment ;) )\r\n this.defaultFontSizePx = parseFloat(defFontSizeStr);\r\n //console.info(\"Default font size: \"+this.defaultFontSizePx)\r\n }\r\n }\r\n this.contentChecked = false;\r\n }\r\n\r\n ngAfterContentChecked(): void {\r\n if(this.autoFontSize) {\r\n if (this.fontSizeChange) {\r\n //console.log(\"ngaftercontentchecked, call fontSizeToFit \");\r\n // check prompter size again\r\n this.fontSizeToFit()\r\n } else {\r\n // font size was checked, but we need to check again after angular content check\r\n if (!this.contentChecked) {\r\n this.contentChecked = true;\r\n //console.log(\"ngaftercontentchecked, not font size changed, call \");\r\n this.fontSizeToFit()\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n @Input() set mediaitems(mediaitems:Array<Mediaitem>|null){\r\n\r\n this._mediaitems = mediaitems\r\n\r\n let mimetype:string|null=null;\r\n if (this._mediaitems && this._mediaitems.length == 1) {\r\n let mi = this._mediaitems[0]\r\n mimetype = 'text/plain'\r\n if (mi.mimetype) {\r\n mimetype = mi.mimetype.trim();\r\n }\r\n if(mi.defaultVirtualViewBox){\r\n this.prompterHeight=mi.defaultVirtualViewBox.height\r\n }\r\n }else{\r\n this.prompterHeight=VIRTUAL_HEIGHT\r\n }\r\n this.prompter.promptMediaItems=this._mediaitems\r\n this.autoFontSize=(mimetype!=null && mimetype.startsWith('text/'));\r\n if(this.autoFontSize){\r\n this.fontSizeChange = true;\r\n this.contentChecked = false\r\n this.prDisplay = 'hidden'\r\n this.layout()\r\n }\r\n }\r\n\r\n get mediaitems():Array<Mediaitem>|null{\r\n return this._mediaitems;\r\n }\r\n\r\n\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event: Event): void {\r\n //console.debug(\"onresize, call fontSizeToFit hook \");\r\n this.layout();\r\n }\r\n\r\n private layout() {\r\n if(this.autoFontSize && this.elRef) {\r\n\r\n this.fontSizeChange=true;\r\n this.contentChecked = false\r\n this.prDisplay = 'hidden'\r\n let elH = this.elRef.nativeElement.offsetHeight;\r\n // prompt text font size should scale according to prompt container height\r\n let scaledSize = Math.round((elH / this.prompterHeight) * DEFAULT_PROMPT_FONTSIZE);\r\n\r\n // min prompt font size is default user agent size\r\n let newSize = Math.max(scaledSize, this.defaultFontSizePx);\r\n if (this.fontSize !== newSize) {\r\n this.fontSize = newSize;\r\n }\r\n\r\n //console.log(\"layout, call fontSizeToFit hook \");\r\n window.setTimeout(() => this.fontSizeToFit())\r\n\r\n }\r\n }\r\n\r\n\r\n private fontSizeToFit(){\r\n if(this.prompter) {\r\n let pW=this.prompter.width();\r\n let pH=this.prompter.height();\r\n if (this._mediaitems && this.elRef && pW && pH) {\r\n let nEl = this.elRef.nativeElement\r\n //console.log(\"prompter: \" + this.prompter.width() + \"x\" + this.prompter.height()+ \" font size: \"+this.fontSize)\r\n if (this.fontSize >= MIN_FONT_SIZE && (pW > nEl.offsetWidth || pH > nEl.offsetHeight)) {\r\n // prompter oversizes prompter container. Decrease font size.\r\n // set invisible during font size checks\r\n this.prDisplay = 'hidden'\r\n // decrease font size\r\n this.fontSize = this.fontSize - 1\r\n // console.log(\"Decreased font size: \"+this.fontSize )\r\n // Set flags\r\n this.fontSizeChange = true\r\n this.contentChecked = false\r\n // hook the next check\r\n window.setTimeout(() => this.fontSizeToFit())\r\n } else {\r\n // prompter fits in prompter container, font size should be fine\r\n\r\n //console.log(\"prDisplay: \"+this.prDisplay)\r\n\r\n //if(this.contentChecked && ! this.fontSizeChange) {\r\n //console.log(\"Display!\")\r\n // set prompter visible now\r\n this.prDisplay = 'visible'\r\n //}\r\n this.fontSizeChange = false\r\n }\r\n //console.log(\"Prompt text width: \"+textSize.width+\" \"+this.elRef.nativeElement.offsetWidth+\"x\"+this.elRef.nativeElement.offsetHeight)\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n@Component({\r\n\r\n selector: 'app-sprpromptingcontainer',\r\n\r\n template: `\r\n <spr-recinstructions [selectedItemIdx]=\"selectedItemIdx\" [itemCount]=\"itemCount\"\r\n [recinstructions]=\"promptItem?.recinstructions?.recinstructions\"></spr-recinstructions>\r\n <app-sprpromptcontainer [projectName]=\"projectName\"\r\n [mediaitems]=\"showPrompt?(promptItem?promptItem.mediaitems:null):null\"></app-sprpromptcontainer>\r\n\r\n `\r\n ,\r\n styles: [`:host {\r\n position: relative;\r\n flex: 3; /* the container consumes all available space */\r\n padding: 10pt;\r\n justify-content: center; /* align horizontal center*/\r\n align-items: center; /* align vertical center */\r\n background: white;\r\n text-align: center;\r\n display: flex;\r\n flex-direction: column;\r\n min-height: 0px;\r\n }\r\n `]\r\n})\r\nexport class PromptingContainer {\r\n @Input() projectName: string | undefined;\r\n @Input() promptItem: PromptItem|null=null;\r\n @Input() showPrompt: boolean=false;\r\n @Input() selectedItemIdx!: number;\r\n @Input() itemCount: number|undefined;\r\n\r\n @Input() transportActions!: TransportActions;\r\n\r\n private e!: HTMLDivElement;\r\n private startX: number | null = null\r\n private touchStartTimeStamp: number | null=null;\r\n\r\n constructor(private ref: ElementRef) {\r\n type TouchStart = {}\r\n }\r\n\r\n ngOnInit() {\r\n this.e = this.ref.nativeElement;\r\n }\r\n\r\n @HostListener('touchstart', ['$event'])\r\n onTouchstart(ev: TouchEvent | any) {\r\n //console.log(\"Touch start! \")\r\n if (!(this.transportActions.fwdAction.disabled &&\r\n this.transportActions.bwdAction.disabled &&\r\n this.transportActions.nextAction.disabled)) {\r\n let targetTouchesLen = ev.targetTouches.length;\r\n //for(let ti=0;ti<ev.targetTouches.length;ti++){\r\n //let t=ev.targetTouches.item(ti);\r\n // All x values are the same ??\r\n //console.log(\"Touch #\"+ti+\": pageX: \"+t.pageX+\" clientX: \"+t.clientX+\" screenX: \"+t.screenX)\r\n //}\r\n if (targetTouchesLen == 1) {\r\n // single touch\r\n let t = ev.targetTouches.item(0);\r\n if (t) {\r\n this.startX = Math.round(t.screenX);\r\n this.touchStartTimeStamp = ev.timeStamp;\r\n this.e.style.transition = 'none';\r\n //console.log(\"Touch start x: \"+this.startX)\r\n }\r\n }\r\n\r\n ev.preventDefault();\r\n }\r\n }\r\n\r\n @HostListener('touchend', ['$event'])\r\n onTouchEnd(ev: TouchEvent | any) {\r\n //console.log(\"Touch end!\")\r\n // Reset offset shift\r\n if (!(this.transportActions.fwdAction.disabled && this.transportActions.bwdAction.disabled &&\r\n this.transportActions.nextAction.disabled)) {\r\n\r\n let changedTouchesLen = ev.changedTouches.length;\r\n //console.log(changedTouchesLen+\" \"+this.startX)\r\n if (changedTouchesLen == 1 && this.startX) {\r\n // single touch\r\n let t = ev.changedTouches.item(0);\r\n if (t) {\r\n let deltaX = Math.round(t.clientX - this.startX);\r\n let touchMoveSpeed = 0;\r\n if (this.touchStartTimeStamp) {\r\n touchMoveSpeed = deltaX / (ev.timeStamp - this.touchStartTimeStamp);\r\n }\r\n let futureDeltaX = deltaX + (800 * touchMoveSpeed);\r\n //console.log(\"DeltaX: \" + deltaX + \" Future deltaX: \" + futureDeltaX + \" width: \" + this.e.offsetWidth)\r\n if (futureDeltaX > this.e.offsetWidth / 2) {\r\n //console.log(\"Swipe right detected!!\")\r\n //this.swipedRight.emit()\r\n if (!this.transportActions.bwdAction.disabled) {\r\n this.transportActions.bwdAction.perform();\r\n }\r\n this.e.style.left = -this.e.offsetLeft + \"px\";\r\n }\r\n if (-futureDeltaX > this.e.offsetWidth / 2) {\r\n //console.log(\"Swipe left detected!!\")\r\n this.e.style.left = -this.e.offsetLeft + \"px\";\r\n //this.swipedLeft.emit()\r\n if (!this.transportActions.nextAction.disabled) {\r\n this.transportActions.nextAction.perform();\r\n } else if (!this.transportActions.fwdAction.disabled) {\r\n this.transportActions.fwdAction.perform();\r\n }\r\n } else {\r\n }\r\n }\r\n }\r\n\r\n // reset animated\r\n this.e.style.transition = \"left 0.8s\";\r\n }\r\n this.startX = null;\r\n this.touchStartTimeStamp = null;\r\n this.e.style.left = \"0px\";\r\n ev.preventDefault();\r\n\r\n }\r\n\r\n @HostListener('touchmove', ['$event'])\r\n onTouchMove(ev: TouchEvent | any) {\r\n //console.log(\"Touch move!\")\r\n if (!(this.transportActions.fwdAction.disabled && this.transportActions.bwdAction.disabled &&\r\n this.transportActions.nextAction.disabled)) {\r\n let targetTouchesLen = ev.targetTouches.length;\r\n if (targetTouchesLen == 1 && this.startX) {\r\n // single touch\r\n let t = ev.targetTouches.item(0);\r\n if (t) {\r\n let deltaX = Math.round(t.screenX - this.startX);\r\n this.e.style.left = deltaX + \"px\";\r\n // console.log(\"Touch move delta x: \"+deltaX)\r\n }\r\n }\r\n ev.preventDefault();\r\n }\r\n }\r\n\r\n @HostListener('touchcancel', ['$event'])\r\n onTouchCancel(ev: TouchEvent | any) {\r\n //console.log(\"Touch cancel!\")\r\n this.e.style.left = \"0px\";\r\n ev.preventDefault();\r\n }\r\n\r\n}\r\n\r\n\r\n@Component({\r\n\r\n selector: 'app-sprprompting',\r\n\r\n template: `\r\n\r\n <app-simpletrafficlight [status]=\"startStopSignalState\"></app-simpletrafficlight>\r\n <app-sprpromptingcontainer [projectName]=\"projectName\" [promptItem]=\"promptItem\" [showPrompt]=\"showPrompt\"\r\n [itemCount]=\"items?.length\" [selectedItemIdx]=\"selectedItemIdx\"\r\n [transportActions]=\"transportActions\"></app-sprpromptingcontainer>\r\n <app-sprprogress fxHide.xs [items]=\"items\" [selectedItemIdx]=\"selectedItemIdx\"\r\n (onRowSelect)=\"itemSelect($event)\"></app-sprprogress>\r\n <div fxHide.xs #asCt [class.active]=\"!audioSignalCollapsed\">\r\n\r\n <app-audiodisplay #audioSignalContainer [class.active]=\"!audioSignalCollapsed\"\r\n [audioClip]=\"displayAudioClip\"\r\n [playStartAction]=\"playStartAction\"\r\n [playSelectionAction]=\"playSelectionAction\"\r\n [autoPlayOnSelectToggleAction]=\"autoPlayOnSelectToggleAction\"\r\n [playStopAction]=\"playStopAction\"></app-audiodisplay>\r\n\r\n\r\n </div>\r\n\r\n\r\n\r\n `,\r\n styles: [`:host {\r\n position: relative;\r\n margin: 0;\r\n padding: 0;\r\n background: lightgrey;\r\n width: 100%; /* use all horizontal available space */\r\n flex: 1; /* ... and fill rest of vertical available space (other components have flex 0) */\r\n\r\n /* Workaround for Firefox\r\n If the progress table gets long (script with many items) FF increases the height of the overflow progressContainer and\r\n the whole app does not fit into the page anymore. The app overflows and shows a vertical scrollbar for the whole app.\r\n See http://stackoverflow.com/questions/28636832/firefox-overflow-y-not-working-with-nested-flexbox\r\n */\r\n min-height: 0px;\r\n\r\n display: flex; /* flex container: left traffic light, right prompter (container) */\r\n flex-direction: row;\r\n flex-wrap: nowrap; /* wrap could completely destroy the layout */\r\n }`, `\r\n app-simpletrafficlight {\r\n margin: 10px;\r\n min-height: 0px;\r\n z-index: 3;\r\n }\r\n `, `\r\n app-sprprogress {\r\n z-index: 3;\r\n }\r\n `, `\r\n div {\r\n display: none;\r\n position: absolute;\r\n\r\n\r\n /* height: 50%; */\r\n /* width: 100%; */\r\n\r\n /* overflow: hidden; */\r\n\r\n /* margin: 20px; */\r\n /* border: 20px; */\r\n z-index: 5;\r\n /*background-color: red; */\r\n }`, `\r\n div.active {\r\n display: flex;\r\n position: absolute;\r\n bottom: 0px;\r\n /*left: 0px; */\r\n\r\n height: 90%;\r\n width: 100%;\r\n\r\n overflow: hidden;\r\n\r\n padding: 0px;\r\n /* margin: 20px; */\r\n /* border: 20px; */\r\n z-index: 5;\r\n box-sizing: border-box;\r\n background-color: rgba(0, 0, 0, 0)\r\n\r\n }`\r\n ]\r\n\r\n})\r\n\r\nexport class Prompting {\r\n @ViewChild(SimpleTrafficLight, { static: true }) simpleTrafficLight!: SimpleTrafficLight;\r\n @ViewChild(AudioDisplay, { static: true }) audioDisplay!: AudioDisplay;\r\n @Input() projectName: string | undefined;\r\n @Input() startStopSignalState!: StartStopSignalState;\r\n @Input() promptItem: PromptItem | null=null;\r\n @Input() showPrompt: boolean=false;\r\n @Input() items: Array<Item>|null=null;\r\n @Input() selectedItemIdx!: number;\r\n @Input() transportActions!: TransportActions;\r\n @Input() enableDownload: boolean=false;\r\n\r\n @Input() audioSignalCollapsed: boolean=true;\r\n @Input() displayAudioClip: AudioClip | null=null;\r\n @Input() playStartAction: Action<void>|undefined;\r\n @Input() playSelectionAction: Action<void>|undefined;\r\n @Input() autoPlayOnSelectToggleAction:Action<boolean>|undefined;\r\n @Input() playStopAction: Action<void>|undefined;\r\n @Output() onItemSelect = new EventEmitter<number>();\r\n @Output() onNextItem = new EventEmitter();\r\n @Output() onPrevItem = new EventEmitter();\r\n\r\n itemSelect(rowIdx: number) {\r\n this.onItemSelect.emit(rowIdx);\r\n }\r\n\r\n nextItem() {\r\n this.onNextItem.emit();\r\n }\r\n\r\n prevItem() {\r\n this.onPrevItem.emit();\r\n }\r\n}\r\n\r\n","export interface Float32ArrayOutStream {\r\n\r\n write(buffers: Array<Float32Array>): number;\r\n\r\n flush(): void;\r\n\r\n close(): void;\r\n}\r\n\r\nexport class Float32ArrayChunkerOutStream implements Float32ArrayOutStream {\r\n\r\n private bufs = new Array<Float32Array>();\r\n private filled: number;\r\n\r\n private _channels: number=0;\r\n private _chunkSize: number=0;\r\n\r\n private receivedFrames: number;\r\n private sentFrames: number;\r\n\r\n constructor(private outStream: Float32ArrayOutStream) {\r\n this.filled = 0;\r\n this.receivedFrames = 0;\r\n this.sentFrames = 0;\r\n }\r\n\r\n private createBuffers() {\r\n this.bufs = new Array<Float32Array>(this._channels);\r\n for (let ch = 0; ch < this._channels; ch++) {\r\n this.bufs[ch] = new Float32Array(this._chunkSize);\r\n }\r\n }\r\n\r\n set chunkSize(chunkSize: number) {\r\n this._chunkSize = chunkSize;\r\n this.createBuffers();\r\n }\r\n\r\n set channels(channels: number) {\r\n this._channels = channels;\r\n this.createBuffers();\r\n }\r\n\r\n write(buffers: Array<Float32Array>): number {\r\n\r\n let copied = 0;\r\n if(buffers.length>0) {\r\n let buffersLen = buffers[0].length;\r\n this.receivedFrames += buffersLen;\r\n let avail = buffersLen;\r\n // Fill out buffers until all values copied\r\n\r\n while (avail > 0) {\r\n let toFill = this._chunkSize - this.filled;\r\n if (toFill > avail) {\r\n toFill = avail;\r\n }\r\n let sliceEnd = copied + toFill;\r\n\r\n // Firefox on Android sends only the first channel\r\n for (let ch = 0; ch < buffersLen; ch++) {\r\n if(buffers[ch]) {\r\n let cpPrt = buffers[ch].slice(copied, sliceEnd);\r\n let buf = this.bufs[ch];\r\n buf.set(cpPrt, this.filled);\r\n }\r\n }\r\n copied += toFill;\r\n avail -= toFill;\r\n this.filled += toFill;\r\n if (this.filled == this._chunkSize) {\r\n this.outStream.write(this.bufs);\r\n this.sentFrames += this.filled;\r\n this.filled = 0;\r\n\r\n }\r\n }\r\n }\r\n return copied;\r\n }\r\n\r\n flush(): void {\r\n if (this.filled > 0) {\r\n let restBufs = new Array<Float32Array>(this._channels);\r\n for (let ch = 0; ch < this._channels; ch++) {\r\n restBufs[ch] = this.bufs[ch].slice(0, this.filled);\r\n }\r\n this.outStream.write(restBufs);\r\n this.outStream.flush();\r\n this.sentFrames += this.filled;\r\n this.filled = 0;\r\n }\r\n }\r\n\r\n\r\n close(): void {\r\n this.outStream.close();\r\n }\r\n}\r\n","import {Float32ArrayChunkerOutStream, Float32ArrayOutStream} from \"../../io/stream\";\r\n\r\nexport interface AudioFloat32OutStream extends Float32ArrayOutStream{\r\n setFormat(channels: number,sampleRate:number):void;\r\n}\r\n\r\nexport interface SequenceAudioFloat32OutStream extends AudioFloat32OutStream{\r\n nextStream():void;\r\n}\r\n\r\n\r\n\r\nexport class SequenceAudioFloat32ChunkerOutStream extends Float32ArrayChunkerOutStream implements SequenceAudioFloat32OutStream{\r\n\r\n private sampleRate:number|null=null;\r\n private sequenceAudioFloat32OutStream:SequenceAudioFloat32OutStream;\r\n constructor(outStream:SequenceAudioFloat32OutStream, private chunkDurationSeconds:number){\r\n super(outStream);\r\n this.sequenceAudioFloat32OutStream=outStream;\r\n }\r\n\r\n setFormat(channels: number,sampleRate:number):void{\r\n this.channels=channels;\r\n this.sampleRate=sampleRate;\r\n this.chunkSize=Math.round(sampleRate*this.chunkDurationSeconds);\r\n this.sequenceAudioFloat32OutStream.setFormat(channels,sampleRate);\r\n }\r\n nextStream():void{\r\n this.sequenceAudioFloat32OutStream.nextStream();\r\n }\r\n}\r\n","import {Action} from '../../action/action'\r\nimport {\r\n Component, ViewChild, Input\r\n} from \"@angular/core\";\r\n\r\nimport { MatDialog} from \"@angular/material/dialog\";\r\nimport {ProgressSpinnerMode} from \"@angular/material/progress-spinner\";\r\n\r\n\r\n@Component({\r\n\r\n selector: 'app-sprstatusdisplay',\r\n\r\n template: `\r\n <p matTooltip=\"Status\">\r\n <mat-progress-spinner *ngIf=\"statusWaiting\" color=\"black\" mode=\"indeterminate\" [diameter]=\"30\" [strokeWidth]=\"5\"></mat-progress-spinner><mat-icon *ngIf=\"statusAlertType==='error'\" style=\"color:red\">report_problem</mat-icon>\r\n {{statusMsg}}\r\n </p>\r\n `,\r\n styles: [`:host {\r\n display: inline;\r\n text-align: left;\r\n font-size: smaller;\r\n }`, `\r\n p {\r\n padding: 4px;\r\n white-space:nowrap;\r\n display: inline-block;\r\n }\r\n `, `\r\n mat-progress-spinner {\r\n color: black;\r\n display: inline-block;\r\n }\r\n `, `\r\n span {\r\n color: red;\r\n }\r\n `]\r\n\r\n})\r\n\r\nexport class StatusDisplay {\r\n @Input() statusAlertType = 'info';\r\n @Input() statusMsg = 'Initialize...';\r\n @Input() statusWaiting =false;\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'app-uploadstatus',\r\n template: `\r\n <mat-progress-spinner [mode]=\"spinnerMode\" [color]=\"status\" [diameter]=\"30\" [strokeWidth]=\"5\" [value]=\"_value\" [matTooltip]=\"toolTipText\"></mat-progress-spinner>\r\n `,\r\n styles: [`:host {\r\n flex: 1;\r\n /* align-self: flex-start; */\r\n /*display: inline; */\r\n text-align: left;\r\n }`,`mat-progress-spinner{\r\n display: inline-block;\r\n }`]\r\n})\r\nexport class UploadStatus {\r\n private _awaitNewUpload=false;\r\n spinnerMode:ProgressSpinnerMode = 'determinate';\r\n _status!:string\r\n _value = 100\r\n displayValue:string|null=null\r\n toolTipText:string=''\r\n\r\n private _updateSpinner(){\r\n\r\n let uplMsg;\r\n if (this._awaitNewUpload || this._value === 0) {\r\n this.spinnerMode = 'indeterminate'\r\n this.displayValue=' '\r\n uplMsg='Preparing upload.'\r\n } else {\r\n this.spinnerMode = 'determinate'\r\n this.displayValue=this._value+'%'\r\n if(this._value===100){\r\n uplMsg = 'Upload complete'\r\n }else {\r\n uplMsg = 'Upload progress: ' + this.displayValue\r\n }\r\n }\r\n if(this.status==='warn'){\r\n uplMsg='Upload error occurred. Please check your network connection. '+uplMsg\r\n }\r\n this.toolTipText=uplMsg\r\n }\r\n\r\n @Input()\r\n set value(value: number) {\r\n this._value = value;\r\n this._updateSpinner()\r\n };\r\n\r\n @Input() set awaitNewUpload(awaitNewUpload:boolean){\r\n this._awaitNewUpload=awaitNewUpload\r\n this._updateSpinner()\r\n }\r\n\r\n @Input() set status(status:string){\r\n this._status=status\r\n this._updateSpinner()\r\n }\r\n\r\n get status():string{\r\n return this._status\r\n }\r\n\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'app-sprprogressdisplay',\r\n template: `\r\n <p>{{progressMsg}}</p>\r\n `,\r\n styles: [`:host {\r\n flex: 1;\r\n /* align-self: flex-start; */\r\n /*display: inline; */\r\n width: 100%;\r\n text-align: left;\r\n }`]\r\n})\r\nexport class ProgressDisplay {\r\n progressMsg = '[itemcode]';\r\n}\r\n\r\n\r\n\r\n\r\nexport class TransportActions {\r\n startAction: Action<void>;\r\n stopAction: Action<void>;\r\n nextAction: Action<void>;\r\n fwdNextAction: Action<void>;\r\n pauseAction: Action<void>;\r\n fwdAction: Action<void>;\r\n bwdAction: Action<void>;\r\n\r\n constructor() {\r\n this.startAction = new Action('Start');\r\n this.stopAction = new Action('Stop');\r\n this.nextAction = new Action('Next');\r\n this.pauseAction = new Action('Pause');\r\n this.fwdNextAction = new Action('Next recording');\r\n this.fwdAction = new Action('Forward');\r\n this.bwdAction = new Action('Backward');\r\n\r\n }\r\n}\r\n\r\n@Component({\r\n\r\n selector: 'app-sprtransport',\r\n\r\n template: `\r\n <button id=\"bwdBtn\" *ngIf=\"navigationEnabled\" (click)=\"actions.bwdAction.perform()\" [disabled]=\"bwdDisabled()\"\r\n mat-raised-button>\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button (click)=\"startStopNextPerform()\" [disabled]=\"startDisabled() && stopDisabled() && nextDisabled()\" mat-raised-button>\r\n <mat-icon [style.color]=\"startStopNextIconColor()\">{{startStopNextIconName()}}</mat-icon><mat-icon *ngIf=\"!nextDisabled()\" [style.color]=\"nextDisabled() ? 'grey' : 'black'\">chevron_right</mat-icon>\r\n <span fxShow.xs=\"false\">{{startStopNextName()}}</span>\r\n </button>\r\n <button (click)=\"actions.pauseAction.perform()\" [disabled]=\"pauseDisabled()\" mat-raised-button>\r\n <mat-icon>pause</mat-icon>\r\n <span fxShow.xs=\"false\">Pause</span>\r\n </button>\r\n <button id=\"fwdNextBtn\" *ngIf=\"navigationEnabled\" fxHide.xs (click)=\"actions.fwdNextAction.perform()\" [disabled]=\"fwdNextDisabled()\" mat-raised-button>\r\n <mat-icon>redo</mat-icon>\r\n </button>\r\n <button id=\"fwdBtn\" *ngIf=\"navigationEnabled\" (click)=\"actions.fwdAction.perform()\" [disabled]=\"fwdDisabled()\" mat-raised-button>\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n\r\n `,\r\n styles: [`:host {\r\n flex: 20;\r\n align-self: center;\r\n width: 100%;\r\n text-align: center;\r\n align-content: center;\r\n margin: 0;\r\n\r\n }`, `\r\n div {\r\n display: inline;\r\n flex: 0;\r\n }`\r\n ]\r\n\r\n})\r\nexport class TransportPanel {\r\n\r\n @Input() readonly!:boolean;\r\n @Input() actions!: TransportActions;\r\n @Input() navigationEnabled=true;\r\n\r\n startStopNextButtonName!:string;\r\n startStopNextButtonIconName!:string;\r\n\r\n startDisabled() {\r\n return !this.actions || this.readonly || this.actions.startAction.disabled\r\n }\r\n\r\n stopDisabled() {\r\n return !this.actions || this.actions.stopAction.disabled\r\n }\r\n\r\n nextDisabled() {\r\n return !this.actions || this.actions.nextAction.disabled || !this.navigationEnabled;\r\n }\r\n\r\n pauseDisabled() {\r\n return !this.actions || this.actions.pauseAction.disabled\r\n }\r\n\r\n fwdDisabled() {\r\n return !this.actions || this.actions.fwdAction.disabled || !this.navigationEnabled;\r\n }\r\n\r\n fwdNextDisabled() {\r\n return !this.actions || this.actions.fwdNextAction.disabled || !this.navigationEnabled;\r\n }\r\n\r\n bwdDisabled() {\r\n return !this.actions || this.actions.bwdAction.disabled || !this.navigationEnabled;\r\n }\r\n\r\n startStopNextName():string{\r\n if(!this.nextDisabled()){\r\n this.startStopNextButtonName= \"Next\"\r\n }else if(!this.startDisabled()){\r\n this.startStopNextButtonName=\"Start\"\r\n }else if(!this.stopDisabled()) {\r\n this.startStopNextButtonName = \"Stop\"\r\n }\r\n return this.startStopNextButtonName;\r\n }\r\n startStopNextIconName():string{\r\n if(!this.startDisabled()){\r\n this.startStopNextButtonIconName=\"fiber_manual_record\"\r\n }else if(!this.stopDisabled()){\r\n this.startStopNextButtonIconName=\"stop\"\r\n }else if(!this.nextDisabled()){\r\n this.startStopNextButtonIconName=\"stop\"\r\n }\r\n return this.startStopNextButtonIconName\r\n }\r\n startStopNextIconColor():string{\r\n if(!this.startDisabled()){\r\n return \"red\"\r\n }else if(!this.stopDisabled() || !this.nextDisabled()){\r\n return \"yellow\"\r\n }else{\r\n return \"grey\";\r\n }\r\n }\r\n\r\n startStopNextPerform(){\r\n if(!this.startDisabled()){\r\n this.actions.startAction.perform();\r\n }else if(!this.stopDisabled()){\r\n this.actions.stopAction.perform();\r\n }else if(!this.nextDisabled()){\r\n this.actions.nextAction.perform();\r\n }\r\n }\r\n\r\n}\r\n\r\n@Component({\r\n\r\n selector: 'app-readystateindicator',\r\n\r\n template: `\r\n <mat-icon [matTooltip]=\"readyStateToolTip\">{{hourGlassIconName}}</mat-icon>\r\n `,\r\n styles: []\r\n})\r\nexport class ReadyStateIndicator {\r\n _ready=true\r\n hourGlassIconName='hourglass_empty'\r\n readyStateToolTip:string=''\r\n\r\n constructor() {}\r\n\r\n @Input() set ready(ready:boolean){\r\n this._ready=ready\r\n this.hourGlassIconName=this._ready?'hourglass_empty':'hourglass_full'\r\n this.readyStateToolTip=this._ready?'Audio processing and upload done. You can leave the page without data loss.':'Please wait until audio processing and upload have finished. Please do not leave the page.'\r\n }\r\n\r\n get ready():boolean{\r\n return this._ready\r\n }\r\n\r\n}\r\n\r\n@Component({\r\n\r\n selector: 'app-sprcontrolpanel',\r\n\r\n template: `\r\n <div fxHide.xs fxLayout=\"row\" >\r\n <app-sprstatusdisplay fxFlex=\"0 0 0\" [statusMsg]=\"statusMsg\" [statusAlertType]=\"statusAlertType\" [statusWaiting]=\"statusWaiting\"\r\n class=\"hidden-xs\"></app-sprstatusdisplay>\r\n <app-sprtransport fxFlex=\"10 0 0\" [readonly]=\"readonly\" [actions]=\"transportActions\" [navigationEnabled]=\"navigationEnabled\"></app-sprtransport>\r\n <app-uploadstatus fxFlex=\"0 0 0\" *ngIf=\"enableUploadRecordings\" [value]=\"uploadProgress\"\r\n [status]=\"uploadStatus\" [awaitNewUpload]=\"processing\"></app-uploadstatus>\r\n <app-readystateindicator [ready]=\"_ready\"></app-readystateindicator>\r\n </div>\r\n <div fxShow.xs fxHide fxLayout=\"column\">\r\n <div fxLayout=\"row\" fxFlexFill>\r\n <app-sprstatusdisplay fxFlex=\"10 0 0\" fxFlexAlign=\"left\" [statusMsg]=\"statusMsg\" [statusAlertType]=\"statusAlertType\" [statusWaiting]=\"statusWaiting\"\r\n class=\"hidden-xs\"></app-sprstatusdisplay>\r\n <app-uploadstatus fxFlex=\"0 0 0\" *ngIf=\"enableUploadRecordings\" [value]=\"uploadProgress\"\r\n [status]=\"uploadStatus\" [awaitNewUpload]=\"processing\"></app-uploadstatus>\r\n <app-readystateindicator [ready]=\"_ready\"></app-readystateindicator>\r\n </div>\r\n <app-sprtransport [readonly]=\"readonly\" [actions]=\"transportActions\" [navigationEnabled]=\"navigationEnabled\"></app-sprtransport>\r\n\r\n </div>\r\n `,\r\n styles: [`div {\r\n align-content: center;\r\n align-items: center;\r\n margin: 0;\r\n padding: 20px;\r\n min-height: min-content; /* important */\r\n }`]\r\n})\r\nexport class ControlPanel {\r\n @ViewChild(StatusDisplay, { static: true }) statusDisplay!: StatusDisplay;\r\n @ViewChild(TransportPanel, { static: true }) transportPanel!: TransportPanel;\r\n\r\n @Input() readonly!:boolean\r\n @Input() transportActions!: TransportActions\r\n @Input() processing=false\r\n @Input() statusMsg!: string;\r\n @Input() statusAlertType!: string;\r\n @Input() statusWaiting!: boolean;\r\n @Input() uploadStatus!: string;\r\n @Input() uploadProgress!: number;\r\n @Input() currentRecording: AudioBuffer| null| undefined;\r\n @Input() enableUploadRecordings!: boolean;\r\n @Input() navigationEnabled=true;\r\n\r\n _ready=true\r\n\r\n constructor(public dialog: MatDialog) {\r\n\r\n }\r\n\r\n @Input() set ready(ready:boolean){\r\n this._ready=ready\r\n }\r\n\r\n get ready():boolean{\r\n return this._ready\r\n }\r\n\r\n}\r\n\r\n\r\n","\r\nimport {Component, Inject} from \"@angular/core\";\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\r\n\r\n@Component({\r\n selector: 'spr-session-finished-dialog',\r\n template: `<h1 mat-dialog-title><mat-icon [style.color]=\"'green'\">done_all</mat-icon> Session finished</h1>\r\n <div mat-dialog-content>\r\n\r\n <p>Thank you! The recording session is complete.</p>\r\n\r\n </div>\r\n <div mat-dialog-actions>\r\n <button mat-button (click)=\"closeDialog()\">OK</button>\r\n </div>\r\n `\r\n})\r\nexport class SessionFinishedDialog{\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<SessionFinishedDialog>,\r\n @Inject(MAT_DIALOG_DATA) public data: any) { }\r\n\r\n closeDialog(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","import {Component, Inject} from \"@angular/core\";\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\r\n\r\n@Component({\r\n selector: 'msg-dialog',\r\n template: `<h1 mat-dialog-title><mat-icon *ngIf=\"data.type==='error'\" [style.color]=\"'red'\">error</mat-icon>\r\n <mat-icon *ngIf=\"data.type==='warning'\" [style.color]=\"'yellow'\">warning</mat-icon>{{data.title}}</h1>\r\n <div mat-dialog-content>\r\n\r\n <p>{{data.msg}}</p>\r\n <p>{{data.advice}}</p>\r\n\r\n </div>\r\n <div mat-dialog-actions>\r\n <button mat-button (click)=\"closeDialog()\">OK</button>\r\n </div>\r\n `\r\n})\r\nexport class MessageDialog{\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<MessageDialog>,\r\n @Inject(MAT_DIALOG_DATA) public data: any) { }\r\n\r\n closeDialog(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","\r\nexport class AudioContextProvider\r\n{\r\n private static _audioContext:AudioContext| null=null;\r\n\r\n public static audioContextInstance():AudioContext|null\r\n {\r\n if (!this._audioContext) {\r\n let debugFail = false;\r\n if (!window.AudioContext || typeof window.AudioContext !== 'function' || debugFail) {\r\n throw new Error('Browser does not support Web Audio API!');\r\n this._audioContext=null;\r\n } else {\r\n this._audioContext= new window.AudioContext();\r\n }\r\n }\r\n return this._audioContext;\r\n }\r\n\r\n}\r\n","import {RecordingFile} from \"../recording\";\r\n\r\nexport class Item {\r\n promptAsString: string;\r\n training: boolean;\r\n recs: Array<RecordingFile> | null;\r\n\r\n constructor(promptAsString: string, training: boolean) {\r\n this.promptAsString = promptAsString;\r\n this.training = training;\r\n this.recs = null;\r\n }\r\n\r\n}\r\n","/**\r\n * Created by klausj on 17.06.2017.\r\n */\r\nimport {Inject, Injectable} from '@angular/core';\r\nimport {HttpClient, HttpErrorResponse, HttpHeaders, HttpResponse} from \"@angular/common/http\";\r\nimport {ApiType, SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../../spr.config\";\r\n\r\nimport {UUID} from \"../../utils/utils\";\r\nimport {RecordingFile, RecordingFileDescriptor} from \"../recording\";\r\nimport {ProjectService} from \"../project/project.service\";\r\nimport {SessionService} from \"../session/session.service\";\r\nimport {Observable} from \"rxjs\";\r\n\r\n\r\nexport const REC_API_CTX='recfile'\r\n\r\n\r\n\r\n@Injectable()\r\nexport class RecordingService {\r\n\r\n public static readonly REC_API_CTX = 'recfile'\r\n private apiEndPoint: string;\r\n private withCredentials: boolean = false;\r\n\r\n //private debugDelay:number=10000;\r\n private debugDelay:number=0;\r\n\r\n constructor(private http: HttpClient, @Inject(SPEECHRECORDER_CONFIG) private config?: SpeechRecorderConfig) {\r\n\r\n this.apiEndPoint = ''\r\n\r\n if (config && config.apiEndPoint) {\r\n this.apiEndPoint = config.apiEndPoint;\r\n }\r\n if (this.apiEndPoint !== '') {\r\n this.apiEndPoint = this.apiEndPoint + '/'\r\n }\r\n if (config != null && config.withCredentials != null) {\r\n this.withCredentials = config.withCredentials;\r\n }\r\n }\r\n\r\n private recFilesUrl(projectName: string, sessId: string | number):string{\r\n let encPrjName=encodeURIComponent(projectName);\r\n let encSessId=encodeURIComponent(sessId);\r\n let recFilesUrl = this.apiEndPoint + ProjectService.PROJECT_API_CTX + '/' + encPrjName + '/' +\r\n SessionService.SESSION_API_CTX + '/' + encSessId + '/' + RecordingService.REC_API_CTX;\r\n return recFilesUrl;\r\n }\r\n\r\n private recFilesReqUrl(projectName: string, sessId: string | number):string{\r\n let recFilesUrl=this.recFilesUrl(projectName,sessId);\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n recFilesUrl = recFilesUrl + '.json?requestUUID=' + UUID.generate();\r\n }\r\n return recFilesUrl;\r\n }\r\n\r\n recordingFileDescrList(projectName: string, sessId: string | number):Observable<Array<RecordingFileDescriptor>> {\r\n let recFilesReqUrl = this.recFilesReqUrl(projectName,sessId);\r\n let wobs = this.http.get<Array<RecordingFileDescriptor>>(recFilesReqUrl,{withCredentials:this.withCredentials});\r\n return wobs;\r\n }\r\n\r\n recordingFileList(projectName: string, sessId: string | number):Observable<Array<RecordingFile>> {\r\n let recFilesReqUrl = this.recFilesReqUrl(projectName,sessId);\r\n let wobs = this.http.get<Array<RecordingFile>>(recFilesReqUrl,{withCredentials:this.withCredentials});\r\n return wobs;\r\n }\r\n\r\n private fetchAudiofile(projectName: string, sessId: string | number, itemcode: string,version:number): Observable<HttpResponse<ArrayBuffer>> {\r\n let recFilesUrl=this.recFilesUrl(projectName,sessId);\r\n let encItemcode=encodeURIComponent(itemcode);\r\n let recUrl = recFilesUrl + '/' + encItemcode +'/'+version;\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n recUrl = recUrl + '.wav?requestUUID=' + UUID.generate();\r\n }\r\n\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Accept', 'audio/wav');\r\n return this.http.get(recUrl, {\r\n headers: headers,\r\n observe: 'response',\r\n responseType: 'arraybuffer',\r\n withCredentials: this.withCredentials\r\n });\r\n\r\n }\r\n\r\n fetchAndApplyRecordingFile(aCtx: AudioContext, projectName: string,recordingFile:RecordingFile):Observable<RecordingFile|null> {\r\n\r\n let wobs = new Observable<RecordingFile|null>(observer=>{\r\n if(recordingFile.session) {\r\n let obs = this.fetchAudiofile(projectName, recordingFile.session, recordingFile.itemCode, recordingFile.version);\r\n obs.subscribe(resp => {\r\n //console.log(\"Fetched audio file. HTTP response status: \"+resp.status+\", type: \"+resp.type+\", byte length: \"+ resp.body.byteLength);\r\n\r\n // Do not use Promise version, which does not work with Safari 13 (13.0.5)\r\n if (resp.body) {\r\n aCtx.decodeAudioData(resp.body, ab => {\r\n recordingFile.audioBuffer = ab;\r\n if (this.debugDelay > 0) {\r\n window.setTimeout(() => {\r\n\r\n observer.next(recordingFile);\r\n observer.complete();\r\n }, this.debugDelay);\r\n } else {\r\n observer.next(recordingFile);\r\n observer.complete();\r\n }\r\n }, error => {\r\n observer.error(error);\r\n observer.complete();\r\n })\r\n } else {\r\n observer.error('Fetching audio file: response has no body');\r\n }\r\n },\r\n (error: HttpErrorResponse) => {\r\n if (error.status == 404) {\r\n // Interpret not as an error, the file ist not recorded yet\r\n observer.next(null);\r\n observer.complete()\r\n } else {\r\n // all other states are errors\r\n observer.error(error);\r\n observer.complete();\r\n }\r\n });\r\n }else{\r\n observer.error();\r\n }\r\n });\r\n\r\n return wobs;\r\n }\r\n\r\n fetchRecordingFile(aCtx: AudioContext, projectName: string, sessId: string | number, itemcode: string,version:number):Observable<RecordingFile|null> {\r\n\r\n let wobs = new Observable<RecordingFile | null>(observer=>{\r\n let obs = this.fetchAudiofile(projectName, sessId, itemcode,version);\r\n\r\n\r\n obs.subscribe(resp => {\r\n // Do not use Promise version, which does not work with Safari 13\r\n if(resp.body) {\r\n aCtx.decodeAudioData(resp.body, ab => {\r\n let rf = new RecordingFile(sessId, itemcode, version, ab);\r\n if (this.debugDelay > 0) {\r\n window.setTimeout(() => {\r\n\r\n observer.next(rf);\r\n observer.complete();\r\n }, this.debugDelay);\r\n } else {\r\n observer.next(rf);\r\n observer.complete();\r\n }\r\n });\r\n }else{\r\n observer.error();\r\n }\r\n },\r\n (error: HttpErrorResponse) => {\r\n if (error.status == 404) {\r\n // Interpret not as an error, the file ist not recorded yet\r\n observer.next(null);\r\n observer.complete()\r\n }else{\r\n // all other states are errors\r\n observer.error(error);\r\n observer.complete();\r\n }\r\n });\r\n });\r\n\r\n return wobs;\r\n }\r\n}\r\n\r\n\r\n\r\n","\nimport {Uploader} from \"../net/uploader\";\nimport {Inject, Injectable} from \"@angular/core\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../spr.config\";\n\n@Injectable()\n export class SpeechRecorderUploader extends Uploader{\n\n constructor(private httpClient:HttpClient,@Inject(SPEECHRECORDER_CONFIG) private config?:SpeechRecorderConfig){\n super(httpClient,(config)?config.withCredentials:false);\n }\n}\n","import {Component, Input} from \"@angular/core\";\r\nimport {SessionService} from \"./session.service\";\r\n\r\n@Component({\r\n\r\n selector: 'app-warningbar',\r\n providers: [SessionService],\r\n template: `\r\n <div [class]=\"displayClass\">{{warningText}}</div>\r\n\r\n `,\r\n styles: [`:host {\r\n\r\n flex: 0 0 content;\r\n background: orange;\r\n\r\n }`,`\r\n .off {\r\n display: none;\r\n }\r\n `,`\r\n .on {\r\n padding: 2px;\r\n display: inline-block;\r\n width: 100%;\r\n font-weight: bold;\r\n font-size: larger;\r\n text-align: center;\r\n }\r\n ` ]\r\n})\r\nexport class WarningBar {\r\n @Input() warningText!:string;\r\n @Input() set show(show:boolean){\r\n if(show){\r\n this.displayClass='on'\r\n }else{\r\n this.displayClass='off'\r\n }\r\n }\r\n displayClass:string='off';\r\n}\r\n","import {Action} from '../../action/action'\r\nimport {AudioCapture, AudioCaptureListener} from '../../audio/capture/capture';\r\nimport {AudioPlayer, AudioPlayerEvent, EventType} from '../../audio/playback/player'\r\nimport {WavWriter} from '../../audio/impl/wavwriter'\r\nimport {Group, PromptItem, PromptitemUtil, Script, Section} from '../script/script';\r\nimport {RecordingFile, RecordingFileDescriptor} from '../recording'\r\nimport {Upload} from '../../net/uploader';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n Renderer2,\r\n ViewChild\r\n} from \"@angular/core\";\r\nimport {SessionService} from \"./session.service\";\r\nimport {State as StartStopSignalState} from \"../startstopsignal/startstopsignal\";\r\nimport {MatDialog} from \"@angular/material/dialog\";\r\nimport {SpeechRecorderUploader} from \"../spruploader\";\r\nimport {SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../../spr.config\";\r\nimport {Session} from \"./session\";\r\nimport {AudioDevice, AutoGainControlConfig} from \"../project/project\";\r\nimport {MIN_DB_LEVEL, RecordingItemDisplay} from \"../../ui/recordingitem_display\";\r\nimport {LevelInfos,LevelMeasure, StreamLevelMeasure} from \"../../audio/dsp/level_measure\";\r\nimport {Prompting} from \"./prompting\";\r\nimport {SequenceAudioFloat32ChunkerOutStream} from \"../../audio/io/stream\";\r\nimport {TransportActions} from \"./controlpanel\";\r\nimport {SessionFinishedDialog} from \"./session_finished_dialog\";\r\nimport {MessageDialog} from \"../../ui/message_dialog\";\r\nimport {RecordingService} from \"../recordings/recordings.service\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {AudioContextProvider} from \"../../audio/context\";\r\nimport {AudioClip} from \"../../audio/persistor\";\r\nimport {Item} from \"./item\";\r\nimport {Browser, UserAgent, UserAgentBuilder} from \"../../utils/ua-parser\";\r\nimport {LevelBar} from \"../../audio/ui/livelevel\";\r\n\r\n\r\nexport const FORCE_REQUEST_AUDIO_PERMISSIONS=false;\r\nexport const RECFILE_API_CTX = 'recfile';\r\n\r\n\r\nconst MAX_RECORDING_TIME_MS = 1000 * 60 * 60 * 60; // 1 hour\r\nconst DEFAULT_PRE_REC_DELAY=1000;\r\nconst DEFAULT_POST_REC_DELAY=500;\r\n\r\nconst LEVEL_BAR_INTERVALL_SECONDS = 0.1; // 100ms\r\nexport const enum Mode {SERVER_BOUND, STAND_ALONE}\r\n\r\nexport const enum Status {\r\n BLOCKED, IDLE, PRE_RECORDING, RECORDING, POST_REC_STOP, POST_REC_PAUSE, STOPPING_STOP, STOPPING_PAUSE, ERROR\r\n}\r\n\r\n\r\n\r\n// TODO enum not possible in template language , use string for now\r\n//export enum StatusAlertType {INFO,WARN,ERROR};\r\n\r\n@Component({\r\n\r\n selector: 'app-sprrecordingsession',\r\n providers: [SessionService],\r\n template: `\r\n <app-warningbar [show]=\"isTestSession()\" warningText=\"Test recording only!\"></app-warningbar>\r\n <app-warningbar [show]=\"isDefaultAudioTestSession()\" warningText=\"This test uses default audio device! Regular sessions may require a particular audio device (microphone)!\"></app-warningbar>\r\n <app-sprprompting [projectName]=\"projectName\"\r\n [startStopSignalState]=\"startStopSignalState\" [promptItem]=\"promptItem\" [showPrompt]=\"showPrompt\"\r\n [items]=\"items\"\r\n [transportActions]=\"transportActions\"\r\n [selectedItemIdx]=\"promptIndex\" (onItemSelect)=\"itemSelect($event)\" (onNextItem)=\"nextItem()\" (onPrevItem)=\"prevItem()\"\r\n [audioSignalCollapsed]=\"audioSignalCollapsed\" [displayAudioClip]=\"displayAudioClip\"\r\n [playStartAction]=\"controlAudioPlayer?.startAction\"\r\n [playSelectionAction]=\"controlAudioPlayer?.startSelectionAction\"\r\n [autoPlayOnSelectToggleAction]=\"controlAudioPlayer?.autoPlayOnSelectToggleAction\"\r\n [playStopAction]=\"controlAudioPlayer?.stopAction\">\r\n\r\n </app-sprprompting>\r\n <mat-progress-bar [value]=\"progressPercentValue()\" fxShow=\"false\" fxShow.xs=\"true\" ></mat-progress-bar>\r\n\r\n\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" [ngStyle]=\"{'height.px':100,'min-height.px': 100}\" [ngStyle.xs]=\"{'height.px':125,'min-height.px': 125}\">\r\n <audio-levelbar fxFlex=\"1 0 1\" [streamingMode]=\"isRecording()\" [displayLevelInfos]=\"displayLevelInfos\"></audio-levelbar>\r\n <div fxLayout=\"row\">\r\n <spr-recordingitemcontrols fxFlex=\"10 0 1\"\r\n [audioLoaded]=\"displayAudioClip?.buffer!==null\"\r\n [playStartAction]=\"controlAudioPlayer?.startAction\"\r\n [playStopAction]=\"controlAudioPlayer?.stopAction\"\r\n [peakDbLvl]=\"peakLevelInDb\"\r\n [agc]=\"this.ac?.agcStatus\"\r\n (onShowRecordingDetails)=\"audioSignalCollapsed=!audioSignalCollapsed\">\r\n </spr-recordingitemcontrols>\r\n <app-uploadstatus class=\"ricontrols dark\" fxHide fxShow.xs fxFlex=\"0 0 0\" *ngIf=\"enableUploadRecordings\" [value]=\"uploadProgress\"\r\n [status]=\"uploadStatus\" [awaitNewUpload]=\"processingRecording\"></app-uploadstatus>\r\n <app-readystateindicator class=\"ricontrols dark\" fxHide fxShow.xs fxFlex=\"0 0 0\" [ready]=\"dataSaved && !isActive()\"></app-readystateindicator>\r\n </div>\r\n </div>\r\n <div #controlpanel class=\"controlpanel\" fxLayout=\"row\">\r\n <div fxFlex=\"1 1 30%\" fxLayoutAlign=\"start center\">\r\n <app-sprstatusdisplay fxHide.xs [statusMsg]=\"statusMsg\" [statusAlertType]=\"statusAlertType\" [statusWaiting]=\"statusWaiting\"></app-sprstatusdisplay>\r\n </div>\r\n <app-sprtransport fxFlex=\"10 0 30%\" fxLayoutAlign=\"center center\" [readonly]=\"readonly\" [actions]=\"transportActions\" [navigationEnabled]=\"items==null || items.length>1\"></app-sprtransport>\r\n <div fxFlex=\"1 1 30%\" fxLayoutAlign=\"end center\" fxLayout=\"row\">\r\n <app-uploadstatus class=\"ricontrols\" fxHide.xs fxLayoutAlign=\"end center\" *ngIf=\"enableUploadRecordings\" [value]=\"uploadProgress\"\r\n [status]=\"uploadStatus\" [awaitNewUpload]=\"processingRecording\"></app-uploadstatus>\r\n <app-readystateindicator class=\"ricontrols\" fxLayoutAlign=\"end center\" fxHide.xs [ready]=\"dataSaved && !isActive()\"></app-readystateindicator>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`:host {\r\n flex: 2;\r\n background: lightgrey;\r\n display: flex; /* Vertical flex container: Bottom transport panel, above prompting panel */\r\n flex-direction: column;\r\n margin: 0;\r\n padding: 0;\r\n min-height: 0px;\r\n\r\n /* Prevents horizontal scroll bar on swipe right */\r\n overflow: hidden;\r\n }`,`.ricontrols {\r\n padding: 4px;\r\n box-sizing: border-box;\r\n height: 100%;\r\n }`,`.dark {\r\n background: darkgray;\r\n }`,`.controlpanel {\r\n align-content: center;\r\n align-items: center;\r\n margin: 0;\r\n padding: 20px;\r\n min-height: min-content; /* important */\r\n }`]\r\n})\r\nexport class SessionManager implements AfterViewInit,OnDestroy, AudioCaptureListener {\r\n\r\n @Input() projectName:string|undefined;\r\n enableUploadRecordings: boolean = true;\r\n enableDownloadRecordings: boolean = false;\r\n status: Status = Status.BLOCKED;\r\n\r\n ac: AudioCapture|null=null;\r\n private _channelCount = 2; //TODO define constant for default format\r\n private _selectedDeviceId:string|undefined=undefined;\r\n @ViewChild(Prompting, { static: true }) prompting!: Prompting;\r\n @ViewChild(LevelBar, { static: true }) liveLevelDisplay!: LevelBar;\r\n\r\n @Input() dataSaved=true\r\n\r\n\r\n startStopSignalState!: StartStopSignalState;\r\n // Property audioDevices from project config: list of names of allowed audio devices.\r\n private _audioDevices: Array<AudioDevice> | null| undefined;\r\n private selCaptureDeviceId: ConstrainDOMString | null;\r\n\r\n private _autoGainControlConfigs: Array<AutoGainControlConfig> | null| undefined;\r\n\r\n private updateTimerId: any;\r\n private preRecTimerId: number|null=null;\r\n private preRecTimerRunning: boolean|null=null;\r\n private postRecTimerId: number|null=null;\r\n private postRecTimerRunning: boolean|null=null;\r\n private maxRecTimerId: number|null=null;\r\n private maxRecTimerRunning: boolean|null=null;\r\n\r\n transportActions: TransportActions;\r\n dnlLnk!: HTMLAnchorElement;\r\n playStartAction: Action<void>;\r\n audio: any;\r\n\r\n _session: Session|null=null;\r\n _script!: Script;\r\n\r\n private _promptIndex=0;\r\n private section!: Section;\r\n group!: Group;\r\n promptItem!:PromptItem;\r\n showPrompt!: boolean;\r\n\r\n // index of current section\r\n sectIdx!: number;\r\n // index of current group in section\r\n groupIdxInSection!: number;\r\n // index of current prompt item in group\r\n promptItemIdxInGroup!: number;\r\n\r\n private autorecording!: boolean;\r\n\r\n items: Array<Item>|null=null;\r\n //selectedItemIdx: number;\r\n private _displayRecFile: RecordingFile | null=null;\r\n private displayRecFileVersion!: number;\r\n displayAudioClip: AudioClip | null=null;\r\n\r\n displayLevelInfos: LevelInfos | null=null;\r\n\r\n peakLevelInDb:number=MIN_DB_LEVEL;\r\n\r\n promptItemCount!: number;\r\n\r\n readonly=false\r\n\r\n statusMsg!: string;\r\n statusAlertType!: string;\r\n statusWaiting!: boolean;\r\n\r\n processingRecording=false\r\n\r\n uploadProgress: number = 100;\r\n uploadStatus: string = 'ok'\r\n audioSignalCollapsed = true;\r\n\r\n private streamLevelMeasure: StreamLevelMeasure;\r\n private levelMeasure: LevelMeasure;\r\n private _controlAudioPlayer!: AudioPlayer;\r\n\r\n private audioFetchSubscription:Subscription|null=null;\r\n\r\n private destroyed=false;\r\n\r\n private navigationDisabled=true;\r\n\r\n private userAgent:UserAgent;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef,\r\n private renderer: Renderer2,\r\n public dialog: MatDialog,\r\n private sessionService:SessionService,\r\n private recFileService:RecordingService,\r\n private uploader: SpeechRecorderUploader,\r\n @Inject(SPEECHRECORDER_CONFIG) public config?: SpeechRecorderConfig) {\r\n this.status = Status.IDLE;\r\n this.transportActions = new TransportActions();\r\n this.playStartAction = new Action('Play');\r\n this.audio = document.getElementById('audio');\r\n this.selCaptureDeviceId = null;\r\n this.levelMeasure = new LevelMeasure();\r\n this.streamLevelMeasure = new StreamLevelMeasure();\r\n this.userAgent=UserAgentBuilder.userAgent();\r\n console.debug(\"Detected platform: \"+this.userAgent.detectedPlatform);\r\n console.debug(\"Detected browser: \"+this.userAgent.detectedBrowser);\r\n\r\n if (this.config && this.config.enableUploadRecordings !== undefined) {\r\n this.enableUploadRecordings = this.config.enableUploadRecordings;\r\n }\r\n if (this.config && this.config.enableDownloadRecordings !== undefined) {\r\n this.enableDownloadRecordings = this.config.enableDownloadRecordings;\r\n }\r\n this.init();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.streamLevelMeasure.levelListener = this.liveLevelDisplay;\r\n this.streamLevelMeasure.peakLevelListener=(peakLvlInDb)=>{\r\n this.peakLevelInDb=peakLvlInDb;\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n ngOnDestroy() {\r\n this.destroyed=true;\r\n // TODO stop capture /playback\r\n }\r\n\r\n private init() {\r\n this.sectIdx = 0;\r\n this.groupIdxInSection = 0;\r\n this.promptItemIdxInGroup = 0;\r\n this.autorecording = false;\r\n this.transportActions.startAction.disabled = true;\r\n this.transportActions.stopAction.disabled = true;\r\n this.transportActions.nextAction.disabled = true;\r\n this.transportActions.pauseAction.disabled = true;\r\n this.playStartAction.disabled = true;\r\n let context:AudioContext|null=null;\r\n try {\r\n context = AudioContextProvider.audioContextInstance()\r\n } catch (err) {\r\n this.status = Status.ERROR;\r\n let errMsg = err.message;\r\n this.statusMsg = 'ERROR: ' + errMsg;\r\n this.statusAlertType = 'error';\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Error',\r\n msg: errMsg,\r\n advise: 'Please use a supported browser.',\r\n }\r\n });\r\n return;\r\n }\r\n if(context) {\r\n console.info(\"State of audio context: \" + context.state)\r\n }else{\r\n console.info(\"No audio context available!\");\r\n }\r\n if (!context || !navigator.mediaDevices) {\r\n this.status = Status.ERROR;\r\n let errMsg = 'Browser does not support Media streams!';\r\n this.statusMsg = 'ERROR: ' + errMsg;\r\n this.statusAlertType = 'error';\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Error',\r\n msg: errMsg,\r\n advise: 'Please use a supported browser.',\r\n }\r\n });\r\n return;\r\n } else {\r\n this.ac = new AudioCapture(context);\r\n if (this.ac) {\r\n this.transportActions.startAction.onAction = () => this.startItem();\r\n this.ac.listener = this;\r\n this.ac.audioOutStream = new SequenceAudioFloat32ChunkerOutStream(this.streamLevelMeasure, LEVEL_BAR_INTERVALL_SECONDS);\r\n // Don't list the devices here. If we do not have audio permissions we only get anonymized devices without labels.\r\n //this.ac.listDevices();\r\n } else {\r\n this.transportActions.startAction.disabled = true;\r\n let errMsg = 'Browser does not support Media/Audio API!';\r\n this.statusMsg = 'ERROR: ' + errMsg;\r\n this.statusAlertType = 'error';\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Error',\r\n msg: errMsg,\r\n advise: 'Please use a supported browser.',\r\n }\r\n });\r\n return;\r\n }\r\n this.transportActions.stopAction.onAction = () => this.stopItem();\r\n this.transportActions.nextAction.onAction = () => this.stopItem();\r\n this.transportActions.pauseAction.onAction = () => this.pauseItem();\r\n this.transportActions.fwdAction.onAction = () => this.nextItem();\r\n this.transportActions.fwdNextAction.onAction = () => this.nextUnrecordedItem();\r\n this.transportActions.bwdAction.onAction = () => this.prevItem();\r\n this.playStartAction.onAction = () => this.controlAudioPlayer.start();\r\n\r\n }\r\n\r\n this.startStopSignalState = StartStopSignalState.OFF;\r\n\r\n}\r\n\r\n @HostListener('window:keypress', ['$event'])\r\n onKeyPress(ke: KeyboardEvent) {\r\n if (ke.key == ' ') {\r\n this.transportActions.startAction.perform();\r\n this.transportActions.nextAction.perform();\r\n }\r\n }\r\n\r\n @HostListener('window:keydown', ['$event'])\r\n onKeyDown(ke: KeyboardEvent) {\r\n if (ke.key == ' ' || ke.key == 'Escape') {\r\n this.transportActions.stopAction.perform();\r\n }\r\n if (ke.key == 'p' || ke.key == 'Escape') {\r\n this.transportActions.pauseAction.perform();\r\n }\r\n if (ke.key == 'MediaPlayPause') {\r\n this.playStartAction.perform();\r\n }\r\n if (ke.key === 'ArrowRight') {\r\n this.transportActions.fwdAction.perform();\r\n }\r\n if (ke.key === 'ArrowLeft') {\r\n this.transportActions.bwdAction.perform();\r\n }\r\n }\r\n\r\n progressPercentValue():number {\r\n let v=100;\r\n if(this.items) {\r\n v=this.promptIndex * 100 / (this.items.length - 1);\r\n }\r\n return v;\r\n }\r\n isTestSession():boolean {\r\n return ((this._session!=null) && (this._session.type === 'TEST' || this._session.type==='TEST_DEF_A' || this._session.type === 'SINUS_TEST'));\r\n }\r\n\r\n isDefaultAudioTestSession():boolean {\r\n return ((this._session!=null) && (this._session.type==='TEST_DEF_A'));\r\n }\r\n\r\n isDefaultAudioTestSessionOverwriteingProjectRequirements():boolean {\r\n return ((this._session!=null) && (this._session.type==='TEST_DEF_A') && (this.audioDevices!=null) && this.audioDevices.length>0)\r\n }\r\n\r\n\r\n set controlAudioPlayer(controlAudioPlayer: AudioPlayer) {\r\n if (this._controlAudioPlayer) {\r\n //this._controlAudioPlayer.listener=null;\r\n }\r\n this._controlAudioPlayer = controlAudioPlayer;\r\n if (this._controlAudioPlayer) {\r\n this._controlAudioPlayer.listener = this;\r\n }\r\n }\r\n\r\n get controlAudioPlayer(): AudioPlayer {\r\n return this._controlAudioPlayer;\r\n }\r\n\r\n set session(session: Session) {\r\n this._session = session;\r\n }\r\n\r\n set script(script: any) {\r\n this._script = script;\r\n this.loadScript();\r\n }\r\n\r\n set channelCount(channelCount: number) {\r\n this._channelCount = channelCount;\r\n }\r\n\r\n set audioDevices(audioDevices: Array<AudioDevice> | null|undefined) {\r\n this._audioDevices = audioDevices;\r\n }\r\n\r\n set autoGainControlConfigs(autoGainControlConfigs: Array<AutoGainControlConfig>|null|undefined){\r\n this._autoGainControlConfigs=autoGainControlConfigs;\r\n }\r\n\r\n update(e: AudioPlayerEvent) {\r\n if (e.type == EventType.STARTED) {\r\n this.playStartAction.disabled = true;\r\n this.updateTimerId = window.setInterval(() => {\r\n //this.audioSignal.playFramePosition = this.ap.playPositionFrames;\r\n }, 50);\r\n } else if (e.type == EventType.STOPPED || e.type == EventType.ENDED) {\r\n window.clearInterval(this.updateTimerId);\r\n // this.audioSignal.playFramePosition = this.ap.playPositionFrames;\r\n this.playStartAction.disabled = (!(this.displayRecFile));\r\n\r\n }\r\n }\r\n\r\n get promptIndex():number{\r\n return this._promptIndex;\r\n }\r\n\r\n set promptIndex(promptIndex:number){\r\n if(promptIndex<0 || promptIndex>=this.promptItemCount){\r\n throw new Error(\"Prompt index out of range\")\r\n }\r\n let i = 0;\r\n let sections=this._script.sections;\r\n let found=false;\r\n for (let si = 0; si < sections.length && !found; si++) {\r\n let section = sections[si];\r\n let gs = section._shuffledGroups;\r\n for (let gi = 0; gi < gs.length; gi++) {\r\n let pis=gs[gi]._shuffledPromptItems;\r\n\r\n let pisSize = pis.length;\r\n if (promptIndex < i + pisSize) {\r\n this.sectIdx = si;\r\n this.groupIdxInSection=gi;\r\n this.promptItemIdxInGroup = promptIndex - i;\r\n found=true;\r\n break;\r\n } else {\r\n i += pisSize;\r\n }\r\n }\r\n }\r\n if(found){\r\n this._promptIndex=promptIndex;\r\n }else{\r\n throw new Error(\"Internal error: Prompt index not found\")\r\n }\r\n this.applyItem();\r\n }\r\n\r\n itemSelect(itemIdx: number) {\r\n if (this.status === Status.IDLE) {\r\n this.promptIndex=itemIdx;\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n startItem() {\r\n this.transportActions.startAction.disabled = true;\r\n this.transportActions.pauseAction.disabled = true;\r\n if(this.readonly){\r\n return\r\n }\r\n this.transportActions.fwdAction.disabled = true\r\n this.transportActions.fwdNextAction.disabled = true\r\n this.transportActions.bwdAction.disabled = true\r\n this.displayRecFile = null;\r\n this.displayRecFileVersion = 0;\r\n this.displayAudioClip = null;\r\n this.showRecording();\r\n if (this.section.mode === 'AUTORECORDING') {\r\n this.autorecording = true;\r\n }\r\n\r\n if(this.ac!=null) {\r\n if (!this.ac.opened) {\r\n if (this._selectedDeviceId) {\r\n console.log(\"Open session with audio device Id: \\'\" + this._selectedDeviceId + \"\\' for \" + this._channelCount + \" channels\");\r\n } else {\r\n console.log(\"Open session with default audio device for \" + this._channelCount + \" channels\");\r\n }\r\n this.ac.open(this._channelCount, this._selectedDeviceId,this._autoGainControlConfigs);\r\n } else {\r\n this.ac.start();\r\n }\r\n }\r\n }\r\n\r\n\r\n private loadScript() {\r\n this.promptItemCount = 0;\r\n\r\n this.items = new Array<Item>();\r\n let ln = 0;\r\n\r\n //TODO randomize not supported\r\n for (let si = 0; si < this._script.sections.length; si++) {\r\n let section = this._script.sections[si];\r\n let gs = section._shuffledGroups;\r\n for(let gi=0;gi<gs.length;gi++) {\r\n\r\n let pis = gs[gi]._shuffledPromptItems;\r\n\r\n let pisLen = pis.length;\r\n this.promptItemCount += pisLen;\r\n for (let piSectIdx = 0; piSectIdx < pisLen; piSectIdx++) {\r\n let pi = pis[piSectIdx];\r\n let promptAsStr = PromptitemUtil.toPlainTextString(pi);\r\n\r\n let it = new Item(promptAsStr, section.training);\r\n this.items.push(it);\r\n ln++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n promptIndexByItemcode(itemcode:string):number|null{\r\n let pix = 0;\r\n\r\n for (let si = 0; si < this._script.sections.length; si++) {\r\n let section = this._script.sections[si];\r\n let gs = section._shuffledGroups;\r\n for(let gi=0;gi<gs.length;gi++) {\r\n let pis=gs[gi]._shuffledPromptItems;\r\n let pisLen = pis.length;\r\n for (let piSectIdx = 0; piSectIdx < pisLen; piSectIdx++) {\r\n let pi = pis[piSectIdx];\r\n let ic=pi.itemcode;\r\n if(ic === itemcode){\r\n return pix;\r\n }\r\n pix++;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n clearPrompt() {\r\n //this.prompting.promptContainer.prompter.promptText='';\r\n //this.mediaitem = null;\r\n this.showPrompt = false;\r\n this.changeDetectorRef.detectChanges()\r\n }\r\n\r\n applyPrompt() {\r\n //this.prompting.promptContainer.prompter.promptText=this.promptUnit.mediaitems[0].text;\r\n //this.promptText = this.promptUnit.mediaitems[0].text;\r\n //this.mediaitem=this.promptUnit.mediaitems[0];\r\n this.showPrompt = true;\r\n this.changeDetectorRef.detectChanges()\r\n }\r\n\r\n downloadRecording() {\r\n if (this.displayRecFile) {\r\n let ab: AudioBuffer|null = this.displayRecFile.audioBuffer;\r\n let ww = new WavWriter();\r\n if(ab) {\r\n let wavFile = ww.writeAsync(ab, (wavFile) => {\r\n let blob = new Blob([wavFile], {type: 'audio/wav'});\r\n let rfUrl = URL.createObjectURL(blob);\r\n\r\n let dataDnlLnk = this.renderer.createElement('a');\r\n //dataDnlLnk.name = 'Recording';\r\n dataDnlLnk.href = rfUrl;\r\n\r\n this.renderer.appendChild(document.body, dataDnlLnk);\r\n\r\n // download property not yet in TS def\r\n if (this.displayRecFile) {\r\n let fn = this.displayRecFile.filenameString();\r\n fn += '_' + this.displayRecFileVersion;\r\n fn += '.wav';\r\n dataDnlLnk.download = fn;\r\n dataDnlLnk.click();\r\n }\r\n this.renderer.removeChild(document.body, dataDnlLnk);\r\n });\r\n }\r\n }\r\n }\r\n\r\n set displayRecFile(displayRecFile: RecordingFile | null) {\r\n this._displayRecFile = displayRecFile;\r\n if (this._displayRecFile) {\r\n let ab: AudioBuffer|null = this._displayRecFile.audioBuffer;\r\n if(ab) {\r\n this.displayAudioClip = new AudioClip(ab);\r\n this.controlAudioPlayer.audioClip = this.displayAudioClip;\r\n }else {\r\n // clear for now ...\r\n this.displayAudioClip = null;\r\n this.controlAudioPlayer.audioClip = null;\r\n if (this._controlAudioPlayer && this._session) {\r\n //... and try to fetch from server\r\n this.audioFetchSubscription = this.recFileService.fetchAndApplyRecordingFile(this._controlAudioPlayer.context, this._session.project, this._displayRecFile).subscribe((rf) => {\r\n let fab = null;\r\n if (rf && this._displayRecFile) {\r\n fab = this._displayRecFile.audioBuffer;\r\n } else {\r\n this.statusMsg = 'Recording file could not be loaded.'\r\n this.statusAlertType = 'error'\r\n }\r\n if (fab){\r\n this.displayAudioClip = new AudioClip(fab);\r\n }\r\n this.controlAudioPlayer.audioClip =this.displayAudioClip\r\n this.showRecording();\r\n\r\n }, err => {\r\n console.error(\"Could not load recording file from server: \" + err)\r\n this.statusMsg = 'Recording file could not be loaded: ' + err\r\n this.statusAlertType = 'error'\r\n })\r\n }else{\r\n this.statusMsg = 'Recording file could not be decoded. Audio context unavailable.'\r\n this.statusAlertType = 'error'\r\n }\r\n }\r\n\r\n } else {\r\n this.displayAudioClip = null;\r\n this.controlAudioPlayer.audioClip = null;\r\n }\r\n }\r\n\r\n get displayRecFile(): RecordingFile | null {\r\n return this._displayRecFile;\r\n }\r\n\r\n showRecording() {\r\n this.controlAudioPlayer.stop();\r\n\r\n if (this.displayAudioClip) {\r\n\r\n this.levelMeasure.calcBufferLevelInfos(this.displayAudioClip.buffer, LEVEL_BAR_INTERVALL_SECONDS).then((levelInfos) => {\r\n this.displayLevelInfos = levelInfos;\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n this.playStartAction.disabled = false;\r\n\r\n } else {\r\n\r\n // TODO\r\n // Setting to null does not trigger a change if it was null before (happens after nextitem() in AUTOPROGRESS mode)\r\n // The level bar display does not clear, it shows the last captured stream\r\n this.displayLevelInfos = null;\r\n\r\n this.playStartAction.disabled = true;\r\n\r\n // Collapse audio signal display if open\r\n if (!this.audioSignalCollapsed) {\r\n this.audioSignalCollapsed = true;\r\n }\r\n }\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n\r\n isRecordingItem():boolean{\r\n return(this.promptItem!=null && this.promptItem.type!=='nonrecording')\r\n }\r\n\r\n updateStartActionDisableState(){\r\n this.transportActions.startAction.disabled=!(this.ac && this.isRecordingItem());\r\n }\r\n\r\n applyItem(temporary=false) {\r\n\r\n this.section = this._script.sections[this.sectIdx]\r\n this.group = this.section._shuffledGroups[this.groupIdxInSection];\r\n this.promptItem = this.group._shuffledPromptItems[this.promptItemIdxInGroup];\r\n\r\n //this.selectedItemIdx = this.promptIndex;\r\n\r\n if(this.audioFetchSubscription){\r\n this.audioFetchSubscription.unsubscribe()\r\n }\r\n\r\n this.clearPrompt();\r\n\r\n let isNonrecording=(this.promptItem.type==='nonrecording')\r\n\r\n if (isNonrecording || !this.section.promptphase || this.section.promptphase === 'IDLE') {\r\n this.applyPrompt();\r\n }\r\n\r\n if(isNonrecording){\r\n this.startStopSignalState = StartStopSignalState.OFF;\r\n }else {\r\n if (this.items) {\r\n let it = this.items[this.promptIndex];\r\n if (!it.recs) {\r\n it.recs = new Array<RecordingFile>();\r\n }\r\n\r\n let recentRecFile: RecordingFile | null = null;\r\n let availRecfiles: number = it.recs.length;\r\n if (availRecfiles > 0) {\r\n let rfVers: number = availRecfiles - 1;\r\n recentRecFile = it.recs[rfVers];\r\n this.displayRecFile = recentRecFile;\r\n this.displayRecFileVersion = rfVers;\r\n\r\n } else {\r\n this.displayRecFile = null;\r\n this.displayRecFileVersion = 0;\r\n }\r\n }\r\n if (!temporary) {\r\n this.showRecording();\r\n }\r\n if(!this.readonly) {\r\n this.startStopSignalState = StartStopSignalState.IDLE;\r\n }\r\n }\r\n this.updateStartActionDisableState()\r\n this.updateNavigationActions()\r\n }\r\n\r\n\r\n start() {\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Starting session...';\r\n this.statusWaiting=false;\r\n if(this._session) {\r\n if (this._session.sealed) {\r\n this.readonly = true\r\n this.statusMsg = 'Session sealed!';\r\n //let dialogRef = this.dialog.open(SessionSealedDialog, {});\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Error',\r\n msg: \"This session is sealed. Recordings cannot be added anymore.\",\r\n advise: 'Please ask your experimenter what to do (e.g start a new session).',\r\n }\r\n });\r\n } else {\r\n let body: any = {};\r\n if (this._session.status === \"CREATED\") {\r\n this._session.status = \"LOADED\";\r\n body.status = this._session.status;\r\n if (!this._session.loadedDate) {\r\n this._session.loadedDate = new Date();\r\n body.loadedDate = this._session.loadedDate;\r\n }\r\n } else {\r\n this._session.restartedDate = new Date();\r\n body.restartedDate = this._session.restartedDate;\r\n }\r\n this.sessionService.patchSessionObserver(this._session, body).subscribe()\r\n }\r\n }\r\n\r\n // Check browser compatibility\r\n if(this.userAgent.detectedBrowser===Browser.Safari && this._channelCount>1){\r\n let eMsg=\"Error: Safari browser does not support stereo recordings.\";\r\n console.error(eMsg);\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Browser not supported',\r\n msg: eMsg,\r\n advice: \"Please use a supported browser, e.g. Mozilla Firefox.\"\r\n }\r\n })\r\n }\r\n\r\n //console.log(\"Session ID: \"+this._session.session+ \" status: \"+this._session.status)\r\n this._selectedDeviceId=undefined;\r\n\r\n if (!this.readonly && this.ac && (FORCE_REQUEST_AUDIO_PERMISSIONS || (this._audioDevices && this._audioDevices.length > 0))) {\r\n this.statusMsg = 'Requesting audio permissions...';\r\n this.statusAlertType = 'info';\r\n\r\n this.ac.deviceInfos((mdis) => {\r\n let audioCaptureDeviceAvail: boolean = false;\r\n let audioPlayDeviceAvail: boolean = false;\r\n if (mdis) {\r\n if(this.ac) {\r\n this.ac.printDevices(mdis);\r\n }\r\n if (mdis.length > 0) {\r\n for (let mdii = 0; mdii < mdis.length; mdii++) {\r\n let mdi = mdis[mdii];\r\n let kind=mdi.kind;\r\n if(kind === \"audioinput\"){\r\n audioCaptureDeviceAvail=true;\r\n }else if(kind=== \"audiooutput\"){\r\n audioPlayDeviceAvail=true;\r\n }\r\n }\r\n }\r\n\r\n if (this._session && this._session.type !== 'TEST_DEF_A' && this._audioDevices && this._audioDevices.length > 0) {\r\n let fdi: MediaDeviceInfo | null = null;\r\n for (let adI = 0; adI < this._audioDevices.length; adI++) {\r\n let ad = this._audioDevices[adI];\r\n if (ad.playback) {\r\n // project audio device config for playback device\r\n // not used for now\r\n continue;\r\n }\r\n for (let mdii = 0; mdii < mdis.length; mdii++) {\r\n let mdi = mdis[mdii];\r\n let kind=mdi.kind;\r\n if(kind === \"audioinput\"){\r\n audioCaptureDeviceAvail=true;\r\n }else if(kind=== \"audiooutput\"){\r\n audioPlayDeviceAvail=true;\r\n }\r\n if (ad.regex) {\r\n //console.log(\"Match?: \\'\"+mdi.label+\"\\' \\'\"+ad.name+\"\\'\");\r\n if (mdi.label.match(ad.name)) {\r\n fdi = mdi;\r\n //console.log(\"Match!\");\r\n }\r\n } else {\r\n if (mdi.label.trim() === ad.name.trim()) {\r\n fdi = mdi;\r\n }\r\n }\r\n if (fdi) {\r\n break;\r\n }\r\n }\r\n if (fdi) {\r\n break;\r\n }\r\n }\r\n\r\n if (fdi) {\r\n // matching device found\r\n\r\n // Not able to open device here since Chrome 71\r\n // Chrome 71 requires a user gesture before the AudioContext can be resumed\r\n // sessionmanager.ts:712 Open session with default audio device for 1 channels\r\n // capture.ts:128 The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://goo.gl/7K7WLu\r\n // push../projects/speechrecorderng/src/lib/audio/capture/capture.ts.AudioCapture.open @ capture.ts:128\r\n\r\n //this.ac.open(this._channelCount, fdi.deviceId);\r\n console.info(\"Set selected audio device: \\'\" + fdi.label + \"\\' Id: \\'\" + fdi.deviceId + \"\\'\");\r\n this._selectedDeviceId = fdi.deviceId;\r\n\r\n this.enableStartUserGesture()\r\n } else {\r\n // device not found\r\n this.statusMsg = 'ERROR: Required audio device not available!';\r\n this.statusAlertType = 'error';\r\n this.readonly = true;\r\n\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Required audio device',\r\n msg: \"Required audio device not found\",\r\n advice: \"Please connect a suitable audio device for this project and retry (press the browser reload button).\"\r\n }\r\n })\r\n }\r\n }else{\r\n if(!audioCaptureDeviceAvail && !audioPlayDeviceAvail){\r\n // no device found\r\n this.statusMsg = 'ERROR: No audio device available!';\r\n this.statusAlertType = 'warn';\r\n //this.readonly = true;\r\n\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'warn',\r\n title: 'No audio device',\r\n msg: \"No audio device found\",\r\n advice: \"Please connect an audio device and retry (press the browser reload button) or try to continue anyway.\"\r\n }\r\n })\r\n }else {\r\n if (!this.readonly && !audioCaptureDeviceAvail) {\r\n // no device found\r\n this.statusMsg = 'WARNING: No audio capture device available!';\r\n this.statusAlertType = 'warning';\r\n //this.readonly = true;\r\n\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'warning',\r\n title: 'No audio capture device',\r\n msg: \"No audio capture device found\",\r\n advice: \"Please connect an audio capture device and retry (press the browser reload button) or try to continue anyway.\"\r\n }\r\n })\r\n }\r\n // Safari does not list playback devices\r\n if (!audioPlayDeviceAvail) {\r\n // Firefox does not enumerate audiooutput devices\r\n // Do not show this warning, because it would always appear on Firefox\r\n // When https://bugzilla.mozilla.org/show_bug.cgi?id=1498512 is fixed the warning can be enabled for Firefox as well\r\n\r\n // It is already implemneted but kept behind a preference setting https://bugzilla.mozilla.org/show_bug.cgi?id=1152401\r\n\r\n\r\n // Output devices are listed if about:config media.setsinkid.enabled=true\r\n // but default setting is false\r\n\r\n\r\n // Same problem with Safari\r\n\r\n if (!(this.userAgent.detectedBrowser===Browser.Safari || this.userAgent.detectedBrowser===Browser.Firefox)) {\r\n // no device found\r\n this.statusMsg = 'WARNING: No audio playback device available!';\r\n this.statusAlertType = 'warn';\r\n //this.readonly = true;\r\n\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'warn',\r\n title: 'No audio playback device',\r\n msg: \"No audio playback device found\",\r\n advice: \"Please connect an audio playback device and retry (press the browser reload button) or try to continue anyway.\"\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n // Not able to open device here since Chrome 71\r\n // Chrome 71 requires a user gesture before the AudioContext can be resumed\r\n // sessionmanager.ts:712 Open session with default audio device for 1 channels\r\n // capture.ts:128 The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://goo.gl/7K7WLu\r\n // push../projects/speechrecorderng/src/lib/audio/capture/capture.ts.AudioCapture.open @ capture.ts:128\r\n //console.log(\"Open session with default audio device for \"+this._channelCount+\" channels\");\r\n //this.ac.open(this._channelCount);\r\n\r\n // enable start gesture anyway\r\n this.enableStartUserGesture()\r\n }\r\n }\r\n\r\n });\r\n }\r\n if(this.promptItemCount>0) {\r\n this.promptIndex = 0;\r\n }\r\n this.enableNavigation()\r\n }\r\n\r\n isRecording(): boolean {\r\n return (this.status === Status.PRE_RECORDING || this.status === Status.RECORDING);\r\n }\r\n\r\n isActive(): boolean{\r\n return (!(this.status === Status.BLOCKED || this.status=== Status.IDLE || this.status===Status.ERROR) || this.processingRecording || this.sessionService.uploadCount>0)\r\n }\r\n\r\n prevItem() {\r\n let newPrIdx=this._promptIndex;\r\n newPrIdx--;\r\n if(newPrIdx<0){\r\n newPrIdx=this.promptItemCount-1;\r\n }\r\n this.promptIndex=newPrIdx;\r\n //this.updateNavigationActions()\r\n }\r\n\r\n\r\n nextItem() {\r\n let newPrIdx=this._promptIndex;\r\n newPrIdx++;\r\n if(newPrIdx>=this.promptItemCount){\r\n newPrIdx=0;\r\n }\r\n this.promptIndex=newPrIdx;\r\n //this.updateNavigationActions();\r\n }\r\n\r\n private updateNavigationActions(){\r\n let fwdNxtActionDisabled=true;\r\n if(this.items){\r\n let currRecs=this.items[this._promptIndex].recs;\r\n fwdNxtActionDisabled= ! (currRecs!=null && currRecs.length>0);\r\n }\r\n this.transportActions.fwdNextAction.disabled = this.navigationDisabled || fwdNxtActionDisabled;\r\n this.transportActions.fwdAction.disabled = this.navigationDisabled;\r\n this.transportActions.bwdAction.disabled = this.navigationDisabled;\r\n }\r\n\r\n nextUnrecordedItem() {\r\n let newPrIdx = this._promptIndex;\r\n newPrIdx++;\r\n if (newPrIdx >= this.promptItemCount) {\r\n newPrIdx = 0;\r\n }\r\n if(this.items!=null) {\r\n let itRecs=this.items[newPrIdx].recs;\r\n while (itRecs!=null && (itRecs.length > 0) && newPrIdx < this.promptItemCount) {\r\n newPrIdx++;\r\n itRecs=this.items[newPrIdx].recs;\r\n }\r\n if (!itRecs || itRecs.length == 0) {\r\n this.promptIndex = newPrIdx;\r\n }\r\n }\r\n }\r\n\r\n enableStartUserGesture() {\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Ready.';\r\n //this.updateStartActionDisableState()\r\n this.transportActions.startAction.disabled=!(this.ac && this.isRecordingItem());\r\n\r\n }\r\n\r\n enableNavigation(){\r\n this.navigationDisabled=false;\r\n this.updateNavigationActions();\r\n }\r\n\r\n opened() {\r\n // this.statusAlertType = 'info';\r\n // this.statusMsg = 'Ready.';\r\n // this.updateStartActionDisableState()\r\n // this.transportActions.fwdAction.disabled = false\r\n // this.transportActions.bwdAction.disabled = false\r\n if(this.ac) {\r\n this.ac.start();\r\n }\r\n }\r\n\r\n started() {\r\n this.status = Status.PRE_RECORDING;\r\n this.transportActions.startAction.disabled = true;\r\n this.startStopSignalState = StartStopSignalState.PRERECORDING;\r\n if(this._session) {\r\n if (this._session.status === \"LOADED\") {\r\n let body: any = {};\r\n if (this.section.training) {\r\n this._session.status = \"STARTED_TRAINING\"\r\n body.status = this._session.status;\r\n if (!this._session.startedTrainingDate) {\r\n this._session.startedTrainingDate = new Date();\r\n body.startedTrainingDate = this._session.startedTrainingDate;\r\n }\r\n } else {\r\n this._session.status = \"STARTED\"\r\n body.status = this._session.status;\r\n if (!this._session.startedDate) {\r\n this._session.startedDate = new Date();\r\n body.startedDate = this._session.startedDate;\r\n }\r\n }\r\n this.sessionService.patchSessionObserver(this._session, body).subscribe()\r\n }\r\n }\r\n if (this.section.promptphase === 'PRERECORDING') {\r\n this.applyPrompt();\r\n }\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Recording...';\r\n\r\n let preDelay = DEFAULT_PRE_REC_DELAY;\r\n if (this.promptItem.prerecording) {\r\n preDelay = this.promptItem.prerecording;\r\n }\r\n\r\n let postDelay=DEFAULT_POST_REC_DELAY;\r\n if(this.promptItem.postrecording){\r\n postDelay=this.promptItem.postrecording;\r\n }\r\n\r\n let maxRecordingTimeMs = MAX_RECORDING_TIME_MS;\r\n if (this.promptItem.recduration) {\r\n maxRecordingTimeMs = preDelay+this.promptItem.recduration+postDelay;\r\n }\r\n this.maxRecTimerId = window.setTimeout(() => {\r\n this.stopRecordingMaxRec()\r\n }, maxRecordingTimeMs);\r\n this.maxRecTimerRunning = true;\r\n\r\n\r\n\r\n this.preRecTimerId = window.setTimeout(() => {\r\n\r\n this.preRecTimerRunning = false;\r\n this.status = Status.RECORDING;\r\n this.startStopSignalState = StartStopSignalState.RECORDING;\r\n if (this.section.mode === 'AUTORECORDING') {\r\n this.transportActions.nextAction.disabled = false;\r\n this.transportActions.pauseAction.disabled = false;\r\n } else {\r\n this.transportActions.stopAction.disabled = false;\r\n }\r\n if (this.section.promptphase === 'RECORDING') {\r\n this.applyPrompt();\r\n }\r\n }, preDelay);\r\n this.preRecTimerRunning = true;\r\n }\r\n\r\n stopItem() {\r\n this.status = Status.POST_REC_STOP;\r\n this.startStopSignalState = StartStopSignalState.POSTRECORDING;\r\n this.transportActions.stopAction.disabled = true;\r\n this.transportActions.nextAction.disabled = true;\r\n let postDelay = 500;\r\n if (this.promptItem.postrecording) {\r\n postDelay = this.promptItem.postrecording;\r\n }\r\n this.postRecTimerId = window.setTimeout(() => {\r\n this.postRecTimerRunning = false;\r\n this.status = Status.STOPPING_STOP;\r\n this.stopRecording();\r\n }, postDelay);\r\n this.postRecTimerRunning = true;\r\n }\r\n\r\n pauseItem() {\r\n this.status = Status.POST_REC_PAUSE;\r\n this.transportActions.pauseAction.disabled = true;\r\n this.startStopSignalState = StartStopSignalState.POSTRECORDING;\r\n this.transportActions.stopAction.disabled = true;\r\n this.transportActions.nextAction.disabled = true;\r\n this.transportActions.pauseAction.disabled = true;\r\n let postDelay = 500;\r\n if (this.promptItem.postrecording) {\r\n postDelay = this.promptItem.postrecording;\r\n }\r\n\r\n\r\n this.postRecTimerId = window.setTimeout(() => {\r\n this.postRecTimerRunning = false;\r\n this.status = Status.STOPPING_PAUSE;\r\n this.stopRecording();\r\n }, postDelay);\r\n this.postRecTimerRunning = true;\r\n }\r\n\r\n stopRecording() {\r\n if (this.maxRecTimerRunning) {\r\n if(this.maxRecTimerId) {\r\n window.clearTimeout(this.maxRecTimerId);\r\n }\r\n this.maxRecTimerRunning = false;\r\n }\r\n if(this.ac) {\r\n this.ac.stop();\r\n }\r\n }\r\n\r\n stopRecordingMaxRec(){\r\n if(this.postRecTimerRunning){\r\n if(this.postRecTimerId) {\r\n window.clearTimeout(this.postRecTimerId);\r\n }\r\n this.postRecTimerRunning=false;\r\n }\r\n this.maxRecTimerRunning = false;\r\n this.status = Status.STOPPING_STOP;\r\n if(this.ac) {\r\n this.ac.stop();\r\n }\r\n }\r\n\r\n addRecordingFileByDescriptor(rfd:RecordingFileDescriptor){\r\n if(rfd.recording && rfd.recording.itemcode) {\r\n let prIdx = this.promptIndexByItemcode(rfd.recording.itemcode);\r\n if (this.items!=null && prIdx !== null) {\r\n let it = this.items[prIdx];\r\n if (it && this._session) {\r\n if (!it.recs) {\r\n it.recs = new Array<RecordingFile>();\r\n }\r\n let rf = new RecordingFile(this._session.sessionId, rfd.recording.itemcode, rfd.version, null);\r\n it.recs[rfd.version] = rf;\r\n\r\n } else {\r\n //console.debug(\"WARN: No recording item with code: \\\"\" +rfd.recording.itemcode+ \"\\\" found.\");\r\n }\r\n } else {\r\n //console.debug(\"WARN: No recording item with code: \\\"\" +rfd.recording.itemcode+ \"\\\" found.\");\r\n }\r\n }\r\n }\r\n\r\n addRecordingFileByPromptIndex(promptIndex:number, rf:RecordingFile){\r\n\r\n }\r\n\r\n\r\n stopped() {\r\n this.updateStartActionDisableState()\r\n this.transportActions.stopAction.disabled = true;\r\n this.transportActions.nextAction.disabled = true;\r\n this.transportActions.pauseAction.disabled = true;\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Recorded.';\r\n this.startStopSignalState = StartStopSignalState.IDLE;\r\n\r\n let ad = null;\r\n if(this.ac!=null){\r\n ad=this.ac.audioBuffer();\r\n }\r\n let ic = this.promptItem.itemcode;\r\n let rf=null;\r\n if (this._session && ic) {\r\n let sessId: string | number = this._session.sessionId;\r\n let cpIdx = this.promptIndex;\r\n if (this.items) {\r\n let it=this.items[cpIdx];\r\n if (!it.recs) {\r\n it.recs = new Array<RecordingFile>();\r\n }\r\n rf = new RecordingFile(sessId, ic, it.recs.length, ad);\r\n it.recs.push(rf);\r\n }\r\n if (this.enableUploadRecordings) {\r\n // TODO use SpeechRecorderconfig resp. RecfileService\r\n // convert asynchronously to 16-bit integer PCM\r\n // TODO could we avoid conversion to save CPU resources and transfer float PCM directly?\r\n // TODO duplicate conversion for manual download\r\n //console.log(\"Build wav writer...\");\r\n this.processingRecording=true\r\n if(ad && rf) {\r\n let ww = new WavWriter();\r\n //new REST API URL\r\n let apiEndPoint = '';\r\n if (this.config && this.config.apiEndPoint) {\r\n apiEndPoint = this.config.apiEndPoint;\r\n }\r\n if (apiEndPoint !== '') {\r\n apiEndPoint = apiEndPoint + '/'\r\n }\r\n let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;\r\n let recUrl: string = sessionsUrl + '/' + rf.session + '/' + RECFILE_API_CTX + '/' + rf.itemCode;\r\n ww.writeAsync(ad, (wavFile) => {\r\n this.postRecording(wavFile, recUrl);\r\n this.processingRecording = false\r\n });\r\n }\r\n }\r\n }\r\n\r\n // check complete session\r\n let complete = true;\r\n if(this.items) {\r\n // search backwards, to gain faster detection of incomplete state\r\n for (let ri = this.items.length - 1; ri >= 0; ri--) {\r\n let it = this.items[ri];\r\n if (!it.training && (!it.recs || it.recs.length == 0)) {\r\n complete = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let autoStart = (this.status === Status.STOPPING_STOP);\r\n this.status = Status.IDLE;\r\n let startNext=false;\r\n if (complete) {\r\n if(this._session!=null) {\r\n if (!this._session.sealed && this._session.status !== \"COMPLETED\") {\r\n let body: any = {}\r\n this._session.status = \"COMPLETED\";\r\n body.status = this._session.status;\r\n if (!this._session.completedDate) {\r\n this._session.completedDate = new Date();\r\n body.completedDate = this._session.completedDate;\r\n }\r\n this.sessionService.patchSessionObserver(this._session, body).subscribe()\r\n }\r\n }\r\n this.statusMsg = 'Session complete!';\r\n let dialogRef = this.dialog.open(SessionFinishedDialog, {});\r\n\r\n // enable navigation\r\n this.transportActions.fwdAction.disabled = false\r\n this.transportActions.bwdAction.disabled = false\r\n } else {\r\n\r\n if (this.section.mode === 'AUTOPROGRESS' || this.section.mode === 'AUTORECORDING') {\r\n this.nextItem();\r\n }\r\n\r\n if (this.section.mode === 'AUTORECORDING' && this.autorecording && autoStart) {\r\n startNext=true;\r\n } else {\r\n this.navigationDisabled = false;\r\n this.updateNavigationActions();\r\n }\r\n }\r\n // apply recorded item\r\n this.applyItem(startNext);\r\n if(startNext){\r\n this.startItem();\r\n }\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n postRecording(wavFile: Uint8Array, recUrl: string) {\r\n let wavBlob = new Blob([wavFile], {type: 'audio/wav'});\r\n let ul = new Upload(wavBlob, recUrl);\r\n this.uploader.queueUpload(ul);\r\n }\r\n\r\n stop() {\r\n if(this.ac!=null){\r\n this.ac.close();\r\n }\r\n }\r\n\r\n private updateControlPlaybackPosition() {\r\n if (this._controlAudioPlayer.playPositionFrames) {\r\n this.prompting.audioDisplay.playFramePosition = this._controlAudioPlayer.playPositionFrames;\r\n this.liveLevelDisplay.playFramePosition = this._controlAudioPlayer.playPositionFrames;\r\n }\r\n }\r\n\r\n audioPlayerUpdate(e: AudioPlayerEvent) {\r\n if (EventType.READY === e.type) {\r\n\r\n } else if (EventType.STARTED === e.type) {\r\n //this.status = 'Playback...';\r\n this.updateTimerId = window.setInterval(() => this.updateControlPlaybackPosition(), 50);\r\n\r\n } else if (EventType.ENDED === e.type) {\r\n //.status='Ready.';\r\n window.clearInterval(this.updateTimerId);\r\n\r\n }\r\n\r\n if(!this.destroyed) {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n }\r\n\r\n closed() {\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Session closed.';\r\n }\r\n\r\n\r\n error(msg='An unknown error occured during recording.',advice:string='Please retry.') {\r\n this.statusMsg = 'ERROR: Recording.';\r\n this.statusAlertType = 'error';\r\n this.dialog.open(MessageDialog, {\r\n data: {\r\n type: 'error',\r\n title: 'Recording error',\r\n msg: msg,\r\n advice: advice\r\n }\r\n });\r\n }\r\n}\r\n\r\n","/**\r\n * Created by klausj on 17.06.2017.\r\n */\r\nimport {Inject, Injectable} from '@angular/core';\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {ApiType, SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../../spr.config\";\r\nimport {Script} from \"./script\";\r\nimport {UUID} from \"../../utils/utils\";\r\nimport {Observable} from \"rxjs\";\r\n\r\n\r\nexport const SCRIPT_API_CTX='script'\r\n\r\n@Injectable()\r\nexport class ScriptService {\r\n private scriptCtxUrl:string;\r\n private withCredentials:boolean=false;\r\n\r\n constructor(private http:HttpClient,@Inject(SPEECHRECORDER_CONFIG) private config?:SpeechRecorderConfig) {\r\n\r\n let apiEndPoint = ''\r\n\r\n if(config && config.apiEndPoint) {\r\n apiEndPoint=config.apiEndPoint;\r\n }\r\n if(apiEndPoint !== ''){\r\n apiEndPoint=apiEndPoint+'/'\r\n }\r\n if(config!=null && config.withCredentials!=null){\r\n this.withCredentials=config.withCredentials;\r\n }\r\n this.scriptCtxUrl = apiEndPoint + SCRIPT_API_CTX;\r\n }\r\n\r\n scriptObservable(id:string | number):Observable<Script>{\r\n let encScriptId=encodeURIComponent(id);\r\n let scriptUrl = this.scriptCtxUrl + '/' + encScriptId;\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n scriptUrl = scriptUrl + '.json?requestUUID='+UUID.generate();\r\n }\r\n return this.http.get<Script>(scriptUrl,{withCredentials: this.withCredentials })\r\n\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n","import {Component, ViewChild, ChangeDetectorRef, AfterViewInit, OnInit} from '@angular/core'\r\nimport {\r\n AudioPlayerListener, AudioPlayerEvent, EventType as PlaybackEventType,\r\n AudioPlayer\r\n} from './audio/playback/player';\r\nimport {Group, Order, PromptItem, Script} from './speechrecorder/script/script'\r\nimport { SessionManager,Status as SessionManagerStatus} from './speechrecorder/session/sessionmanager';\r\nimport { UploaderStatusChangeEvent, UploaderStatus } from './net/uploader';\r\nimport {ActivatedRoute, Params, Router} from \"@angular/router\";\r\nimport {SessionService} from \"./speechrecorder/session/session.service\";\r\nimport {ScriptService} from \"./speechrecorder/script/script.service\";\r\nimport {SpeechRecorderUploader} from \"./speechrecorder/spruploader\";\r\nimport {Session} from \"./speechrecorder/session/session\";\r\nimport {Project, ProjectUtil} from \"./speechrecorder/project/project\";\r\nimport {ProjectService} from \"./speechrecorder/project/project.service\";\r\nimport {AudioContextProvider} from \"./audio/context\";\r\nimport {RecordingService} from \"./speechrecorder/recordings/recordings.service\";\r\nimport {RecordingFileDescriptor} from \"./speechrecorder/recording\";\r\nimport {Arrays} from \"./utils/utils\";\r\n\r\nexport enum Mode {SINGLE_SESSION,DEMO}\r\n\r\n@Component({\r\n\r\n selector: 'app-speechrecorder',\r\n providers: [SessionService],\r\n template: `\r\n <app-sprrecordingsession [projectName]=\"project?.name\" [dataSaved]=\"dataSaved\"></app-sprrecordingsession>\r\n `,\r\n styles: [`:host{\r\n flex: 2;\r\n display: flex;\r\n flex-direction: column;\r\n min-height:0;\r\n\r\n }`]\r\n\r\n})\r\nexport class SpeechrecorderngComponent implements OnInit,AfterViewInit,AudioPlayerListener {\r\n\r\n\t mode!:Mode;\r\n\t\tcontrolAudioPlayer!:AudioPlayer;\r\n\t\taudio:any;\r\n\r\n\t_project:Project|null=null;\r\n sessionId!: string;\r\n session!:Session;\r\n\r\n script!:Script;\r\n dataSaved: boolean = true;\r\n @ViewChild(SessionManager, { static: true }) sm!:SessionManager;\r\n\r\n\t\tconstructor(private route: ActivatedRoute,\r\n private router: Router,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n private sessionsService:SessionService,\r\n private projectService:ProjectService,\r\n private scriptService:ScriptService,\r\n private recFilesService:RecordingService,\r\n private uploader:SpeechRecorderUploader) {\r\n\t\t}\r\n\r\n ngOnInit() {\r\n\t\t try {\r\n let audioContext = AudioContextProvider.audioContextInstance();\r\n if(audioContext) {\r\n this.controlAudioPlayer = new AudioPlayer(audioContext, this);\r\n }\r\n this.sm.controlAudioPlayer=this.controlAudioPlayer;\r\n this.sm.statusAlertType='info';\r\n this.sm.statusMsg = 'Player initialized.';\r\n }catch(err){\r\n this.sm.statusMsg=err.message;\r\n this.sm.statusAlertType='error';\r\n console.error(err.message)\r\n }\r\n }\r\n ngAfterViewInit(){\r\n\r\n\t\t if(this.sm.status!== SessionManagerStatus.ERROR) {\r\n let initSuccess = this.init();\r\n if (initSuccess) {\r\n this.route.queryParams.subscribe((params: Params) => {\r\n if (params['sessionId']) {\r\n this.fetchSession(params['sessionId']);\r\n }\r\n });\r\n\r\n this.route.params.subscribe((params: Params) => {\r\n let routeParamsId = params['id'];\r\n if (routeParamsId) {\r\n this.fetchSession(routeParamsId);\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n fetchSession(sessionId:string){\r\n\r\n\r\n\t\t //Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'statusMsg: Player initialized.'. Current value: 'statusMsg: Fetching session info...'.\r\n // params.subscribe seems not to be asynchronous\r\n\r\n // this.sm.statusAlertType='info';\r\n // this.sm.statusMsg = 'Fetching session info...';\r\n // this.sm.statusWaiting=true;\r\n let sessObs= this.sessionsService.sessionObserver(sessionId);\r\n\r\n if(sessObs) {\r\n sessObs.subscribe(sess => {\r\n this.setSession(sess);\r\n this.sm.statusAlertType='info';\r\n this.sm.statusMsg = 'Received session info.';\r\n this.sm.statusWaiting=false;\r\n if (sess.project) {\r\n //console.debug(\"Session associated project: \"+sess.project)\r\n this.projectService.projectObservable(sess.project).subscribe(project=>{\r\n this.project=project;\r\n this.fetchScript(sess);\r\n },reason =>{\r\n this.sm.statusMsg=reason;\r\n this.sm.statusAlertType='error';\r\n this.sm.statusWaiting=false;\r\n console.error(\"Error fetching project config: \"+reason)\r\n });\r\n\r\n } else {\r\n console.info(\"Session has no associated project. Using default configuration.\")\r\n this.fetchScript(sess);\r\n }\r\n },\r\n (reason) => {\r\n this.sm.statusMsg = reason;\r\n this.sm.statusAlertType = 'error';\r\n this.sm.statusWaiting=false;\r\n console.error(\"Error fetching session \" + reason)\r\n });\r\n }\r\n }\r\n\r\n\r\n fetchScript(sess:Session){\r\n if(sess.script){\r\n this.sm.statusAlertType='info';\r\n this.sm.statusMsg = 'Fetching recording script...';\r\n this.sm.statusWaiting=true;\r\n this.scriptService.scriptObservable(sess.script).subscribe(script=>{\r\n this.sm.statusAlertType='info';\r\n this.sm.statusMsg = 'Received recording script.';\r\n this.sm.statusWaiting=false;\r\n this.setScript(script)\r\n this.sm.session=sess;\r\n this.fetchRecordings(sess,this.script)\r\n },reason =>{\r\n let errMsg=\"Error fetching recording script: \"+reason\r\n console.error(errMsg)\r\n this.sm.statusMsg=errMsg;\r\n this.sm.statusAlertType='error';\r\n this.sm.statusWaiting=false;\r\n });\r\n }else{\r\n let errMsg=\"No recording script is defined for this session with ID \"+sess.sessionId;\r\n console.error(this.sm.statusMsg)\r\n this.sm.statusMsg=errMsg;\r\n this.sm.statusAlertType='error';\r\n\r\n }\r\n }\r\n\r\n\r\n fetchRecordings(sess:Session,script:Script){\r\n this.sm.statusAlertType='info';\r\n this.sm.statusMsg = 'Fetching infos of recordings...';\r\n this.sm.statusWaiting=true;\r\n let prNm:string|null=null;\r\n if(this.project) {\r\n let rfsObs = this.recFilesService.recordingFileDescrList(this.project.name, sess.sessionId);\r\n rfsObs.subscribe((rfs: Array<RecordingFileDescriptor>) => {\r\n this.sm.statusAlertType = 'info';\r\n this.sm.statusMsg = 'Received infos of recordings.';\r\n this.sm.statusWaiting = false;\r\n if (rfs) {\r\n if (rfs instanceof Array) {\r\n rfs.forEach((rf) => {\r\n //console.debug(\"Already recorded: \" + rf+ \" \"+rf.recording.itemcode);\r\n this.sm.addRecordingFileByDescriptor(rf);\r\n })\r\n } else {\r\n console.error('Expected type array for list of already recorded files ')\r\n }\r\n } else {\r\n //console.debug(\"Recording file list: \" + rfs);\r\n }\r\n }, () => {\r\n // we start the session anyway\r\n this.startSession()\r\n }, () => {\r\n this.startSession()\r\n })\r\n }else{\r\n // TODO\r\n }\r\n }\r\n\r\n\r\n private startSession(){\r\n this.sm.statusWaiting=false;\r\n\t\t this.sm.start();\r\n }\r\n\r\n\r\n setSession(session:any){\r\n\t\t if(session) {\r\n // console.debug(\"Session ID: \" + session.sessionId);\r\n }else{\r\n //console.debug(\"Session Undefined\");\r\n }\r\n }\r\n\r\n ready():boolean{\r\n\t\t return this.dataSaved && !this.sm.isActive()\r\n }\r\n\r\n\t\tinit():boolean {\r\n\r\n\t\t\tvar n = <any>navigator;\r\n\t\t\t//var getUserMediaFnct= n.getUserMedia || n.webkitGetUserMedia ||\r\n\t\t\t//\tn.mozGetUserMedia || n.msGetUserMedia;\r\n\t\t\tvar w = <any>window;\r\n\t\t\t// TODO test onyl !!\r\n\r\n // let debugFail=true;\r\n\t\t// \tAudioContext = w.AudioContext || w.webkitAudioContext;\r\n\t\t// \tif (typeof AudioContext !== 'function' || debugFail) {\r\n // this.sm.statusAlertType='error';\r\n\t\t// \t\tthis.sm.statusMsg = 'ERROR: Browser does not support Web Audio API!';\r\n\t\t// \t\treturn false;\r\n\t\t// \t} else {\r\n\t\t// \t\tvar context = new AudioContext();\r\n //\r\n\t\t// \t\tif (typeof navigator.mediaDevices.getUserMedia !== 'function') {\r\n // this.sm.statusAlertType='error';\r\n\t\t// \t\t\tthis.sm.statusMsg= 'ERROR: Browser does not support Media streams!';\r\n // return false;\r\n\t\t// \t\t} else {\r\n //\r\n\r\n //this.sm = new SessionManager(new SimpleTrafficLight(), this.uploader);\r\n\t\t\t\t\t//this.sm.init();\r\n\t\t\t\t\t//this.ap = new AudioPlayer(context,this);\r\n\t\t\t\t\t//this.sm.listener=this;\r\n\t\t\t//\t}\r\n\t\t//\t}\r\n this.uploader.listener = (ue) => {\r\n this.uploadUpdate(ue);\r\n }\r\n\r\n window.addEventListener('beforeunload', (e) => {\r\n console.debug(\"Before page unload event\");\r\n\r\n if (this.ready()) {\r\n return;\r\n } else {\r\n // all this attempts to customize the message do not work anymore (for security reasons)!!\r\n var message = \"Please do not leave the page, until all recordings are uploaded!\";\r\n alert(message);\r\n e = e || window.event;\r\n\r\n if (e) {\r\n e.returnValue = message;\r\n e.cancelBubble = true;\r\n if (e.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n if (e.preventDefault) {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n return message;\r\n }\r\n });\r\n\t\t\treturn true;\r\n }\r\n\r\n uploadUpdate(ue: UploaderStatusChangeEvent) {\r\n let upStatus = ue.status;\r\n this.dataSaved = (UploaderStatus.DONE === upStatus);\r\n let percentUpl = ue.percentDone();\r\n if (UploaderStatus.ERR === upStatus) {\r\n this.sm.uploadStatus = 'warn'\r\n } else {\r\n if (percentUpl < 50) {\r\n this.sm.uploadStatus = 'accent'\r\n } else {\r\n this.sm.uploadStatus = 'success'\r\n }\r\n this.sm.uploadProgress = percentUpl;\r\n }\r\n\r\n this.changeDetectorRef.detectChanges()\r\n }\r\n\r\n configure() {\r\n\r\n\r\n\r\n this.loadProjectCfg(() => {\r\n // display project name\r\n let prName: string = '[Unknown]';\r\n if (this.project && this.project.name) {\r\n prName = this.project.name;\r\n }\r\n //this.titleEl.innerText = prName;\r\n\r\n });\r\n\r\n }\r\n\r\n\r\n private randomize(script:Script){\r\n\t\t script.sections.forEach((s)=>{\r\n\t\t if('RANDOM'===s.order) {\r\n s._shuffledGroups = Arrays.shuffleArray<Group>(s.groups);\r\n }else{\r\n\t\t s._shuffledGroups=s.groups;\r\n }\r\n\t\t s._shuffledGroups.forEach((g)=>{\r\n\t\t if('RANDOM'===g.order){\r\n\t\t g._shuffledPromptItems=Arrays.shuffleArray<PromptItem>(g.promptItems);\r\n }else{\r\n\t\t g._shuffledPromptItems=g.promptItems;\r\n }\r\n });\r\n });\r\n }\r\n\r\n setScript(script:Script){\r\n this.script=script;\r\n this.randomize(this.script);\r\n this.sm.script = this.script;\r\n }\r\n\r\n\r\n set project(project: Project|null) {\r\n this._project = project;\r\n let chCnt = ProjectUtil.DEFAULT_AUDIO_CHANNEL_COUNT;\r\n\r\n if (project) {\r\n console.info(\"Project name: \" + project.name)\r\n this.sm.audioDevices = project.audioDevices;\r\n chCnt = ProjectUtil.audioChannelCount(project);\r\n console.info(\"Project requested recording channel count: \" + chCnt);\r\n this.sm.autoGainControlConfigs=project.autoGainControlConfigs;\r\n } else {\r\n console.error(\"Empty project configuration!\")\r\n }\r\n this.sm.channelCount = chCnt;\r\n\r\n }\r\n\r\n get project():Project|null{\r\n\t\t return this._project;\r\n }\r\n\r\n\r\n\r\n\r\n loadProjectCfg(callback: ()=> any){\r\n let projUrl: string | null = null;\r\n\r\n if (this.sessionId === null) {\r\n if (window.location.hostname === 'localhost' || this.mode === Mode.DEMO) {\r\n // debug or demo mode\r\n projUrl = 'test/Demo1.json?' + new Date().getTime();\r\n }\r\n } else {\r\n // load RESTful by sessionId\r\n projUrl = window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/wikispeech/rest/projects/?sessionId=' + this.sessionId;\r\n\r\n }\r\n if(projUrl) {\r\n var pLoader = new XMLHttpRequest();\r\n pLoader.open(\"GET\", projUrl, true);\r\n pLoader.setRequestHeader('Accept', 'application/json');\r\n pLoader.responseType = \"json\";\r\n pLoader.onload = (e) => {\r\n\r\n this.project = pLoader.response.project;\r\n\r\n callback();\r\n }\r\n pLoader.onerror = (e) => {\r\n console.error(\"Error downloading project data ...\");\r\n }\r\n pLoader.send();\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n // loadScript(callback: ()=>any){\r\n // var scrLoader = new XMLHttpRequest();\r\n // let hn:string =window.location.hostname;\r\n // let pn:string =window.location.pathname;\r\n // let pr:string =window.location.protocol;\r\n // let po:string =window.location.port;\r\n //\r\n // let sessionId:string=this.session.sessionId;\r\n //\r\n // let scrUrl:string | null = null;\r\n //\r\n // if (hn === 'localhost' || this.mode===Mode.DEMO) {\r\n // // local debug mode\r\n // // FF caches\r\n // scrUrl = 'test/' + this.session.script.toString() + '.json?' + new Date().getTime();\r\n //\r\n // } else {\r\n // let scrPath:string = '/wikispeech/session/scripts/servlet';\r\n // let scrQu:string = 'sessionId=' + sessionId;\r\n // scrUrl = pr + '//' + hn + ':' + po + scrPath;\r\n // if (scrQu) {\r\n // scrUrl = scrUrl + '?' + scrQu;\r\n // }\r\n // }\r\n //\r\n // scrLoader.open(\"GET\",scrUrl , true);\r\n // scrLoader.setRequestHeader('Accept','application/json');\r\n // scrLoader.responseType = \"json\";\r\n // scrLoader.onload = (e) => {\r\n //\r\n // this.script = scrLoader.response;\r\n //\r\n //\r\n // this.sm.script = this.script;\r\n //\r\n // callback();\r\n // }\r\n // scrLoader.onerror = (e) => {\r\n // console.log(\"Error downloading recording script data ...\");\r\n // }\r\n // scrLoader.send();\r\n // }\r\n\r\n start(){\r\n\r\n //this.configure();\r\n\r\n }\r\n\r\n\t\taudioPlayerUpdate(e:AudioPlayerEvent){\r\n\t\t\tif(PlaybackEventType.STARTED===e.type){\r\n\t\t\t\t//this.startBtn.disabled=true;\r\n\t\t\t\t//this.stopBtn.disabled=true;\r\n this.sm.statusAlertType='info';\r\n\t\t\t\tthis.sm.statusMsg='Playback...';\r\n\r\n } else if (PlaybackEventType.ENDED === e.type) {\r\n\t\t\t\t//this.startBtn.disabled=false;\r\n\t\t\t\t//this.stopBtn.disabled=true;\r\n this.sm.statusAlertType='info';\r\n\t\t\t\tthis.sm.statusMsg='Ready.';\r\n\t\t\t}\r\n\t\t}\r\n\t\terror(){\r\n\t\t this.sm.statusAlertType='error';\r\n\t\t\tthis.sm.statusMsg='ERROR: Recording.';\r\n\t\t}\r\n\t}\r\n\r\n\r\n//\r\n//\r\n// function speechrecorderInit() {\r\n// \tvar spr = new ips.apps.speeechrecorder.SpeechRecorder();\r\n// \tspr.init();\r\n// spr.start();\r\n//\r\n//\r\n// }\r\n","import {Component} from \"@angular/core\";\n\n@Component({\n\n selector: 'scroll-pane-horizontal',\n template: '',\n styles: [\n `:host {\n width: 100%;\n background: darkgray;\n box-sizing: border-box;\n height: 100%;\n position: relative;\n overflow-x: scroll;\n overflow-y: auto;\n }`]\n\n})\nexport class ScrollPaneHorizontal{\n\n}\n","import {\r\n Component,\r\n ViewChild,\r\n ChangeDetectorRef,\r\n AfterViewInit, Input, AfterContentInit, OnInit, AfterContentChecked, AfterViewChecked, ElementRef,\r\n} from '@angular/core'\r\n\r\nimport {AudioClip, Selection} from './persistor'\r\nimport {AudioPlayer, AudioPlayerListener, AudioPlayerEvent, EventType} from './playback/player'\r\nimport {ActivatedRoute, Params} from \"@angular/router\";\r\nimport {Action} from \"../action/action\";\r\nimport {AudioDisplayScrollPane} from \"./ui/audio_display_scroll_pane\";\r\nimport {AudioContextProvider} from \"./context\";\r\n\r\n@Component({\r\n\r\n selector: 'app-audiodisplayplayer',\r\n\r\n template: `\r\n\r\n <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>\r\n\r\n <audio-display-control [audioClip]=\"audioClip\"\r\n [playStartAction]=\"playStartAction\"\r\n [playSelectionAction]=\"playSelectionAction\"\r\n [playStopAction]=\"playStopAction\"\r\n [autoPlayOnSelectToggleAction]=\"ap?.autoPlayOnSelectToggleAction\"\r\n [zoomInAction]=\"zoomInAction\"\r\n [zoomOutAction]=\"zoomOutAction\"\r\n [zoomSelectedAction]=\"zoomSelectedAction\"\r\n [zoomFitToPanelAction]=\"zoomFitToPanelAction\"></audio-display-control><p>{{status}}\r\n `,\r\n styles: [\r\n `:host {\r\n display: flex;\r\n flex-direction: column;\r\n position: absolute;\r\n bottom: 0px;\r\n height: 100%;\r\n width: 100%;\r\n overflow: hidden;\r\n padding: 20px;\r\n z-index: 5;\r\n box-sizing: border-box;\r\n background-color: rgba(0, 0, 0, 0.75)\r\n }`]\r\n\r\n})\r\nexport class AudioDisplayPlayer implements AudioPlayerListener, OnInit,AfterContentInit,AfterContentChecked,AfterViewInit,AfterViewChecked {\r\n private _audioUrl: string|null=null;\r\n\r\n parentE: HTMLElement;\r\n\r\n @Input()\r\n playStartAction: Action<void>;\r\n @Input()\r\n playStopAction: Action<void>;\r\n @Input()\r\n playSelectionAction:Action<void>\r\n @Input()\r\n autoPlayOnSelectToggleAction!:Action<boolean>;\r\n\r\n zoomFitToPanelAction!:Action<void>;\r\n zoomSelectedAction!:Action<void>;\r\n zoomInAction!:Action<void>;\r\n zoomOutAction!:Action<void>;\r\n\r\n\r\n aCtx: AudioContext|null=null;\r\n private _audioClip:AudioClip|null=null;\r\n ap: AudioPlayer|undefined;\r\n status: string;\r\n\r\n currentLoader: XMLHttpRequest | null=null;\r\n\r\n audio: any;\r\n updateTimerId: any;\r\n\r\n\r\n @ViewChild(AudioDisplayScrollPane, { static: true })\r\n private audioDisplayScrollPane!: AudioDisplayScrollPane;\r\n\r\n constructor(protected route: ActivatedRoute, protected ref: ChangeDetectorRef,protected eRef:ElementRef) {\r\n //console.log(\"constructor: \"+this.ac);\r\n this.parentE=this.eRef.nativeElement;\r\n this.playStartAction = new Action(\"Start\");\r\n this.playSelectionAction=new Action(\"Play selected\");\r\n this.playStopAction = new Action(\"Stop\");\r\n this.status=\"Player created.\";\r\n\r\n }\r\n\r\n ngOnInit(){\r\n //console.log(\"OnInit: \"+this.ac);\r\n this.zoomSelectedAction=this.audioDisplayScrollPane.zoomSelectedAction\r\n this.zoomFitToPanelAction=this.audioDisplayScrollPane.zoomFitToPanelAction;\r\n this.zoomOutAction=this.audioDisplayScrollPane.zoomOutAction;\r\n this.zoomInAction=this.audioDisplayScrollPane.zoomInAction;\r\n try {\r\n this.aCtx = AudioContextProvider.audioContextInstance();\r\n if(this.aCtx) {\r\n this.ap = new AudioPlayer(this.aCtx, this);\r\n }\r\n }catch(err){\r\n this.status = err.message;\r\n }\r\n }\r\n\r\n ngAfterContentInit(){\r\n //console.log(\"AfterContentInit: \"+this.ac);\r\n }\r\n\r\n ngAfterContentChecked(){\r\n //console.log(\"AfterContentChecked: \"+this.ac);\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.aCtx && this.ap) {\r\n this.playStartAction.onAction = () => this.ap?.start();\r\n this.playSelectionAction.onAction = () => this.ap?.startSelected();\r\n this.playStopAction.onAction = () => this.ap?.stop();\r\n }\r\n this.layout();\r\n let heightListener=new MutationObserver((mrs:Array<MutationRecord>,mo:MutationObserver)=>{\r\n mrs.forEach((mr:MutationRecord)=>{\r\n if('attributes'===mr.type && ('class'===mr.attributeName || 'style'===mr.attributeName)){\r\n this.layout();\r\n }\r\n })\r\n });\r\n heightListener.observe(this.parentE,{attributes: true,childList: true, characterData: true});\r\n this.route.queryParams.subscribe((params: Params) => {\r\n if (params['url']) {\r\n this.audioUrl = params['url'];\r\n }\r\n });\r\n }\r\n\r\n\r\n ngAfterViewChecked(){\r\n //console.log(\"AfterViewChecked: \"+this.ac);\r\n }\r\n\r\n\r\n init() {\r\n\r\n\r\n }\r\n\r\n layout(){\r\n this.audioDisplayScrollPane.layout();\r\n }\r\n\r\n get audioUrl(): string|null {\r\n return this._audioUrl;\r\n }\r\n\r\n set audioUrl(value: string|null) {\r\n if(this.ap) {\r\n this.ap.stop();\r\n }\r\n this._audioUrl = value;\r\n this.load();\r\n }\r\n\r\n\r\n started() {\r\n //console.debug(\"Play started\");\r\n this.status = 'Playing...';\r\n }\r\n\r\n private load() {\r\n\r\n if (this.currentLoader) {\r\n this.currentLoader.abort();\r\n this.currentLoader = null;\r\n }\r\n if(this._audioUrl) {\r\n //this.statusMsg.innerHTML = 'Connecting...';\r\n this.currentLoader = new XMLHttpRequest();\r\n this.currentLoader.open(\"GET\", this._audioUrl, true);\r\n this.currentLoader.responseType = \"arraybuffer\";\r\n this.currentLoader.onload = (e) => {\r\n if (this.currentLoader) {\r\n\r\n var data = this.currentLoader.response; // not responseText\r\n //console.debug(\"Received data \", data.byteLength);\r\n this.currentLoader = null;\r\n this.loaded(data);\r\n }\r\n }\r\n this.currentLoader.onerror = (e) => {\r\n console.error(\"Error downloading ...\");\r\n //this.statusMsg.innerHTML = 'Error loading audio file!';\r\n this.currentLoader = null;\r\n }\r\n //this.statusMsg.innerHTML = 'Loading...';\r\n\r\n this.currentLoader.send();\r\n }\r\n }\r\n\r\n private loaded(data: ArrayBuffer) {\r\n\r\n //console.debug(\"Loaded\");\r\n this.status = 'Audio file loaded.';\r\n //console.debug(\"Received data \", data.byteLength);\r\n\r\n // Do not use Promise version, which does not work with Safari 13\r\n if(this.aCtx) {\r\n this.aCtx.decodeAudioData(data, (audioBuffer) => {\r\n //console.debug(\"Audio Buffer Samplerate: \", audioBuffer.sampleRate)\r\n this.audioClip = new AudioClip(audioBuffer)\r\n });\r\n }\r\n }\r\n\r\n @Input()\r\n set audioData(audioBuffer: AudioBuffer){\r\n this.audioDisplayScrollPane.audioData = audioBuffer;\r\n if(audioBuffer) {\r\n let clip = new AudioClip(audioBuffer);\r\n if (this.ap){\r\n this.ap.audioClip = clip;\r\n this.playStartAction.disabled = false\r\n }\r\n }else{\r\n this.playStartAction.disabled = true\r\n if (this.ap){\r\n this.ap.audioClip = null;\r\n }\r\n }\r\n this.playSelectionAction.disabled=true\r\n }\r\n\r\n startSelectionDisabled(){\r\n return !(this._audioClip && this.ap!=null && !this.playStartAction.disabled && this._audioClip.selection )\r\n }\r\n\r\n @Input()\r\n set audioClip(audioClip: AudioClip | null) {\r\n this._audioClip=audioClip\r\n let audioData:AudioBuffer|null=null;\r\n let sel:Selection|null=null;\r\n if(audioClip){\r\n audioData=audioClip.buffer;\r\n sel=audioClip.selection;\r\n if(this._audioClip) {\r\n this._audioClip.addSelectionObserver((ac) => {\r\n\r\n this.playSelectionAction.disabled = this.startSelectionDisabled()\r\n // if(this.ap && ac.selection && this.autoplaySelectedCheckbox.checked){\r\n // this.ap.startSelected()\r\n // }\r\n\r\n })\r\n }\r\n }\r\n if(audioData) {\r\n this.playStartAction.disabled =(!this.ap)\r\n this.playSelectionAction.disabled=this.startSelectionDisabled()\r\n }else{\r\n this.playStartAction.disabled = true\r\n this.playSelectionAction.disabled=true\r\n }\r\n\r\n this.audioDisplayScrollPane.audioClip=audioClip\r\n if(this.ap) {\r\n this.ap.audioClip = audioClip\r\n }\r\n }\r\n\r\n get audioClip():AudioClip|null{\r\n return this._audioClip\r\n }\r\n\r\n updatePlayPosition() {\r\n\r\n if (this.ap && this.ap.playPositionFrames) {\r\n this.audioDisplayScrollPane.playFramePosition = this.ap.playPositionFrames;\r\n }\r\n }\r\n\r\n audioPlayerUpdate(e: AudioPlayerEvent) {\r\n if (EventType.STARTED === e.type) {\r\n this.status = 'Playback...';\r\n this.updateTimerId = window.setInterval(() => this.updatePlayPosition(), 50);\r\n this.playStartAction.disabled = true;\r\n this.playSelectionAction.disabled=true\r\n this.playStopAction.disabled = false;\r\n } else if (EventType.ENDED === e.type) {\r\n this.status = 'Ready.';\r\n window.clearInterval(this.updateTimerId);\r\n this.playStartAction.disabled = false;\r\n this.playSelectionAction.disabled=this.startSelectionDisabled()\r\n this.playStopAction.disabled = true;\r\n }\r\n\r\n this.ref.detectChanges();\r\n\r\n }\r\n\r\n error() {\r\n this.status = 'ERROR';\r\n }\r\n\r\n}\r\n\r\n","import {PromptItem, PromptitemUtil} from \"../../script/script\";\r\nimport {RecordingFile} from \"../../recording\";\r\n\r\n\r\n// export class RecordingFile {\r\n//\r\n// get recordingFileId(): string | number {\r\n// return this._recordingFileId;\r\n// }\r\n//\r\n// frames:number=null\r\n// editStartFrame:number=null\r\n// editEndFrame:number=null\r\n//\r\n// recording:PromptItem;\r\n//\r\n// session:number|string;\r\n//\r\n// get audioBuffer(): AudioBuffer {\r\n// return this._audioBuffer;\r\n// }\r\n//\r\n// set audioBuffer(value: AudioBuffer) {\r\n// this._audioBuffer = value;\r\n// }\r\n// private _recordingFileId:string | number;\r\n// private _audioBuffer:AudioBuffer;\r\n//\r\n// constructor(recordingFileId: string| number, audioBuffer:AudioBuffer){\r\n// this._recordingFileId=recordingFileId;\r\n// this._audioBuffer=audioBuffer;\r\n// }\r\n//\r\n//\r\n// }\r\n\r\nexport class RecordingFileUtil {\r\n public static recordingAsPlainText(recordingFile:RecordingFile) {\r\n if (recordingFile) {\r\n let r = recordingFile.recording;\r\n if (r) {\r\n return PromptitemUtil.toPlainTextString(r);\r\n }\r\n }\r\n return \"n/a\";\r\n }\r\n\r\n public static framePosForSampleRate(framePosSampleRate:number|null,framePos:number|null,sampleRate:number):number|null{\r\n let fpFSr=null;\r\n\r\n // TODO transitional until editSampleRates are set in the database\r\n if(framePosSampleRate==null){\r\n framePosSampleRate=sampleRate;\r\n }\r\n if(framePosSampleRate!=null && framePos!=null) {\r\n if (framePosSampleRate === sampleRate) {\r\n fpFSr=framePos;\r\n } else {\r\n fpFSr=Math.round((framePos * sampleRate) / framePosSampleRate);\r\n }\r\n }\r\n return fpFSr;\r\n }\r\n\r\n public static editStartFrameForSampleRate(recordingFile:RecordingFile,sampleRate:number):number | null{\r\n let esffSr=RecordingFileUtil.framePosForSampleRate(recordingFile.editSampleRate,recordingFile.editStartFrame,sampleRate);\r\n return esffSr;\r\n }\r\n\r\n public static editEndFrameForSampleRate(recordingFile:RecordingFile,sampleRate:number):number | null{\r\n let eeffSr=RecordingFileUtil.framePosForSampleRate(recordingFile.editSampleRate,recordingFile.editEndFrame,sampleRate);\r\n return eeffSr;\r\n }\r\n}\r\n","import {Inject, Injectable} from '@angular/core';\r\nimport {HttpClient, HttpErrorResponse, HttpHeaders, HttpResponse} from \"@angular/common/http\";\r\n\r\n\r\nimport {Observable} from \"rxjs\";\r\n\r\n\r\nimport {ApiType, SPEECHRECORDER_CONFIG, SpeechRecorderConfig} from \"../../../spr.config\";\r\nimport {UUID} from \"../../../utils/utils\";\r\nimport {RecordingFile} from \"../../recording\";\r\n\r\n\r\n@Injectable()\r\nexport class RecordingFileService {\r\n\r\n public static readonly RECOFILE_API_CTX = 'recordingfile'\r\n private apiEndPoint: string;\r\n private withCredentials: boolean = false;\r\n\r\n //private debugDelay:number=10000;\r\n private debugDelay:number=0;\r\n\r\n constructor(private http: HttpClient, @Inject(SPEECHRECORDER_CONFIG) private config?: SpeechRecorderConfig) {\r\n //constructor(private http: HttpClient) {\r\n // TODO test only\r\n this.apiEndPoint = ''\r\n // this.apiEndPoint = '/wikispeech/api/v1'\r\n\r\n if (config && config.apiEndPoint) {\r\n this.apiEndPoint = config.apiEndPoint;\r\n }\r\n if (this.apiEndPoint !== '') {\r\n this.apiEndPoint = this.apiEndPoint + '/'\r\n }\r\n if (config != null && config.withCredentials != null) {\r\n this.withCredentials = config.withCredentials;\r\n }\r\n //this.withCredentials=true\r\n\r\n //this.recordingCtxUrl = apiEndPoint + REC_API_CTX;\r\n\r\n\r\n }\r\n\r\n private recoFileUrl(recordingFileId: string | number):string{\r\n let encRecfileId=encodeURIComponent(recordingFileId);\r\n let recUrl = this.apiEndPoint + RecordingFileService.RECOFILE_API_CTX + '/' + encRecfileId;\r\n\r\n return recUrl;\r\n }\r\n\r\n private fetchAudiofile(recordingFileId: string | number): Observable<HttpResponse<ArrayBuffer>> {\r\n let recUrl = this.recoFileUrl(recordingFileId);\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n recUrl = recUrl + '.wav';\r\n }\r\n let headers = new HttpHeaders({\r\n 'Accept': 'audio/wav'\r\n });\r\n\r\n return this.http.get(recUrl, {\r\n observe: 'response',\r\n headers: headers,\r\n responseType: 'arraybuffer',\r\n withCredentials: this.withCredentials\r\n });\r\n }\r\n\r\n private recordingFileDescrObserver(recordingFileId: string | number): Observable<RecordingFile> {\r\n\r\n let recUrl = this.recoFileUrl(recordingFileId);\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n recUrl = recUrl + '.json?requestUUID='+UUID.generate();\r\n }\r\n return this.http.get<RecordingFile>(recUrl,{ withCredentials: this.withCredentials });\r\n }\r\n\r\n\r\n private fetchSessionAudiofileById(projectName: string, sessId: string | number, recordingFileId: string | number): Observable<HttpResponse<ArrayBuffer>> {\r\n\r\n let recUrl = this.recoFileUrl(recordingFileId);\r\n // if (this.config && this.config.apiType === ApiType.FILES) {\r\n // // for development and demo\r\n // // append UUID to make request URL unique to avoid localhost server caching\r\n // recUrl = recUrl + '.wav?requestUUID=' + UUID.generate();\r\n // }\r\n return this.http.get(recUrl, {\r\n observe: 'response',\r\n responseType: 'arraybuffer',\r\n withCredentials: this.withCredentials\r\n });\r\n }\r\n\r\n\r\n // TODO test\r\n\r\n fetchAndApplyRecordingFile(aCtx: AudioContext, recordingFile:RecordingFile):Observable<RecordingFile|null> {\r\n\r\n let wobs = new Observable<RecordingFile|null>(observer=>{\r\n if(recordingFile.recordingFileId) {\r\n let obs = this.fetchAudiofile(recordingFile.recordingFileId);\r\n\r\n obs.subscribe(resp => {\r\n // Do not use Promise version, which does not work with Safari 13\r\n if(resp.body) {\r\n aCtx.decodeAudioData(resp.body, ab => {\r\n recordingFile.audioBuffer = ab;\r\n if (this.debugDelay > 0) {\r\n window.setTimeout(() => {\r\n\r\n observer.next(recordingFile);\r\n observer.complete();\r\n }, this.debugDelay);\r\n } else {\r\n observer.next(recordingFile);\r\n observer.complete();\r\n }\r\n })\r\n }else{\r\n observer.error('Received no audio data!');\r\n }\r\n },\r\n (error: HttpErrorResponse) => {\r\n if (error.status == 404) {\r\n // Interpret not as an error, the file ist not recorded yet\r\n observer.next(null);\r\n observer.complete()\r\n } else {\r\n // all other states are errors\r\n observer.error(error);\r\n observer.complete();\r\n }\r\n });\r\n }else{\r\n observer.error();\r\n }\r\n });\r\n\r\n return wobs;\r\n }\r\n\r\n fetchRecordingFile(aCtx: AudioContext, recordingFileId: string | number): Observable<RecordingFile | null> {\r\n\r\n let wobs = new Observable<RecordingFile | null>(observer => {\r\n let rf: RecordingFile|null = null;\r\n let rfDescrObs = this.recordingFileDescrObserver(recordingFileId);\r\n rfDescrObs.subscribe(value => {\r\n rf = value;\r\n }, (error) => {\r\n observer.error(error);\r\n }, () => {\r\n let rfAudioObs = this.fetchAudiofile(recordingFileId);\r\n rfAudioObs.subscribe(resp => {\r\n // Do not use Promise version, which does not work with Safari 13\r\n if(resp.body) {\r\n aCtx.decodeAudioData(resp.body, ab => {\r\n if(rf) {\r\n rf.audioBuffer = ab\r\n }else{\r\n observer.error('Recording file object null');\r\n }\r\n if (this.debugDelay > 0) {\r\n window.setTimeout(() => {\r\n observer.next(rf);\r\n observer.complete();\r\n }, this.debugDelay);\r\n } else {\r\n observer.next(rf);\r\n observer.complete();\r\n }\r\n })\r\n }else{\r\n observer.error('Received no audio data');\r\n }\r\n },\r\n (error: HttpErrorResponse) => {\r\n if (error.status == 404) {\r\n // Interpret not as an error, the file ist not recorded yet\r\n observer.next(null);\r\n observer.complete()\r\n } else {\r\n // all other states are errors\r\n observer.error(error);\r\n observer.complete();\r\n }\r\n });\r\n\r\n });\r\n });\r\n\r\n return wobs;\r\n }\r\n\r\n saveEditSelection(recordingFileId: string | number,editSampleRate:number,editStartFrame:number,editEndFrame:number): Observable<RecordingFile | null> {\r\n let recUrl = this.apiEndPoint + RecordingFileService.RECOFILE_API_CTX + '/' + recordingFileId;\r\n if (this.config && this.config.apiType === ApiType.FILES) {\r\n // for development and demo\r\n // append UUID to make request URL unique to avoid localhost server caching\r\n recUrl = recUrl + '.json?requestUUID='+UUID.generate();\r\n }\r\n console.log(\"Path request URL: \"+recUrl)\r\n return this.http.patch<RecordingFile>(recUrl,{editSampleRate:editSampleRate,editStartFrame:editStartFrame,editEndFrame:editEndFrame},{ withCredentials: this.withCredentials });\r\n }\r\n\r\n}\r\n\r\n\r\n","import {Component, Input, OnInit} from '@angular/core';\r\nimport {RecordingFileUtil} from \"./recording-file\";\r\nimport {RecordingFile} from \"../../recording\";\r\n\r\n@Component({\r\n selector: 'app-recording-file-meta',\r\n template: `\r\n <mat-card>\r\n <mat-card-title>Recording file ID: {{recordingFile?.recordingFileId}}</mat-card-title>\r\n <mat-card-content>\r\n <table>\r\n <tr>\r\n <td>Itemcode:</td>\r\n <td>{{recordingFile?.recording?.itemcode}}</td>\r\n </tr>\r\n <tr *ngIf=\"recordingFile?.date\">\r\n <td>Date:</td>\r\n <td>{{recordingFile?.date}}</td>\r\n </tr>\r\n <tr>\r\n <td>Prompt:</td>\r\n <td>{{recordingAsPlainText()}}</td>\r\n </tr>\r\n \r\n <tr *ngIf=\"sessionId\">\r\n <td>Session:</td>\r\n <td>{{sessionId}}</td>\r\n </tr>\r\n </table>\r\n </mat-card-content>\r\n </mat-card>\r\n `,\r\n styles: []\r\n})\r\nexport class RecordingFileMetaComponent{\r\n\r\n @Input() sessionId:string | number | null=null;\r\n @Input() recordingFile:RecordingFile|null=null;\r\n\r\n recordingAsPlainText(){\r\n let t=null;\r\n if(this.recordingFile) {\r\n t= RecordingFileUtil.recordingAsPlainText(this.recordingFile);\r\n }\r\n return t;\r\n }\r\n}\r\n","import {Component, Input, OnInit, ViewChild} from '@angular/core';\r\nimport {Action} from \"../../../action/action\";\r\n\r\n@Component({\r\n selector: 'app-recording-file-navi',\r\n template: `\r\n <div #controlPanel style=\"display:flex;flex-direction: row;\">\r\n <div #navi style=\"flex: 0;display:flex;flex-direction: row;flex-wrap: nowrap\">\r\n <fieldset>\r\n <legend>Versions</legend>\r\n <mat-progress-spinner *ngIf=\"naviInfoLoading\" mode=\"indeterminate\" [diameter]=\"15\"></mat-progress-spinner>\r\n <select *ngIf=\"!naviInfoLoading\" [disabled]=\"versions==null || versions.length==1\" (change)=\"selectVersionChange($event)\">\r\n <option *ngFor=\"let v of versions; let i = index\" [selected]=\"v===version\" value=\"{{v}}\">{{v}}<span *ngIf=\"i==0\"> (latest)</span></option>\r\n </select>\r\n </fieldset>\r\n <fieldset>\r\n <legend>Navigate</legend>\r\n <mat-progress-spinner *ngIf=\"naviInfoLoading\" mode=\"indeterminate\" [diameter]=\"15\"></mat-progress-spinner>\r\n <div *ngIf=\"!naviInfoLoading\" style=\"flex: 0;display:flex;flex-direction: row;flex-wrap: nowrap\">\r\n <button (click)=\"firstAction?.perform()\" [disabled]=\"!firstAction || firstAction?.disabled\" matTooltip=\"First recording file\">\r\n <mat-icon>first_page</mat-icon>\r\n </button>\r\n <button (click)=\"prevAction?.perform()\" [disabled]=\"!prevAction || prevAction?.disabled\" matTooltip=\"Previous recording file\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button (click)=\"nextAction?.perform()\" [disabled]=\"!nextAction || nextAction?.disabled\" matTooltip=\"Next recording file\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n <button (click)=\"lastAction?.perform()\" [disabled]=\"!lastAction || lastAction?.disabled\" matTooltip=\"Last recording file\">\r\n <mat-icon>last_page</mat-icon>\r\n </button>\r\n </div>\r\n <p *ngIf=\"items && itemPos!==null && itemPos!==undefined\">Item {{itemPos+1}} of {{items}}</p>\r\n <p>(List ordered by date)</p>\r\n </fieldset>\r\n </div>\r\n </div>\r\n `,\r\n styles: [\r\n `:host {\r\n flex: 0;\r\n\r\n }`]\r\n})\r\nexport class RecordingFileNaviComponent implements OnInit {\r\n @Input() firstAction: Action<void>|undefined;\r\n @Input() prevAction: Action<void>|undefined;\r\n @Input() nextAction: Action<void>|undefined;\r\n @Input() lastAction: Action<void>|undefined;\r\n @Input() items:number | null|undefined;\r\n @Input() itemPos:number | null|undefined;\r\n @Input() selectVersion: Action<number>|undefined;\r\n @Input() versions: Array<number>|null=null;\r\n @Input() version: number|null=null;\r\n\r\n @Input() naviInfoLoading=false;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n selectVersionChange(ev:Event){\r\n //console.debug(\"Change event: \"+ev.target.value+ \", as Nr: \"+versionNr);\r\n\r\n const selEl = ev.target as HTMLSelectElement;\r\n let versionNr = parseInt(selEl.value);\r\n if(this.selectVersion) {\r\n this.selectVersion.perform(versionNr);\r\n }\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n ViewChild,\r\n ChangeDetectorRef,\r\n AfterViewInit, Input, ElementRef, OnInit,\r\n} from '@angular/core'\r\n\r\n\r\nimport {ActivatedRoute, Params, Route, Router} from \"@angular/router\";\r\n\r\n\r\nimport {RecordingFileService} from \"./recordingfile-service\";\r\nimport {MatDialog} from \"@angular/material/dialog\";\r\nimport {AudioDisplayPlayer} from \"../../../audio/audio_player\";\r\n\r\nimport {AudioDisplayScrollPane} from \"../../../audio/ui/audio_display_scroll_pane\";\r\nimport {AudioContextProvider} from \"../../../audio/context\";\r\nimport {AudioClip} from \"../../../audio/persistor\";\r\nimport {Selection} from \"../../../audio/persistor\";\r\n\r\nimport {Action, ActionEvent} from \"../../../action/action\";\r\nimport {SessionService} from \"../session.service\";\r\nimport {RecordingService} from \"../../recordings/recordings.service\";\r\nimport {RecordingFile} from \"../../recording\";\r\nimport {RecordingFileUtil} from \"./recording-file\";\r\n\r\n\r\nexport class ItemcodeIndex{\r\n [itemcode: string]: Array<RecordingFile>;\r\n}\r\n\r\n@Component({\r\n\r\n selector: 'app-audiodisplayplayer',\r\n\r\n template: `\r\n\r\n <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>\r\n <div class=\"ctrlview\">\r\n <app-recording-file-meta [sessionId]=\"sessionId\" [recordingFile]=\"recordingFile\"></app-recording-file-meta>\r\n\r\n <audio-display-control [audioClip]=\"audioClip\"\r\n [playStartAction]=\"playStartAction\"\r\n [playSelectionAction]=\"playSelectionAction\"\r\n [playStopAction]=\"playStopAction\"\r\n [autoPlayOnSelectToggleAction]=\"ap?.autoPlayOnSelectToggleAction\"\r\n [zoomInAction]=\"zoomInAction\"\r\n [zoomOutAction]=\"zoomOutAction\"\r\n [zoomSelectedAction]=\"zoomSelectedAction\"\r\n [zoomFitToPanelAction]=\"zoomFitToPanelAction\"></audio-display-control>\r\n <app-recording-file-navi [items]=\"availRecFiles?.length\" [itemPos]=\"posInList\" [version]=\"recordingFile?recordingFile.version:null\" [versions]=\"versions\" [firstAction]=\"firstAction\" [prevAction]=\"prevAction\" [nextAction]=\"nextAction\" [lastAction]=\"lastAction\" [selectVersion]=\"toVersionAction\" [naviInfoLoading]=\"naviInfoLoading\"></app-recording-file-navi>\r\n </div>\r\n `,\r\n styles: [\r\n `:host {\r\n flex: 2;\r\n display: flex;\r\n flex-direction: column;\r\n min-height:0;\r\n overflow: hidden;\r\n padding: 20px;\r\n z-index: 5;\r\n box-sizing: border-box;\r\n background-color: white;\r\n }`,`\r\n .ctrlview{\r\n display: flex;\r\n flex-direction: row;\r\n\r\n }\r\n `,`\r\n audio-display-control{\r\n\r\n flex: 3;\r\n }\r\n `]\r\n\r\n})\r\nexport class RecordingFileViewComponent extends AudioDisplayPlayer implements OnInit,AfterViewInit {\r\n\r\n //protected _recordingFileId: string | number = null;\r\n\r\n sessionId: string | number | null= null;\r\n sessionIdFromRoute:string|null=null;\r\n\r\n availRecFiles!: Array<Array<RecordingFile>>;\r\n versions: Array<number>|null=null;\r\n\r\n recordingFile: RecordingFile|null=null;\r\n private routedByQueryParam=false;\r\n posInList: number|null=null;\r\n\r\n\r\n @ViewChild(AudioDisplayScrollPane)\r\n private ac!: AudioDisplayScrollPane;\r\n\r\n firstAction: Action<void>;\r\n prevAction: Action<void>;\r\n nextAction: Action<void>;\r\n lastAction: Action<void>;\r\n toVersionAction: Action<number>;\r\n\r\n naviInfoLoading=false;\r\n\r\n constructor(protected recordingFileService: RecordingFileService, protected recordingService: RecordingService, protected sessionService: SessionService, protected router:Router,protected route: ActivatedRoute, protected ref: ChangeDetectorRef, protected eRef: ElementRef, protected dialog: MatDialog) {\r\n super(route, ref, eRef)\r\n this.parentE = this.eRef.nativeElement;\r\n this.firstAction = new Action<void>('First');\r\n this.firstAction.onAction= ()=>{\r\n this.posInList=0;\r\n this.navigateToRecordingFile();\r\n }\r\n this.prevAction = new Action<void>('Previous');\r\n this.prevAction.onAction= ()=>this.prevFile();\r\n this.nextAction = new Action<void>('Next');\r\n this.nextAction.onAction= ()=>this.nextFile();\r\n this.lastAction = new Action<void>('Last');\r\n this.lastAction.onAction= ()=>{\r\n if(this.availRecFiles) {\r\n this.posInList = this.availRecFiles.length - 1;\r\n this.navigateToRecordingFile();\r\n }\r\n }\r\n\r\n this.toVersionAction=new Action<number>('To version');\r\n this.toVersionAction.onAction= (ae)=>this.toVersion(ae);\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n super.ngAfterViewInit()\r\n this.route.queryParams.subscribe((params: Params) => {\r\n let rfIdP = params['recordingFileId'];\r\n let sIdP = params['sessionId'];\r\n if (sIdP) {\r\n this.sessionIdFromRoute=sIdP;\r\n }\r\n if (rfIdP) {\r\n this.routedByQueryParam=true;\r\n this.loadRecFile(rfIdP);\r\n }\r\n });\r\n this.route.params.subscribe((params: Params) => {\r\n let rfIdP = params['recordingFileId'];\r\n let sIdP = params['sessionId'];\r\n if (sIdP) {\r\n this.sessionIdFromRoute=sIdP;\r\n }\r\n if (rfIdP) {\r\n this.routedByQueryParam=false;\r\n this.loadRecFile(rfIdP);\r\n }\r\n });\r\n // if(this.sessionId){\r\n // this.loadSession(this.sessionId);\r\n // }\r\n }\r\n\r\n\r\n private navigateToId(rfId:number| string){\r\n\r\n if(this.routedByQueryParam){\r\n this.router.navigate([], {relativeTo: this.route, queryParams:{'recordingFileId':rfId}})\r\n }else {\r\n this.router.navigate(['../' + rfId], {relativeTo: this.route});\r\n }\r\n }\r\n\r\n private navigateToRecordingFile(){\r\n if(this.posInList!=null) {\r\n let latestNextRf = this.availRecFiles[this.posInList][0];\r\n let lnRfId = latestNextRf.recordingFileId;\r\n if(lnRfId) {\r\n this.navigateToId(lnRfId);\r\n }\r\n }\r\n }\r\n\r\n toVersion(ae: ActionEvent<number>) {\r\n let toRfId = null;\r\n let version = ae.value;\r\n if(this.posInList!=null) {\r\n let cRfs = this.availRecFiles[this.posInList];\r\n let availVersionCnt = cRfs.length;\r\n for (let cRf of cRfs) {\r\n if (cRf.version === version) {\r\n toRfId = cRf.recordingFileId;\r\n break;\r\n }\r\n }\r\n }\r\n if (toRfId != null) {\r\n this.navigateToId(toRfId);\r\n }\r\n }\r\n\r\n\r\n prevFile() {\r\n if(this.posInList!=null) {\r\n this.posInList--;\r\n }\r\n this.navigateToRecordingFile()\r\n }\r\n nextFile() {\r\n if(this.posInList!=null) {\r\n this.posInList++;\r\n }\r\n this.navigateToRecordingFile()\r\n }\r\n\r\n private positionInList():number | null{\r\n if (this.availRecFiles && this.recordingFile) {\r\n let cic = this.recordingFile.recording.itemcode;\r\n let itemCnt = this.availRecFiles.length\r\n for (let rfdi = 0; rfdi < itemCnt; rfdi++) {\r\n let ar = this.availRecFiles[rfdi][0].recording;\r\n if (cic === ar.itemcode) {\r\n return rfdi;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private updatePos(){\r\n this.posInList=this.positionInList();\r\n this.toVersionAction.disabled=true;\r\n if(this.availRecFiles){\r\n let avRfsLen=this.availRecFiles.length;\r\n if(this.posInList !=null && avRfsLen>this.posInList) {\r\n let arfs = this.availRecFiles[this.posInList];\r\n if (arfs) {\r\n this.versions = new Array<number>();\r\n for (let arf of arfs) {\r\n this.versions.push(arf.version)\r\n }\r\n this.toVersionAction.disabled=(this.versions.length<2);\r\n }\r\n }\r\n }\r\n this.updateActions()\r\n }\r\n\r\n protected loadRecFile(rfId:number | string) {\r\n this.ap?.stop();\r\n this.audioClip =null;\r\n this.recordingFile=null;\r\n this.posInList=null;\r\n this.updateActions();\r\n let audioContext = AudioContextProvider.audioContextInstance();\r\n if(audioContext) {\r\n this.recordingFileService.fetchRecordingFile(audioContext, rfId).subscribe(value => {\r\n this.status = 'Audio file loaded.';\r\n let clip = null;\r\n this.recordingFile = value;\r\n if (this.recordingFile) {\r\n let ab = this.recordingFile.audioBuffer;\r\n if (ab) {\r\n clip = new AudioClip(ab);\r\n\r\n let esffsr = null;\r\n let eeffsr = null;\r\n let esr = null;\r\n\r\n if (clip.buffer != null) {\r\n esr = ab.sampleRate;\r\n if (esr != null) {\r\n esffsr = RecordingFileUtil.editStartFrameForSampleRate(this.recordingFile, esr);\r\n eeffsr = RecordingFileUtil.editEndFrameForSampleRate(this.recordingFile, esr);\r\n }\r\n let sel: Selection | null = null;\r\n if (esffsr != null) {\r\n if (eeffsr != null) {\r\n sel = new Selection(ab.sampleRate, esffsr, eeffsr);\r\n } else {\r\n let ch0 = ab.getChannelData(0);\r\n let frameLength = ch0.length;\r\n sel = new Selection(esr, esffsr, frameLength);\r\n }\r\n } else if (eeffsr != null) {\r\n sel = new Selection(esr, 0, eeffsr);\r\n }\r\n clip.selection = sel\r\n }\r\n }\r\n }\r\n this.audioClip = clip\r\n this.loadedRecfile();\r\n\r\n }, error1 => {\r\n this.status = 'Error loading audio file!';\r\n });\r\n }\r\n }\r\n\r\n protected loadedRecfile() {\r\n if(this.recordingFile && !this.sessionId) {\r\n let sId=this.recordingFile.session\r\n if(!sId){\r\n sId=this.sessionIdFromRoute;\r\n }\r\n if (sId) {\r\n this.loadSession(sId);\r\n }\r\n }\r\n this.updatePos();\r\n this.ref.detectChanges();\r\n }\r\n\r\n private updateActions(){\r\n let itemCnt:number|null=null;\r\n if(this.availRecFiles) {\r\n itemCnt = this.availRecFiles.length;\r\n }\r\n this.firstAction.disabled=(this.posInList==null || this.posInList == 0);\r\n this.prevAction.disabled=(this.posInList==null || this.posInList == 0);\r\n this.nextAction.disabled=(this.posInList==null || itemCnt==null || this.posInList >= itemCnt - 1);\r\n this.lastAction.disabled=(this.posInList==null || itemCnt==null || this.posInList >= itemCnt - 1);\r\n }\r\n\r\n private loadSession(sessionId: string| number) {\r\n // load session and recording file meta data only when on init and when session changes\r\n if (<string>sessionId != <string>this.sessionId) {\r\n // tell UI that we are working...\r\n this.naviInfoLoading=true;\r\n this.sessionService.sessionObserver(<string>sessionId).subscribe((s) => {\r\n // received session data\r\n this.sessionId = s.sessionId;\r\n // fetch recording file meta data list\r\n this.recordingService.recordingFileList(s.project, s.sessionId).subscribe((rfds) => {\r\n this.availRecFiles = new Array<Array<RecordingFile>>();\r\n // build structure indexed by itemcode\r\n let icIdx = new ItemcodeIndex();\r\n for (let rfdi = 0; rfdi < rfds.length; rfdi++) {\r\n let rfd = rfds[rfdi];\r\n if (rfd.date) {\r\n // convert date string for faster sorting later\r\n let rfdd = new Date(rfd.date);\r\n rfd._dateAsDateObj = rfdd;\r\n }\r\n let r = rfd.recording;\r\n let ic = r.itemcode;\r\n if(ic) {\r\n let exRfsForIc = icIdx[ic];\r\n if (exRfsForIc == null) {\r\n // itemcode not yet stored\r\n let arfd = new Array<RecordingFile>();\r\n arfd.push(rfd);\r\n icIdx[ic] = arfd;\r\n this.availRecFiles.push(arfd);\r\n } else {\r\n // rec file with itemcode already exists, add (push) this version ...\r\n exRfsForIc.push(rfd);\r\n // .. and sort latest version (highest version number) to lowest index\r\n exRfsForIc.sort((rfd1, rfd2) => {\r\n return rfd2.version - rfd1.version;\r\n })\r\n }\r\n }\r\n }\r\n // have unsorted ietmcode indexed recording files here\r\n // sort them ordered by date of latest version ascending\r\n this.availRecFiles.sort((rfs1, rfs2) => {\r\n let d1 = rfs2[0]._dateAsDateObj;\r\n let d2 = rfs1[0]._dateAsDateObj;\r\n if (d1 == null) {\r\n if (d2 == null) {\r\n return 0;\r\n } else {\r\n // Sort entries whose dates are not set to the end\r\n return -1;\r\n }\r\n } else {\r\n if (d2 == null) {\r\n // Sort entries whose dates are not set to the end\r\n return 1;\r\n } else {\r\n // Compare date by time in milliseconds value\r\n return d2.getTime() - d1.getTime();\r\n }\r\n }\r\n });\r\n this.updatePos()\r\n this.naviInfoLoading=false;\r\n this.ref.detectChanges();\r\n });\r\n });\r\n }\r\n }\r\n}\r\n\r\n","import {\r\n Component,\r\n ChangeDetectorRef,\r\n AfterViewInit,\r\n ElementRef\r\n} from '@angular/core'\r\n\r\n\r\nimport {ActivatedRoute, Router} from \"@angular/router\";\r\nimport {RecordingFileService} from \"./recordingfile-service\";\r\nimport {MatDialog} from \"@angular/material/dialog\";\r\nimport {Selection} from \"../../../audio/persistor\";\r\nimport {MessageDialog} from \"../../../ui/message_dialog\";\r\nimport {Action} from \"../../../action/action\";\r\nimport {RecordingFileViewComponent} from \"./recording-file-view.component\";\r\nimport {SessionService} from \"../session.service\";\r\nimport {RecordingService} from \"../../recordings/recordings.service\";\r\nimport {MatSnackBar} from \"@angular/material/snack-bar\";\r\n\r\n@Component({\r\n\r\n selector: 'app-audiodisplayplayer',\r\n\r\n template: `\r\n <h1>Recording file editing</h1>\r\n <p>On export or delivery the editing selection of the recording file is cut out. If no editing selection is applied the original file is exported.</p>\r\n\r\n <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>\r\n <div class=\"ctrlview\">\r\n <app-recording-file-meta [sessionId]=\"sessionId\" [recordingFile]=\"recordingFile\"></app-recording-file-meta>\r\n <audio-display-control [audioClip]=\"audioClip\"\r\n [playStartAction]=\"playStartAction\"\r\n [playSelectionAction]=\"playSelectionAction\"\r\n [playStopAction]=\"playStopAction\"\r\n [autoPlayOnSelectToggleAction]=\"ap?.autoPlayOnSelectToggleAction\"\r\n [zoomInAction]=\"zoomInAction\"\r\n [zoomOutAction]=\"zoomOutAction\"\r\n [zoomSelectedAction]=\"zoomSelectedAction\"\r\n [zoomFitToPanelAction]=\"zoomFitToPanelAction\"></audio-display-control>\r\n <app-recording-file-navi [items]=\"availRecFiles?.length\" [itemPos]=\"posInList\" [version]=\"recordingFile?recordingFile.version:null\" [versions]=\"versions\" [firstAction]=\"firstAction\" [prevAction]=\"prevAction\" [nextAction]=\"nextAction\" [lastAction]=\"lastAction\" [selectVersion]=\"toVersionAction\" [naviInfoLoading]=\"naviInfoLoading\"></app-recording-file-navi>\r\n </div>\r\n\r\n <button mat-raised-button color=\"accent\" (click)=\"applySelection()\" [disabled]=\"editSaved\">{{this.applyButtonText()}}</button>\r\n `,\r\n styles: [\r\n `:host {\r\n flex: 2;\r\n display: flex;\r\n flex-direction: column;\r\n min-height:0;\r\n overflow: hidden;\r\n padding: 20px;\r\n z-index: 5;\r\n box-sizing: border-box;\r\n background-color: white;\r\n }`,`\r\n .ctrlview{\r\n display: flex;\r\n flex-direction: row;\r\n }\r\n `,`\r\n audio-display-control{\r\n\r\n flex: 3;\r\n }\r\n `]\r\n\r\n})\r\nexport class RecordingFileUI extends RecordingFileViewComponent implements AfterViewInit {\r\n\r\n savedEditSelection:Selection|null=null;\r\n editSaved:boolean=true\r\n\r\n constructor(protected recordingFileService:RecordingFileService,protected recordingService:RecordingService,protected sessionService:SessionService,protected router:Router,protected route: ActivatedRoute, protected ref: ChangeDetectorRef,protected eRef:ElementRef, protected dialog:MatDialog,private snackBar: MatSnackBar) {\r\n super(recordingFileService,recordingService,sessionService,router,route,ref,eRef,dialog)\r\n this.parentE=this.eRef.nativeElement;\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n super.ngAfterViewInit()\r\n }\r\n\r\n applyButtonText():string {\r\n if(this.audioClip) {\r\n let s = this.audioClip.selection\r\n if (s) {\r\n return \"Apply current selection as editing selection\";\r\n }else{\r\n return \"Cancel out editing selection\";\r\n }\r\n }\r\n // just as fallback\r\n return \"Apply selection\";\r\n }\r\n\r\n protected loadRecFile(rfId:number | string) {\r\n this.editSaved = true;\r\n super.loadRecFile(rfId);\r\n }\r\n\r\nprotected loadedRecfile() {\r\n super.loadedRecfile();\r\n if(this.audioClip) {\r\n this.audioClip.addSelectionObserver((clip) => {\r\n let s = clip.selection\r\n this.editSaved = ((this.savedEditSelection == null && s == null) || this.savedEditSelection != null && this.savedEditSelection.equals(s))\r\n });\r\n }\r\n this.savedEditSelection = this.audioClip?this.audioClip.selection:null;\r\n this.editSaved = true\r\n}\r\n\r\n applySelection(){\r\n if(this.audioClip) {\r\n let ab=this.audioClip.buffer;\r\n let s = this.audioClip.selection\r\n if (s && ab && this.recordingFile?.recordingFileId) {\r\n let sr= ab.sampleRate;\r\n let sf = s.startFrame;\r\n let ef = s.endFrame;\r\n this.recordingFileService.saveEditSelection(this.recordingFile.recordingFileId, sr, sf, ef).subscribe((value) => {},\r\n () => {\r\n this.dialog.open(MessageDialog, {\r\n\r\n data: {\r\n type: 'error',\r\n title: 'Save selection edit error',\r\n msg: \"Could not save edit selection to WikiSpeech server!\",\r\n advice: \"Please check network connection and server state.\"\r\n }\r\n })\r\n },\r\n () => {\r\n // Or use returned selection value from server?\r\n this.savedEditSelection = s\r\n this.editSaved = true\r\n this.snackBar.open('Selection edit saved successfully.', 'OK', {duration: 1500})\r\n });\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {SpeechrecorderngComponent} from \"./speechrecorderng.component\";\r\nimport {SimpleTrafficLight} from \"./speechrecorder/startstopsignal/ui/simpletrafficlight\";\r\n\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {Progress} from \"./speechrecorder/session/progress\";\r\nimport {\r\n PromptContainer, Prompter, Prompting, PromptingContainer, Recinstructions,\r\n} from \"./speechrecorder/session/prompting\";\r\nimport {SessionManager} from \"./speechrecorder/session/sessionmanager\";\r\nimport {WarningBar} from \"./speechrecorder/session/warning_bar\";\r\nimport {ScrollIntoViewDirective} from \"./utils/scrollIntoViewToBottom\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatDialogModule } from \"@angular/material/dialog\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\r\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport {HttpClientModule} from \"@angular/common/http\";\r\nimport {SessionService} from \"./speechrecorder/session/session.service\";\r\nimport {ScriptService} from \"./speechrecorder/script/script.service\";\r\nimport {RouterModule, Routes} from \"@angular/router\";\r\nimport {SpeechRecorderConfig, SPEECHRECORDER_CONFIG} from \"./spr.config\";\r\nimport {SpeechRecorderUploader} from \"./speechrecorder/spruploader\";\r\nimport {ProjectService} from \"./speechrecorder/project/project.service\";\r\nimport {\r\n ControlPanel,\r\n ProgressDisplay,\r\n ReadyStateIndicator,\r\n StatusDisplay,\r\n TransportPanel,\r\n UploadStatus\r\n} from \"./speechrecorder/session/controlpanel\";\r\nimport {FlexLayoutModule} from \"@angular/flex-layout\";\r\nimport {SessionFinishedDialog} from \"./speechrecorder/session/session_finished_dialog\";\r\nimport {MessageDialog} from \"./ui/message_dialog\";\r\nimport {RecordingItemControls, RecordingItemDisplay} from \"./ui/recordingitem_display\";\r\nimport {RecordingService} from \"./speechrecorder/recordings/recordings.service\";\r\nimport {ScrollPaneHorizontal} from \"./audio/ui/scroll_pane_horizontal\";\r\nimport {AudioClipUIContainer} from \"./audio/ui/container\";\r\nimport {AudioSignal} from \"./audio/ui/audiosignal\";\r\nimport {Sonagram} from \"./audio/ui/sonagram\";\r\nimport {AudioDisplayPlayer} from \"./audio/audio_player\";\r\nimport {AudioDisplay} from \"./audio/audio_display\";\r\nimport {AudioDisplayControl} from \"./audio/ui/audio_display_control\";\r\nimport {LevelBar} from \"./audio/ui/livelevel\";\r\nimport {AudioDisplayScrollPane} from \"./audio/ui/audio_display_scroll_pane\";\r\nimport {UUID} from \"./utils/utils\";\r\nimport {MatCheckboxModule} from \"@angular/material/checkbox\";\r\nimport {MatCard, MatCardModule} from \"@angular/material/card\";\r\nimport {MatDividerModule} from \"@angular/material/divider\";\r\nimport {MatGridListModule} from \"@angular/material/grid-list\";\r\nimport {RecordingFileUI} from \"./speechrecorder/session/recordingfile/recording-file-u-i.component\";\r\nimport {RecordingFileService} from \"./speechrecorder/session/recordingfile/recordingfile-service\";\r\nimport {RecordingFileViewComponent} from \"./speechrecorder/session/recordingfile/recording-file-view.component\";\r\nimport {MatTableModule} from \"@angular/material/table\";\r\nimport { RecordingFileNaviComponent } from './speechrecorder/session/recordingfile/recording-file-navi.component';\r\nimport {RecordingFileMetaComponent} from \"./speechrecorder/session/recordingfile/recording-file-meta.component\";\r\nimport {MatSelectModule} from \"@angular/material/select\";\r\nimport {MatInputModule} from \"@angular/material/input\";\r\nimport {MatSnackBarModule} from \"@angular/material/snack-bar\";\r\n\r\n\r\n\r\nexport const SPR_ROUTES: Routes = [\r\n { path: 'spr/session/:id', component: SpeechrecorderngComponent },\r\n { path: 'spr/db/project/:project/session/:sessionId/recordingfile/_view/:recordingFileId', component: RecordingFileViewComponent },\r\n { path: 'spr/db/project/:project/session/:sessionId/recordingfile/_edit/:recordingFileId', component: RecordingFileUI },\r\n { path: 'spr/db/project/:project/session/:sessionId/recordingfile/_view', component: RecordingFileViewComponent },\r\n { path: 'spr/db/project/:project/session/:sessionId/recordingfile/_edit', component: RecordingFileUI },\r\n { path: 'spr/db/project/:project/session/:sessionId/recordingfile/:recordingFileId', component: RecordingFileUI },\r\n { path: 'spr/db/project/:project/session/:sessionId/recordingfile', component: RecordingFileUI },\r\n { path: 'spr/db/recordingfile/_view/:recordingFileId', component: RecordingFileViewComponent },\r\n { path: 'spr/db/recordingfile/_edit/:recordingFileId', component: RecordingFileUI },\r\n { path: 'spr/db/recordingfile/_view/', component: RecordingFileViewComponent },\r\n { path: 'spr/db/recordingfile/_view', component: RecordingFileViewComponent },\r\n { path: 'spr/db/recordingfile/_edit', component: RecordingFileUI },\r\n { path: 'spr/db/recordingfile/:recordingFileId', component: RecordingFileUI },\r\n { path: 'spr/db/recordingfile', component: RecordingFileUI },\r\n { path: 'spr', component: SpeechrecorderngComponent }\r\n];\r\n\r\n@NgModule({\r\n declarations: [AudioSignal,Sonagram,ScrollPaneHorizontal,AudioClipUIContainer,AudioDisplayScrollPane,AudioDisplay,AudioDisplayPlayer,AudioDisplayControl,LevelBar,Progress,SimpleTrafficLight,Recinstructions,Prompter,PromptContainer,PromptingContainer,Prompting,StatusDisplay,\r\n ProgressDisplay,RecordingItemDisplay,RecordingItemControls,UploadStatus,TransportPanel,ReadyStateIndicator,ControlPanel,WarningBar,SessionManager,MessageDialog,SessionFinishedDialog,SpeechrecorderngComponent,RecordingFileViewComponent,RecordingFileUI,ScrollIntoViewDirective, RecordingFileNaviComponent,RecordingFileMetaComponent],\r\n entryComponents: [\r\n MessageDialog,SessionFinishedDialog\r\n ],\r\n exports: [MessageDialog,SpeechrecorderngComponent,ScrollPaneHorizontal,AudioClipUIContainer,AudioDisplayScrollPane,AudioDisplay,AudioDisplayPlayer,AudioDisplayControl,LevelBar],\r\n imports: [RouterModule.forChild(SPR_ROUTES), FlexLayoutModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule,MatInputModule, MatSelectModule,MatSnackBarModule],\r\n providers: [SessionService,ProjectService,ScriptService,RecordingService,RecordingFileService,SpeechRecorderUploader]\r\n\r\n})\r\nexport class SpeechrecorderngModule{\r\n\r\n static forRoot(config: SpeechRecorderConfig): ModuleWithProviders<SpeechrecorderngModule> {\r\n return {\r\n ngModule: SpeechrecorderngModule,\r\n providers: [\r\n {provide: SPEECHRECORDER_CONFIG, useValue: config }\r\n ]\r\n };\r\n }\r\n}\r\n","export const VERSION='2.21.3'","/*\r\n * Public API Surface of speechrecorderng\r\n */\r\n\r\n\r\nimport {AudioDisplayControl} from \"./lib/audio/ui/audio_display_control\";\r\n\r\nexport {SpeechrecorderngModule} from './lib/speechrecorderng.module'\r\nexport {VERSION} from './lib/spr.module.version'\r\nexport {SPEECHRECORDER_CONFIG} from './lib/spr.config'\r\n\r\nexport {UUID} from \"./lib/utils/utils\"\r\nexport {Action} from \"./lib/action/action\";\r\n\r\nexport {MessageDialog} from \"./lib/ui/message_dialog\"\r\n\r\nexport {AudioClip,Selection} from './lib/audio/persistor'\r\nexport {AudioPlayer, AudioPlayerListener, AudioPlayerEvent, EventType} from './lib/audio/playback/player'\r\nexport {AudioDisplay} from './lib/audio/audio_display'\r\nexport {AudioDisplayPlayer} from './lib/audio/audio_player'\r\nexport {AudioClipUIContainer} from './lib/audio/ui/container'\r\nexport {ScrollPaneHorizontal} from './lib/audio/ui/scroll_pane_horizontal'\r\nexport {AudioDisplayScrollPane} from \"./lib/audio/ui/audio_display_scroll_pane\";\r\nexport {AudioContextProvider} from \"./lib/audio/context\";\r\nexport {AudioDisplayControl} from \"./lib/audio/ui/audio_display_control\"\r\nexport {LevelBar} from './lib/audio/ui/livelevel'\r\n\r\nexport {ProjectService} from './lib/speechrecorder/project/project.service'\r\nexport {Session} from './lib/speechrecorder/session/session'\r\nexport {SessionService} from './lib/speechrecorder/session/session.service'\r\nexport {ScriptService} from './lib/speechrecorder/script/script.service'\r\nexport {Script,Section,Group,PromptItem,Mediaitem,PromptPhase,Mode} from './lib/speechrecorder/script/script'\r\nexport {RecordingService} from './lib/speechrecorder/recordings/recordings.service'\r\nexport {RecordingFile} from './lib/speechrecorder/recording'\r\nexport {RecordingFileService} from './lib/speechrecorder/session/recordingfile/recordingfile-service'\r\nexport {RecordingFileViewComponent} from './lib/speechrecorder/session/recordingfile/recording-file-view.component'\r\nexport {RecordingFileUI} from './lib/speechrecorder/session/recordingfile/recording-file-u-i.component'\r\nexport {SpeechRecorderConfig,ApiType} from './lib/spr.config'\r\nexport {SpeechrecorderngComponent} from './lib/speechrecorderng.component'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EventType","Browser","Platform","CfgPlatform","UploadStatus","timeout","InjectionToken","ApiType","Injectable","Inject","Observable","DEFAULT_WARN_DB_LEVEL","MIN_DB_LEVEL","Component","ViewChild","HostListener","Input","EventEmitter","Output","Directive","MatCheckbox","HostBinding","MAT_DIALOG_DATA","HttpHeaders","PlaybackEventType","FlexLayoutModule","CommonModule","MatIconModule","MatButtonModule","MatDialogModule","MatProgressBarModule","MatProgressSpinnerModule","MatTooltipModule","HttpClientModule","MatCheckboxModule","MatCardModule","MatDividerModule","MatGridListModule","MatTableModule","MatInputModule","MatSelectModule","MatSnackBarModule","RouterModule","NgModule"],"mappings":"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"}
|