speechrecorderng 2.24.1 → 2.24.2
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/esm2020/lib/audio/capture/capture.mjs +38 -10
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/fesm2015/speechrecorderng.mjs +38 -10
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +38 -10
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/lib/spr.module.version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speechrecorderng.mjs","sources":["../../../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/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/dsp/utils.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/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/audio/ui/livelevel.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/controlpanel.ts","../../../projects/speechrecorderng/src/lib/audio/dsp/level_measure.ts","../../../projects/speechrecorderng/src/lib/ui/recordingitem_display.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/basicrecorder.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/recorder_component.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/media/utils.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recording_list.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recorder_combi_pane.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/audiorecorder.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\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 recordingDeviceWakeLock?:boolean,\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\r\n // Typescript lib.dom.ts MediaTrackSettings.channelCount is missing\r\n // https://github.com/mdn/browser-compat-data/blob/5493d8f937e05b2ddbd41b99f5bdfad4a1f2ed85/api/MediaTrackSettings.json\r\n //@ts-ignore\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\" | \"PRERECORDINGONLY\" | \"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 prerecdelay?: number,\r\n prerecording?: number,\r\n recduration?: number,\r\n postrecording?: number,\r\n postrecdelay?: 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\nexport interface RecordingFileDescriptor {\r\n recording:PromptItem;\r\n version:number;\r\n}\r\n\r\nexport class RecordingFileDescriptorImpl {\r\n recording!:PromptItem;\r\n version!:number;\r\n constructor() {}\r\n}\r\n\r\nexport class RecordingFile {\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 startedDate: string|null=null;\r\n _startedAsDateObj?:Date|null=null;\r\n audioBuffer:AudioBuffer|null=null;\r\n session:string|number|null=null;\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(uuid:string,sessionId:string|number,audioBuffer:AudioBuffer|null) {\r\n this.session=sessionId;\r\n this.audioBuffer=audioBuffer;\r\n this.uuid=uuid;\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 fns+=this.uuid;\r\n return fns;\r\n }\r\n}\r\n\r\n export class SprRecordingFile extends RecordingFile implements RecordingFileDescriptor{\r\n\r\n itemCode:string;\r\n\r\n recording!:PromptItem;\r\n version!:number;\r\n\r\n constructor(sessionId:string|number,itemcode:string,version:number,audioBuffer:AudioBuffer|null) {\r\n super(UUID.generate(),sessionId,audioBuffer);\r\n this.session=sessionId;\r\n this.itemCode=itemcode;\r\n this.version=version;\r\n this.audioBuffer=audioBuffer;\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|FormData;\r\n private _url:string;\r\n status: UploadStatus;\r\n\r\n constructor(blob:Blob|FormData, 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|FormData {\r\n return this._data;\r\n }\r\n\r\n public toString = () : string => {\r\n let s=`Upload: Status: ${this.status}, URL: ${this._url}`;\r\n if(this._data instanceof Blob){\r\n s=s+`, Size: ${this._data.size}`;\r\n }else if(this._data instanceof FormData){\r\n // TODO (iterate through parts ??)\r\n }\r\n return s;\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 private te:TextEncoder=new TextEncoder();\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 private dataSize(dt:Blob|FormData){\r\n let si=0;\r\n if(dt instanceof Blob){\r\n si=dt.size;\r\n }else if(dt instanceof FormData){\r\n dt.forEach((v,k)=>{\r\n if(v instanceof File){\r\n si+=v.size;\r\n }else if(typeof v ==='string'){\r\n // encode to UT-f8 to get upload size\r\n si+= this.te.encode().length;\r\n }\r\n })\r\n }\r\n return si;\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 = this.dataSize(ul.data);\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=this.dataSize(ul.data);\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 = this.dataSize(ul.data);\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 {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 if(cl.style.left!=leftStyle) {\r\n cl.style.left = leftStyle;\r\n }\r\n const topStyle=bounds.position.top + 'px';\r\n if(cl.style.top!=topStyle) {\r\n cl.style.top = topStyle;\r\n }\r\n }\r\n if (bounds.dimension.width) {\r\n let intW=Math.floor(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 if(cl.width!=intW) {\r\n cl.width = intW;\r\n }\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 if(cl.style.width!=wStr) {\r\n cl.style.width = wStr;\r\n }\r\n }\r\n }\r\n if (bounds.dimension.height) {\r\n let intH=Math.floor(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 if(cl.height!=intH) {\r\n cl.height = intH;\r\n }\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 if(cl.style.height!=hStr){\r\n cl.style.height = hStr;\r\n }\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 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","\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 overflow: hidden;\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 let vbLeftStyl = vbLeft + 'px';\r\n if (this.dc.style.left != vbLeftStyl) {\r\n this.dc.style.left = vbLeftStyl;\r\n }\r\n // top position\r\n const dTop = asH;\r\n const dTopStr = dTop + 'px';\r\n if (this.dc.style.top != dTopStr) {\r\n this.dc.style.top = dTopStr;\r\n }\r\n // width\r\n let vbWidthStyle = vbWidth + 'px';\r\n if (this.dc.style.width != vbWidthStyle) {\r\n this.dc.style.width = vbWidthStyle;\r\n }\r\n if (this.dc.width != vbWidth) {\r\n this.dc.width = vbWidth;\r\n }\r\n // height\r\n if(this.dc.height!=AudioClipUIContainer.DIVIDER_PIXEL_SIZE) {\r\n this.dc.height = AudioClipUIContainer.DIVIDER_PIXEL_SIZE;\r\n\r\n }\r\n let divPixelSizeStyle=AudioClipUIContainer.DIVIDER_PIXEL_SIZE.toString() + 'px';\r\n if(this.dc.style.height!=divPixelSizeStyle) {\r\n this.dc.style.height = divPixelSizeStyle;\r\n }\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 if(this.ce.style.width!='100%') {\r\n //console.log(\"set width to 100%\");\r\n this.ce.style.width = '100%';\r\n }\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 //ev.preventDefault();\r\n }\r\n }\r\n }\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 ev.preventDefault();\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 }\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 ev.preventDefault();\r\n }\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","\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 {SprRecordingFile} from \"../recording\";\r\n\r\nexport class Item {\r\n recs: Array<SprRecordingFile> | null;\r\n\r\n constructor(private _promptAsString: string, private _training: boolean,private _recording:boolean) {\r\n this.recs = null;\r\n }\r\n\r\n get promptAsString():string{\r\n return this._promptAsString;\r\n }\r\n\r\n get training():boolean{\r\n return this._training;\r\n }\r\n\r\n get recording():boolean{\r\n return this._recording;\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 {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 *ngIf=\"pausingEnabled\" (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 button {\r\n touch-action: manipulation;\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 @Input() pausingEnabled=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 || !this.pausingEnabled;\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","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 {\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 button {\r\n touch-action: manipulation;\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","import {TransportActions} from \"./controlpanel\";\r\nimport {Browser, UserAgent, UserAgentBuilder} from \"../../utils/ua-parser\";\r\nimport {MatDialog} from \"@angular/material/dialog\";\r\nimport {MessageDialog} from \"../../ui/message_dialog\";\r\nimport {Session} from \"./session\";\r\nimport {SessionService} from \"./session.service\";\r\nimport {AudioCapture} from \"../../audio/capture/capture\";\r\nimport {AudioDevice, AutoGainControlConfig} from \"../project/project\";\r\nimport {LevelInfos, LevelMeasure, StreamLevelMeasure} from \"../../audio/dsp/level_measure\";\r\nimport {AudioPlayer} from \"../../audio/playback/player\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {AudioClip} from \"../../audio/persistor\";\r\nimport {Action} from \"../../action/action\";\r\nimport {MIN_DB_LEVEL} from \"../../ui/recordingitem_display\";\r\nimport NoSleep from \"nosleep.js\";\r\n\r\nexport const FORCE_REQUEST_AUDIO_PERMISSIONS=false;\r\nexport const RECFILE_API_CTX = 'recfile';\r\nexport const MAX_RECORDING_TIME_MS = 1000 * 60 * 60 * 60; // 1 hour\r\n\r\nexport const LEVEL_BAR_INTERVALL_SECONDS = 0.1; // 100ms\r\n\r\nexport class BasicRecorder {\r\n\r\n protected userAgent:UserAgent;\r\n statusMsg: string='';\r\n statusAlertType!: string;\r\n statusWaiting: boolean=false;\r\n readonly=false;\r\n processingRecording=false;\r\n ac: AudioCapture|null=null;\r\n\r\n protected _wakeLock:boolean=false;\r\n // Property audioDevices from project config: list of names of allowed audio devices.\r\n protected _audioDevices: Array<AudioDevice> | null| undefined;\r\n protected _selectedDeviceId:string|undefined=undefined;\r\n protected selCaptureDeviceId: ConstrainDOMString | null;\r\n protected _channelCount = 2;\r\n protected _autoGainControlConfigs: Array<AutoGainControlConfig> | null| undefined;\r\n\r\n _session: Session|null=null;\r\n\r\n transportActions: TransportActions;\r\n playStartAction: Action<void>;\r\n\r\n uploadProgress: number = 100;\r\n uploadStatus: string = 'ok'\r\n audioSignalCollapsed = true;\r\n\r\n protected streamLevelMeasure: StreamLevelMeasure;\r\n protected levelMeasure: LevelMeasure;\r\n peakLevelInDb:number=MIN_DB_LEVEL;\r\n displayLevelInfos: LevelInfos | null=null;\r\n protected _controlAudioPlayer!: AudioPlayer;\r\n displayAudioClip: AudioClip | null=null;\r\n protected audioFetchSubscription:Subscription|null=null;\r\n\r\n protected destroyed=false;\r\n\r\n protected navigationDisabled=true;\r\n\r\n protected noSleep:NoSleep|null=null;\r\n\r\n\r\n constructor( public dialog: MatDialog,protected sessionService:SessionService) {\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 this.transportActions = new TransportActions();\r\n this.playStartAction = new Action('Play');\r\n this.levelMeasure = new LevelMeasure();\r\n this.streamLevelMeasure = new StreamLevelMeasure();\r\n this.selCaptureDeviceId = null;\r\n }\r\n\r\n get wakeLock(): boolean {\r\n return this._wakeLock;\r\n }\r\n\r\n set wakeLock(value: boolean) {\r\n this._wakeLock = value;\r\n }\r\n\r\n enableWakeLockCond(){\r\n if(this.wakeLock===true) {\r\n if(!this.noSleep){\r\n this.noSleep=new NoSleep();\r\n }\r\n if(!this.noSleep.isEnabled) {\r\n this.noSleep.enable();\r\n }\r\n }\r\n }\r\n\r\n disableWakeLockCond(){\r\n if(this.noSleep && this.noSleep.isEnabled){\r\n this.noSleep.disable();\r\n }\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 set channelCount(channelCount: number) {\r\n this._channelCount = channelCount;\r\n }\r\n\r\n set session(session: Session|null) {\r\n this._session = session;\r\n }\r\n\r\n get session():Session|null{\r\n return this._session;\r\n }\r\n\r\n enableStartUserGesture() {\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Ready.';\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 }\r\n\r\n closed() {\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Session closed.';\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, 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 {SprRecordingFile, RecordingFileDescriptorImpl, RecordingFile} 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 public static readonly RECORDING_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\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 recordingFilesUrl():string{\r\n let recFilesUrl = this.apiEndPoint + RecordingService.RECORDING_API_CTX;\r\n return recFilesUrl;\r\n }\r\n\r\n private sessionRecordingFilesUrl(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.RECORDING_API_CTX;\r\n return recFilesUrl;\r\n }\r\n\r\n private sessionRecFilesUrl(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 sessionRecFilesReqUrl(projectName: string, sessId: string | number):string{\r\n let recFilesUrl=this.sessionRecFilesUrl(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<RecordingFileDescriptorImpl>> {\r\n let recFilesReqUrl = this.sessionRecFilesReqUrl(projectName,sessId);\r\n let wobs = this.http.get<Array<RecordingFileDescriptorImpl>>(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.sessionRecFilesReqUrl(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 sprRecordingFileList(projectName: string, sessId: string | number):Observable<Array<SprRecordingFile>> {\r\n let recFilesReqUrl = this.sessionRecFilesReqUrl(projectName,sessId);\r\n let wobs = this.http.get<Array<SprRecordingFile>>(recFilesReqUrl,{withCredentials:this.withCredentials});\r\n return wobs;\r\n }\r\n\r\n private audioRequest(audioUrl:string): Observable<HttpResponse<ArrayBuffer>> {\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 audioUrl = audioUrl + '.wav?requestUUID=' + UUID.generate();\r\n }\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Accept', 'audio/wav');\r\n return this.http.get(audioUrl, {\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 private fetchAudiofile(projectName: string, sessId: string | number, recFileId: string|number): Observable<HttpResponse<ArrayBuffer>> {\r\n let recFilesUrl=this.sessionRecordingFilesUrl(projectName,sessId);\r\n let encRecFileId=encodeURIComponent(recFileId);\r\n let recUrl = recFilesUrl + '/' + encRecFileId;\r\n return this.audioRequest(recUrl);\r\n }\r\n\r\n private fetchSprAudiofile(projectName: string, sessId: string | number, itemcode: string,version:number): Observable<HttpResponse<ArrayBuffer>> {\r\n let recFilesUrl=this.sessionRecFilesUrl(projectName,sessId);\r\n let encItemcode=encodeURIComponent(itemcode);\r\n let recUrl = recFilesUrl + '/' + encItemcode +'/'+version;\r\n return this.audioRequest(recUrl);\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 && recordingFile.recordingFileId) {\r\n let obs = this.fetchAudiofile(projectName, recordingFile.session, recordingFile.recordingFileId);\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 fetchAndApplySprRecordingFile(aCtx: AudioContext, projectName: string, recordingFile:SprRecordingFile):Observable<SprRecordingFile|null> {\r\n\r\n let wobs = new Observable<SprRecordingFile|null>(observer=>{\r\n if(recordingFile.session) {\r\n let obs = this.fetchSprAudiofile(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<SprRecordingFile|null> {\r\n\r\n let wobs = new Observable<SprRecordingFile | null>(observer=>{\r\n let obs = this.fetchSprAudiofile(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 SprRecordingFile(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 {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 {SprRecordingFile, RecordingFileDescriptorImpl} 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 {Prompting} from \"./prompting\";\r\nimport {SequenceAudioFloat32ChunkerOutStream} from \"../../audio/io/stream\";\r\nimport {SessionFinishedDialog} from \"./session_finished_dialog\";\r\nimport {MessageDialog} from \"../../ui/message_dialog\";\r\nimport {RecordingService} from \"../recordings/recordings.service\";\r\nimport {AudioContextProvider} from \"../../audio/context\";\r\nimport {AudioClip} from \"../../audio/persistor\";\r\nimport {Item} from \"./item\";\r\nimport {LevelBar} from \"../../audio/ui/livelevel\";\r\nimport {BasicRecorder, LEVEL_BAR_INTERVALL_SECONDS, MAX_RECORDING_TIME_MS, RECFILE_API_CTX} from \"./basicrecorder\";\r\n\r\nconst DEFAULT_PRE_REC_DELAY=1000;\r\nconst DEFAULT_POST_REC_DELAY=500;\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@Component({\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 extends BasicRecorder 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 @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 startStopSignalState!: StartStopSignalState;\r\n\r\n private updateTimerId: any;\r\n private preRecTimerId: number|null=null;\r\n private preRecTimerRunning: boolean|null=null;\r\n private postDelay:number=DEFAULT_POST_REC_DELAY;\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 dnlLnk!: HTMLAnchorElement;\r\n\r\n audio: any;\r\n _script!: Script;\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: SprRecordingFile | null=null;\r\n private displayRecFileVersion!: number;\r\n\r\n promptItemCount!: number;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef,\r\n private renderer: Renderer2,\r\n public dialog: MatDialog,\r\n protected sessionService:SessionService,\r\n private recFileService:RecordingService,\r\n private uploader: SpeechRecorderUploader,\r\n @Inject(SPEECHRECORDER_CONFIG) public config?: SpeechRecorderConfig) {\r\n super(dialog,sessionService);\r\n this.status = Status.IDLE;\r\n this.audio = document.getElementById('audio');\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.disableWakeLockCond();\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 = 'Unknown error';\r\n if(err instanceof Error){\r\n errMsg=err.message;\r\n }\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 == ' ') {\r\n this.transportActions.stopAction.perform();\r\n }\r\n if (ke.key == 'p') {\r\n this.transportActions.pauseAction.perform();\r\n }\r\n\r\n if (ke.key == 'Escape') {\r\n if(!this.audioSignalCollapsed){\r\n this.audioSignalCollapsed=true;\r\n }\r\n this.transportActions.stopAction.perform();\r\n this.transportActions.pauseAction.perform();\r\n }\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 script(script: any) {\r\n this._script = script;\r\n this.loadScript();\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.enableWakeLockCond();\r\n\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,(!pi.type || pi.type==='recording'));\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: SprRecordingFile | 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.fetchAndApplySprRecordingFile(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(): SprRecordingFile | 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<SprRecordingFile>();\r\n }\r\n\r\n let recentRecFile: SprRecordingFile | 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 super.start();\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 super.enableStartUserGesture();\r\n this.transportActions.startAction.disabled=!(this.ac && this.isRecordingItem());\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 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' || this.section.promptphase === 'PRERECORDINGONLY') {\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.prerecdelay!=null) {\r\n preDelay = this.promptItem.prerecdelay;\r\n }else if (this.promptItem.prerecording!=null) {\r\n preDelay = this.promptItem.prerecording;\r\n }\r\n\r\n this.postDelay=DEFAULT_POST_REC_DELAY;\r\n if(this.promptItem.postrecdelay!=null){\r\n this.postDelay=this.promptItem.postrecdelay;\r\n }else if(this.promptItem.postrecording!=null){\r\n this.postDelay=this.promptItem.postrecording;\r\n }\r\n\r\n let maxRecordingTimeMs = MAX_RECORDING_TIME_MS;\r\n if (this.promptItem.recduration!==null && this.promptItem.recduration!==undefined) {\r\n maxRecordingTimeMs = preDelay+this.promptItem.recduration+this.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 if (this.section.promptphase === 'PRERECORDINGONLY'){\r\n this.clearPrompt();\r\n }\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\r\n this.postRecTimerId = window.setTimeout(() => {\r\n this.postRecTimerRunning = false;\r\n this.status = Status.STOPPING_STOP;\r\n this.stopRecording();\r\n }, this.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\r\n this.postRecTimerId = window.setTimeout(() => {\r\n this.postRecTimerRunning = false;\r\n this.status = Status.STOPPING_PAUSE;\r\n this.stopRecording();\r\n }, this.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:RecordingFileDescriptorImpl){\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<SprRecordingFile>();\r\n }\r\n let rf = new SprRecordingFile(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:SprRecordingFile){\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:AudioBuffer|null = 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<SprRecordingFile>();\r\n }\r\n rf = new SprRecordingFile(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.recording && !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\r\n","import {SpeechRecorderUploader} from \"./speechrecorder/spruploader\";\r\nimport {UploaderStatus, UploaderStatusChangeEvent} from \"./net/uploader\";\r\n\r\n\r\nexport interface ReadyStateProvider {\r\n ready():boolean;\r\n}\r\n\r\n\r\nexport abstract class RecorderComponent implements ReadyStateProvider{\r\n\r\n dataSaved: boolean = true;\r\n\r\n constructor(protected uploader:SpeechRecorderUploader) {\r\n }\r\n\r\n abstract ready():boolean;\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 {RecordingFileDescriptorImpl} from \"./speechrecorder/recording\";\r\nimport {Arrays} from \"./utils/utils\";\r\nimport {AudioRecorderComponent} from \"./speechrecorder/session/audiorecorder\";\r\nimport {RecorderComponent} from \"./recorder_component\";\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 extends RecorderComponent 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\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 protected uploader:SpeechRecorderUploader) {\r\n super(uploader);\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 let errMsg='Unknown error';\r\n if(err instanceof Error){\r\n errMsg=err.message;\r\n }\r\n this.sm.statusMsg=errMsg;\r\n this.sm.statusAlertType='error';\r\n console.error(errMsg)\r\n }\r\n }\r\n ngAfterViewInit(){\r\n // let wakeLockSupp=('wakeLock' in navigator);\r\n // alert('Wake lock API supported: '+wakeLockSupp);\r\n\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 let sessObs= this.sessionsService.sessionObserver(sessionId);\r\n\r\n if(sessObs) {\r\n sessObs.subscribe({\r\n next: 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({\r\n next: (project) => {\r\n this.project = project;\r\n this.fetchScript(sess);\r\n }, error: (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 );\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 error:(reason) =>\r\n {\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({\r\n next: (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 }, error: (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 });\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 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({\r\n next: (rfs: Array<RecordingFileDescriptorImpl>) => {\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 }, error: (err) => {\r\n // we start the session anyway\r\n this.startSession()\r\n }, complete: () => {\r\n this.startSession()\r\n }\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 //TODO Duplicate code in AudioRecorderComponent\r\n this.uploader.listener = (ue) => {\r\n this.uploadUpdate(ue);\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 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 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 if(project.recordingDeviceWakeLock===true){\r\n this.sm.wakeLock=true;\r\n }\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 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 start(){\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","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 if(err instanceof Error) {\r\n this.status = err.message;\r\n }\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 {PromptitemUtil} from \"../../script/script\";\r\nimport {RecordingFile, SprRecordingFile} 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:SprRecordingFile) {\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, SprRecordingFile} 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 private sprRecordingFileDescrObserver(recordingFileId: string | number): Observable<SprRecordingFile> {\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<SprRecordingFile>(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:SprRecordingFile):Observable<SprRecordingFile|null> {\r\n\r\n let wobs = new Observable<SprRecordingFile|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 fetchSprRecordingFile(aCtx: AudioContext, recordingFileId: string | number): Observable<SprRecordingFile | null> {\r\n\r\n let wobs = new Observable<SprRecordingFile | null>(observer => {\r\n let rf: SprRecordingFile|null = null;\r\n let rfDescrObs = this.sprRecordingFileDescrObserver(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|null,editStartFrame:number|null,editEndFrame:number|null): Observable<SprRecordingFile | 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<SprRecordingFile>(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, SprRecordingFile} 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 *ngIf=\"itemCode\">\r\n <td>Itemcode:</td>\r\n <td>{{itemCode}}</td>\r\n </tr>\r\n <tr *ngIf=\"uuid && !itemCode\">\r\n <td>UUID:</td>\r\n <td>{{uuid}}</td>\r\n </tr>\r\n <tr *ngIf=\"recordingFile?.startedDate\">\r\n <td>Started:</td>\r\n <td>{{recordingFile?.startedDate}}</td>\r\n </tr>\r\n <tr *ngIf=\"!recordingFile?.startedDate && recordingFile?.date\">\r\n <td>Date:</td>\r\n <td>{{recordingFile?.date}}</td>\r\n </tr>\r\n <tr *ngIf=\"itemCode\">\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\r\n @Input() sessionId:string | number | null=null;\r\n\r\n private _recordingFile:SprRecordingFile|null=null;\r\n\r\n get recordingFile(): SprRecordingFile | null {\r\n return this._recordingFile;\r\n }\r\n\r\n @Input() set recordingFile(recordingFile:SprRecordingFile|null){\r\n this._recordingFile=recordingFile;\r\n if(this._recordingFile) {\r\n this.itemCode = this._recordingFile.itemCode;\r\n if(!this.itemCode && this._recordingFile.recording?.itemcode){\r\n this.itemCode=this._recordingFile.recording.itemcode;\r\n }\r\n if (this.itemCode) {\r\n\r\n this.uuid = null;\r\n console.debug(\"SprRecordingFile: \"+this.itemCode+ \" UUID: \"+this.uuid)\r\n } else {\r\n this.itemCode = null;\r\n this.uuid = this._recordingFile?.uuid;\r\n console.debug(\"RecordingFile: \"+this.itemCode+ \" UUID: \"+this.uuid)\r\n }\r\n }else{\r\n this.itemCode=null;\r\n this.uuid=null;\r\n }\r\n }\r\n\r\n itemCode:string|null=null;\r\n uuid:string|null|undefined=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, SprRecordingFile} from \"../../recording\";\r\nimport {RecordingFileUtil} from \"./recording-file\";\r\n\r\n\r\nexport class ItemcodeIndex{\r\n [itemcode: string]: Array<SprRecordingFile>;\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]=\"recordingFileVersion\" [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<SprRecordingFile>>;\r\n versions: Array<number>|null=null;\r\n\r\n recordingFile: SprRecordingFile|null=null;\r\n recordingFileVersion:number|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 !=null) {\r\n if (cRf.version === version) {\r\n toRfId = cRf.recordingFileId;\r\n break;\r\n }\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.itemCode;\r\n if(!cic && this.recordingFile.recording && this.recordingFile.recording.itemcode){\r\n cic=this.recordingFile.recording.itemcode;\r\n }\r\n if (cic) {\r\n let itemCnt = this.availRecFiles.length\r\n for (let rfdi = 0; rfdi < itemCnt; rfdi++) {\r\n let arRf = this.availRecFiles[rfdi][0];\r\n if (arRf.recording) {\r\n let ar = arRf.recording;\r\n if (cic === ar.itemcode) {\r\n return rfdi;\r\n }\r\n }\r\n }\r\n }else{\r\n let itemCnt = this.availRecFiles.length\r\n for (let rfdi = 0; rfdi < itemCnt; rfdi++) {\r\n let arRf = this.availRecFiles[rfdi][0];\r\n if (this.recordingFile.uuid === arRf.uuid) {\r\n return rfdi;\r\n }\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 if(arf.recording?.itemcode) {\r\n this.versions.push(arf.version)\r\n }\r\n }\r\n\r\n this.toVersionAction.disabled=(this.versions.length<2);\r\n }\r\n }\r\n }\r\n\r\n if(this.recordingFile){\r\n if(this.recordingFile.version){\r\n this.recordingFileVersion=this.recordingFile.version;\r\n }else{\r\n this.recordingFileVersion=0;\r\n }\r\n }else{\r\n this.recordingFileVersion=null;\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.fetchSprRecordingFile(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\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.sprRecordingFileList(s.project, s.sessionId).subscribe((rfds) => {\r\n this.availRecFiles = new Array<Array<SprRecordingFile>>();\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 ic = rfd.itemCode;\r\n\r\n if (!ic) {\r\n let r = rfd.recording;\r\n if (r && r.itemcode) {\r\n ic = r.itemcode;\r\n }\r\n }\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<SprRecordingFile>();\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 } else {\r\n let arfd = new Array<SprRecordingFile>();\r\n arfd.push(rfd);\r\n this.availRecFiles.push(arfd);\r\n }\r\n }\r\n // have unsorted itemcode 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 for(let avRf of this.availRecFiles){\r\n if(avRf[0] && avRf[0].recording) {\r\n let os = avRf[0].recording.itemcode + ': versions: ';\r\n for (let avRfV of avRf) {\r\n os += avRfV.version + '/';\r\n }\r\n console.debug(os);\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]=\"recordingFileVersion\" [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 (ab && this.recordingFile?.recordingFileId) {\r\n\r\n let sr= null;\r\n let sf=null;\r\n let ef=null;\r\n if(s) {\r\n sr= ab.sampleRate;\r\n sf = s.startFrame;\r\n ef = s.endFrame;\r\n }\r\n this.recordingFileService.saveEditSelection(this.recordingFile.recordingFileId, sr, sf, ef).subscribe((value) => {\r\n },\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","\r\n export class MediaUtils {\r\n\r\n static toMediaTime(timeInSeconds:number):string{\r\n let rest=timeInSeconds;\r\n let hours=Math.floor(timeInSeconds/3600);\r\n rest-=hours*3600;\r\n let minutes=Math.floor(rest/60);\r\n rest-=minutes*60;\r\n let seconds=Math.floor(rest);\r\n rest-=seconds;\r\n let millis=Math.round(rest*1000);\r\n return hours.toString().padStart(2,'0')+':'+minutes.toString().padStart(2,'0')+':'+seconds.toString().padStart(2,'0')+'.'+millis.toString().padStart(3,'0');\r\n }\r\n }\r\n","import {AfterViewInit, Component, EventEmitter, Input, Output} from \"@angular/core\";\r\nimport {RecordingFile, SprRecordingFile} from \"../recording\";\r\nimport {MediaUtils} from \"../../media/utils\";\r\nimport {MatTable, MatTableDataSource} from \"@angular/material/table\";\r\nimport {Observable, Subject} from \"rxjs\";\r\n\r\n@Component({\r\n\r\n selector: 'app-recordinglist',\r\n\r\n template: `\r\n <mat-card>\r\n <mat-card-header>\r\n <h2>Recording list</h2>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <table mat-table [dataSource]=\"recordingListDataSource\" class=\"mat-elevation-z0\">\r\n <tr mat-header-row *matHeaderRowDef=\"cols;sticky:true\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: cols;\" [scrollIntoViewToBottom]=\"element.uuid===selectedRecordingFile?.uuid\"></tr>\r\n <ng-container matColumnDef=\"index\">\r\n <th mat-header-cell *matHeaderCellDef mat-header>#</th>\r\n <td mat-cell class=\"monospaced\" *matCellDef=\"let element;let i = index\">{{recordingListDataSource.data.length-i}}</td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"startedDate\">\r\n <th mat-header-cell *matHeaderCellDef mat-header>Started</th>\r\n <td mat-cell class=\"monospaced\" *matCellDef=\"let element\">{{element.startedDate | date:'YYYY-MM-dd HH:mm:ss'}}</td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"length\">\r\n <th mat-header-cell *matHeaderCellDef mat-header>Length</th>\r\n <td mat-cell class=\"monospaced\" *matCellDef=\"let element\">{{lengthTimeFormatted(element)}}</td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>Action</th>\r\n <td mat-cell *matCellDef=\"let element\"><button mat-stroked-button color=\"primary\" (click)=\"selectRecordingFile(element)\" [disabled]=\"selectDisabled || element.uuid===selectedRecordingFile?.uuid\"><mat-icon>edit_attributes</mat-icon> Select</button></td>\r\n </ng-container>\r\n </table>\r\n </mat-card-content>\r\n </mat-card>\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 overflow-y: auto;\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 }`,`\r\n .selected{\r\n font-weight: bold;\r\n }\r\n `],\r\n styleUrls: ['../../speechrecorder_mat.scss']\r\n\r\n})\r\nexport class RecordingList implements AfterViewInit{\r\n private recordingList:Array<RecordingFile>=new Array<RecordingFile>();\r\n //recordingListSubject:Subject<Array<RecordingFile>> = new Subject<Array<RecordingFile>>();\r\n recordingListDataSource:MatTableDataSource<RecordingFile>;\r\n //cols=['index','length','samples','samplerate','action'];\r\n cols=['index','startedDate','length','action'];\r\n @Input() selectDisabled:boolean=false;\r\n @Output() selectedRecordingFileChanged = new EventEmitter<RecordingFile>();\r\n @Input() selectedRecordingFile:RecordingFile|null=null;\r\n\r\n constructor() {\r\n this.recordingListDataSource=new MatTableDataSource<RecordingFile>();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.buildDataSource();\r\n }\r\n\r\n private buildDataSource(){\r\n this.recordingList.sort((a, b) => {\r\n let cmp:number=0;\r\n let aD:Date|null=null;\r\n let bD:Date|null=null;\r\n if(a._startedAsDateObj && b._startedAsDateObj){\r\n aD=a._startedAsDateObj\r\n bD=b._startedAsDateObj\r\n }else if(a.startedDate && b.startedDate){\r\n aD=new Date(a.startedDate);\r\n bD=new Date(b.startedDate);\r\n }else if(a.date && b.date) {\r\n aD=new Date(a.date);\r\n bD=new Date(b.date);\r\n }\r\n if(aD!==null && bD!==null){\r\n cmp=bD.getTime()-aD.getTime();\r\n }\r\n return cmp;\r\n });\r\n this.recordingListDataSource.data=this.recordingList;\r\n }\r\n\r\n push(rf:RecordingFile){\r\n this.recordingList.push(rf);\r\n this.buildDataSource();\r\n }\r\n\r\n selectRecordingFile(rf:RecordingFile){\r\n this.selectedRecordingFileChanged.emit(rf);\r\n }\r\n\r\n selectTop() {\r\n if (this.recordingList.length > 0) {\r\n this.selectRecordingFile(this.recordingList[0]);\r\n }\r\n }\r\n\r\n lengthTimeFormatted(rf:RecordingFile){\r\n let str='--:--:--';\r\n if(rf.frames && rf.audioBuffer) {\r\n str=MediaUtils.toMediaTime(rf.frames / rf.audioBuffer?.sampleRate);\r\n }\r\n return str;\r\n }\r\n}\r\n","import {AfterViewInit, Component, EventEmitter, Input, Output, ViewChild} from \"@angular/core\";\r\nimport {RecordingFile, SprRecordingFile} from \"../recording\";\r\nimport {MediaUtils} from \"../../media/utils\";\r\nimport {MatTable, MatTableDataSource} from \"@angular/material/table\";\r\nimport {Observable, Subject} from \"rxjs\";\r\nimport {RecordingList} from \"./recording_list\";\r\nimport {AudioClip} from \"../../audio/persistor\";\r\nimport {Action} from \"../../action/action\";\r\nimport {AudioDisplay} from \"../../audio/audio_display\";\r\n\r\n@Component({\r\n\r\n selector: 'app-recordercombipane',\r\n\r\n template: `\r\n <div class=\"scrollList\">\r\n <app-recordinglist [selectedRecordingFile]=\"selectedRecordingFile\" [selectDisabled]=\"selectDisabled\" (selectedRecordingFileChanged)=\"selectRecordingFile($event)\"></app-recordinglist>\r\n </div>\r\n <div class=\"collapsable\" fxHide.xs #asCt [class.active]=\"!audioSignalCollapsed\">\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 </div>\r\n `,\r\n styles: [`:host {\r\n background-color: yellow;\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 /* 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 }`,`.scrollList{\r\n margin: 0;\r\n padding: 0;\r\n background: lightgrey;\r\n width: 100%; \r\n height: 100%;\r\n overflow-y: auto;\r\n }`, `\r\n .collapsable {\r\n display: none;\r\n position: absolute;\r\n z-index: 5;\r\n }`, `\r\n .collapsable.active {\r\n display: flex;\r\n position: absolute;\r\n bottom: 0px;\r\n height: 90%;\r\n width: 100%;\r\n overflow: hidden;\r\n padding: 0px;\r\n z-index: 200; /* Needs a higher value then the sticky Material table header (which is z-index: 100) */\r\n box-sizing: border-box;\r\n background-color: rgba(0, 0, 0, 0)\r\n }`],\r\n styleUrls: ['../../speechrecorder_mat.scss']\r\n\r\n})\r\nexport class RecorderCombiPane implements AfterViewInit{\r\n\r\n @ViewChild(RecordingList) recordingListComp!:RecordingList;\r\n @Input() selectDisabled:boolean=false;\r\n @Output() selectedRecordingFileChanged = new EventEmitter<RecordingFile>();\r\n @Input() selectedRecordingFile:RecordingFile|null=null;\r\n\r\n @ViewChild(AudioDisplay, { static: true }) audioDisplay!: AudioDisplay;\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\r\n constructor() {\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n }\r\n\r\n push(rf:RecordingFile){\r\n this.recordingListComp.push(rf);\r\n\r\n }\r\n\r\n selectRecordingFile(rf:RecordingFile){\r\n this.selectedRecordingFileChanged.emit(rf);\r\n }\r\n\r\n selectTop() {\r\n this.recordingListComp.selectTop();\r\n }\r\n\r\n}\r\n","import {AudioCapture, AudioCaptureListener} from '../../audio/capture/capture';\r\nimport {AudioPlayer, AudioPlayerEvent, EventType} from '../../audio/playback/player'\r\nimport {WavWriter} from '../../audio/impl/wavwriter'\r\nimport {RecordingFile, RecordingFileDescriptorImpl, SprRecordingFile} from '../recording'\r\nimport {\r\n Component, ViewChild, ChangeDetectorRef, Inject,\r\n AfterViewInit, HostListener, OnDestroy, Input, Renderer2, OnInit, Injector\r\n} from \"@angular/core\";\r\nimport {SessionService} from \"./session.service\";\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 { Project, ProjectUtil} from \"../project/project\";\r\nimport {SequenceAudioFloat32ChunkerOutStream} from \"../../audio/io/stream\";\r\nimport {MessageDialog} from \"../../ui/message_dialog\";\r\nimport {RecordingService} from \"../recordings/recordings.service\";\r\n\r\nimport {AudioContextProvider} from \"../../audio/context\";\r\nimport {AudioClip} from \"../../audio/persistor\";\r\n\r\nimport {Upload, UploaderStatus, UploaderStatusChangeEvent} from \"../../net/uploader\";\r\nimport {ActivatedRoute, Params, Router} from \"@angular/router\";\r\nimport {ProjectService} from \"../project/project.service\";\r\nimport {UUID} from \"../../utils/utils\";\r\nimport {LevelBar} from \"../../audio/ui/livelevel\";\r\nimport {RecorderCombiPane} from \"./recorder_combi_pane\";\r\nimport {BasicRecorder, LEVEL_BAR_INTERVALL_SECONDS, MAX_RECORDING_TIME_MS, RECFILE_API_CTX} from \"./basicrecorder\";\r\nimport {ReadyStateProvider, RecorderComponent} from \"../../recorder_component\";\r\nimport {Mode} from \"../../speechrecorderng.component\";\r\nimport NoSleep from \"nosleep.js\";\r\n\r\n\r\n\r\n\r\n\r\nexport const enum Status {\r\n BLOCKED, IDLE, RECORDING, STOPPING_STOP, ERROR\r\n}\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@Component({\r\n selector: 'app-audiorecorder',\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()\"\r\n warningText=\"This test uses default audio device! Regular sessions may require a particular audio device (microphone)!\"></app-warningbar>\r\n <app-recordercombipane (selectedRecordingFileChanged)=\"selectRecordingFile($event)\"\r\n [audioSignalCollapsed]=\"audioSignalCollapsed\"\r\n [selectedRecordingFile]=\"displayRecFile\"\r\n [selectDisabled]=\"isActive()\"\r\n [displayAudioClip]=\"displayAudioClip\"\r\n [playStartAction]=\"controlAudioPlayer.startAction\"\r\n [playStopAction]=\"controlAudioPlayer.stopAction\"\r\n [playSelectionAction]=\"controlAudioPlayer.startSelectionAction\"\r\n [autoPlayOnSelectToggleAction]=\"controlAudioPlayer.autoPlayOnSelectToggleAction\"\r\n ></app-recordercombipane>\r\n\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" [ngStyle]=\"{'height.px':100,'min-height.px': 100}\"\r\n [ngStyle.xs]=\"{'height.px':125,'min-height.px': 125}\">\r\n <audio-levelbar fxFlex=\"1 0 1\" [streamingMode]=\"isRecording()\"\r\n [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\"\r\n [value]=\"uploadProgress\"\r\n [status]=\"uploadStatus\" [awaitNewUpload]=\"processingRecording\"></app-uploadstatus>\r\n <app-readystateindicator class=\"ricontrols dark\" fxHide fxShow.xs fxFlex=\"0 0 0\"\r\n [ready]=\"dataSaved && !isActive()\"></app-readystateindicator>\r\n </div>\r\n </div>\r\n <div #controlpanel class=\"controlpanel\" fxLayout=\"row\">\r\n <app-sprstatusdisplay fxHide.xs fxFlex=\"30% 1 30%\" [statusMsg]=\"statusMsg\" [statusAlertType]=\"statusAlertType\"\r\n [statusWaiting]=\"statusWaiting\"\r\n class=\"hidden-xs\"></app-sprstatusdisplay>\r\n <div fxFlex=\"100% 0 100%\" class=\"startstop\">\r\n <div style=\"align-content: center\">\r\n <button (click)=\"startStopPerform()\" [disabled]=\"startDisabled() && stopDisabled()\" mat-raised-button class=\"bigbutton\">\r\n <mat-icon [style.color]=\"startStopNextIconColor()\" inline=\"true\">{{startStopNextIconName()}}</mat-icon>\r\n <span style=\"font-weight: bolder;font-size: 14px\">{{startStopNextName()}}</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div fxFlex=\"30% 1 30%\" >\r\n <div fxFlex=\"1 1 auto\"></div>\r\n <app-uploadstatus class=\"ricontrols\" fxHide.xs fxFlex=\"0 0 0\" *ngIf=\"enableUploadRecordings\"\r\n [value]=\"uploadProgress\"\r\n [status]=\"uploadStatus\" [awaitNewUpload]=\"processingRecording\"></app-uploadstatus>\r\n <app-readystateindicator class=\"ricontrols\" fxHide.xs\r\n [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 height: 100%;\r\n min-height: 0px;\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 }`,`.startstop {\r\n width: 100%;\r\n text-align: center;\r\n align-content: center;\r\n align-items: center;\r\n }`,`.bigbutton {\r\n min-width: 70px;\r\n min-height: 50px;\r\n font-size: 50px;\r\n border-radius: 20px;\r\n }`\r\n ]\r\n})\r\nexport class AudioRecorder extends BasicRecorder implements OnInit,AfterViewInit,OnDestroy, AudioCaptureListener,ReadyStateProvider {\r\n\r\n @Input() _project:Project|undefined| null=null;\r\n @Input() projectName:string|undefined|null=null;\r\n enableUploadRecordings: boolean = true;\r\n enableDownloadRecordings: boolean = false;\r\n status: Status = Status.BLOCKED;\r\n\r\n @ViewChild(RecorderCombiPane, { static: true }) recorderCombiPane!: RecorderCombiPane;\r\n @ViewChild(LevelBar, { static: true }) liveLevelDisplay!: LevelBar;\r\n\r\n @Input() dataSaved=true\r\n\r\n private startedDate:Date|null=null;\r\n private maxRecTimerId: number|null=null;\r\n private maxRecTimerRunning: boolean=false;\r\n private updateTimerId: any;\r\n\r\n startStopNextButtonName!:string;\r\n startStopNextButtonIconName!:string;\r\n\r\n audio: any;\r\n\r\n private _promptIndex:number|null=null;\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=0;\r\n\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef,\r\n private renderer: Renderer2,\r\n private route: ActivatedRoute,\r\n public dialog: MatDialog,\r\n private projectService:ProjectService,\r\n protected sessionService:SessionService,\r\n private recFileService:RecordingService,\r\n private uploader: SpeechRecorderUploader,\r\n @Inject(SPEECHRECORDER_CONFIG) public config?: SpeechRecorderConfig) {\r\n super(dialog,sessionService);\r\n\r\n //super(injector);\r\n this.status = Status.IDLE;\r\n\r\n this.audio = document.getElementById('audio');\r\n\r\n if (this.config && this.config.enableUploadRecordings != null) {\r\n this.enableUploadRecordings = this.config.enableUploadRecordings;\r\n }\r\n if (this.config && this.config.enableDownloadRecordings != null) {\r\n this.enableDownloadRecordings = this.config.enableDownloadRecordings;\r\n }\r\n //this.init();\r\n }\r\n\r\n\r\n ngAfterViewInit() {\r\n\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 //let wakeLockSupp=('wakeLock' in navigator);\r\n //alert('Wake lock API supported: '+wakeLockSupp);\r\n }\r\n\r\n ready():boolean{\r\n return this.dataSaved && !this.isActive()\r\n }\r\n ngOnDestroy() {\r\n this.disableWakeLockCond();\r\n this.destroyed=true;\r\n // TODO stop capture /playback\r\n }\r\n\r\n ngOnInit() {\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\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 = 'Unknown error';\r\n if(err instanceof Error){\r\n errMsg=err.message;\r\n }\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.controlAudioPlayer = new AudioPlayer(context, this);\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\r\n this.playStartAction.onAction = () => this.controlAudioPlayer.start();\r\n\r\n }\r\n this.uploader.listener = (ue) => {\r\n this.uploadUpdate(ue);\r\n }\r\n\r\n let wakeLockSupp=('wakeLock' in navigator);\r\n\r\n // if(wakeLockSupp) {\r\n // let wakeLock = null;\r\n // try {\r\n // //@ts-ignore\r\n // wakeLock = navigator.wakeLock.request('screen');\r\n //\r\n // //statusElem.textContent = 'Wake Lock is active!';\r\n // } catch (err) {\r\n // // The Wake Lock request has failed - usually system related, such as battery.\r\n // console.error('Wakelock failed'+err)\r\n // }\r\n // }else{\r\n // let noSleep=new NoSleep();\r\n // noSleep.enable();\r\n //\r\n // }\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 == ' ') {\r\n if(!this.transportActions.startAction.disabled){\r\n this.transportActions.startAction.perform();\r\n }else if(!this.transportActions.stopAction.disabled) {\r\n this.transportActions.stopAction.perform();\r\n }\r\n }\r\n if (ke.key == 'p') {\r\n this.transportActions.pauseAction.perform();\r\n }\r\n if (ke.key == 'Escape') {\r\n if (!this.audioSignalCollapsed) {\r\n this.audioSignalCollapsed = true;\r\n }\r\n this.transportActions.stopAction.perform();\r\n this.transportActions.pauseAction.perform();\r\n }\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 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 fetchRecordings(sess:Session){\r\n this.statusAlertType='info';\r\n this.statusMsg = 'Fetching infos of recordings...';\r\n this.statusWaiting=true;\r\n let prNm:string|null=null;\r\n if(this.project) {\r\n let rfsObs = this.recFileService.recordingFileList(this.project.name, sess.sessionId);\r\n rfsObs.subscribe({next:(rfs: Array<RecordingFile>) => {\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Received infos of recordings.';\r\n this.statusWaiting = false;\r\n if (rfs) {\r\n if (rfs instanceof Array) {\r\n rfs.forEach((rf) => {\r\n if(rf.startedDate){\r\n rf._startedAsDateObj=new Date(rf.startedDate);\r\n }\r\n if(rf.date){\r\n rf._dateAsDateObj=new Date(rf.date);\r\n }\r\n this.recorderCombiPane.push(rf);\r\n })\r\n } else {\r\n console.error('Expected type array for list of already recorded files ')\r\n }\r\n\r\n } else {\r\n //console.debug(\"Recording file list: \" + rfs);\r\n }\r\n }, error:(err) => {\r\n // Failed fetching existing, but we start the session anyway\r\n this.start()\r\n }, complete:() => {\r\n // Normal start\r\n this.start()\r\n }\r\n })\r\n }else{\r\n // No project def -> error\r\n this.statusAlertType = 'error';\r\n this.statusMsg = 'No project definiton.';\r\n this.statusWaiting = false;\r\n console.error(this.statusMsg);\r\n }\r\n }\r\n\r\n\r\n set project(project: Project|undefined|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 if(project.recordingDeviceWakeLock===true){\r\n this.wakeLock=true;\r\n }\r\n this.audioDevices = project.audioDevices;\r\n chCnt = ProjectUtil.audioChannelCount(project);\r\n console.info(\"Project requested recording channel count: \" + chCnt);\r\n this.autoGainControlConfigs=project.autoGainControlConfigs;\r\n } else {\r\n console.error(\"Empty project configuration!\")\r\n }\r\n this.channelCount = chCnt;\r\n }\r\n\r\n get project():Project|undefined|null{\r\n return this._project;\r\n }\r\n\r\n selectRecordingFile(rf:RecordingFile){\r\n this.displayRecFile=rf;\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.uploadStatus = 'warn'\r\n } else {\r\n if (percentUpl < 50) {\r\n this.uploadStatus = 'accent'\r\n } else {\r\n this.uploadStatus = 'success'\r\n }\r\n this.uploadProgress = percentUpl;\r\n }\r\n\r\n this.changeDetectorRef.detectChanges()\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 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 startDisabled() {\r\n return !this.transportActions || this.readonly || this.transportActions.startAction.disabled\r\n }\r\n\r\n stopDisabled() {\r\n return !this.transportActions || this.transportActions.stopAction.disabled\r\n }\r\n\r\n startStopNextName():string{\r\n 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 }\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()){\r\n return \"yellow\"\r\n }else{\r\n return \"grey\";\r\n }\r\n }\r\n\r\n startStopPerform(){\r\n if(!this.startDisabled()){\r\n this.transportActions.startAction.perform();\r\n }else if(!this.stopDisabled()){\r\n this.transportActions.stopAction.perform();\r\n }\r\n }\r\n\r\n startItem() {\r\n this.enableWakeLockCond();\r\n\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\r\n if (this.ac) {\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 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\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 this.showRecording();\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 updateStartActionDisableState(){\r\n this.transportActions.startAction.disabled=!(this.ac);\r\n }\r\n\r\n start() {\r\n super.start();\r\n this.recorderCombiPane.selectTop();\r\n this.enableNavigation();\r\n this.updateStartActionDisableState();\r\n\r\n }\r\n\r\n isRecording(): boolean {\r\n return (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 private updateNavigationActions(){\r\n\r\n this.transportActions.fwdAction.disabled = this.navigationDisabled;\r\n this.transportActions.bwdAction.disabled = this.navigationDisabled;\r\n }\r\n\r\n enableStartUserGesture() {\r\n super.enableStartUserGesture();\r\n this.transportActions.startAction.disabled=!(this.ac);\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 if(this.ac) {\r\n this.ac.start();\r\n }\r\n }\r\n\r\n started() {\r\n this.startedDate=new Date();\r\n this.transportActions.startAction.disabled = true;\r\n\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Recording...';\r\n\r\n let maxRecordingTimeMs = MAX_RECORDING_TIME_MS;\r\n this.maxRecTimerId = window.setTimeout(() => {\r\n this.stopRecordingMaxRec()\r\n }, maxRecordingTimeMs);\r\n this.maxRecTimerRunning = true;\r\n\r\n this.status = Status.RECORDING;\r\n this.transportActions.stopAction.disabled = false;\r\n }\r\n\r\n stopItem() {\r\n\r\n this.transportActions.stopAction.disabled = true;\r\n this.transportActions.nextAction.disabled = true;\r\n this.status = Status.STOPPING_STOP;\r\n this.stopRecording();\r\n\r\n }\r\n\r\n stopRecording() {\r\n if (this.maxRecTimerRunning && this.maxRecTimerId!=null) {\r\n window.clearTimeout(this.maxRecTimerId);\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\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 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\r\n let ad:AudioBuffer;\r\n if(this.ac) {\r\n ad = this.ac.audioBuffer();\r\n let sessId: string | number = 0;\r\n if(this._session){\r\n sessId=this._session.sessionId;\r\n }\r\n let rf = new RecordingFile(UUID.generate(),sessId,ad);\r\n rf._startedAsDateObj=this.startedDate;\r\n if(rf._startedAsDateObj) {\r\n rf.startedDate = rf._startedAsDateObj.toString();\r\n }\r\n let apiEndPoint = '';\r\n\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\r\n let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;\r\n let recUrl: string = sessionsUrl + '/' + rf.session + '/' + RECFILE_API_CTX + '/' + rf.uuid;\r\n //\r\n //\r\n //\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 let ww = new WavWriter();\r\n ww.writeAsync(ad, (wavFile) => {\r\n rf.frames=ad.length;\r\n this.displayRecFile=rf;\r\n this.recorderCombiPane.push(rf);\r\n this.postRecordingMultipart(wavFile, rf.uuid,rf.session,rf._startedAsDateObj,recUrl);\r\n this.processingRecording=false;\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n // }\r\n }\r\n\r\n // check complete session\r\n let complete = true;\r\n\r\n let autoStart = (this.status === Status.STOPPING_STOP);\r\n this.status = Status.IDLE;\r\n let startNext=false;\r\n\r\n this.navigationDisabled = false;\r\n this.updateNavigationActions();\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 postRecordingMultipart(wavFile: Uint8Array, uuid:string|null,sessionId:string|number|null,startedDate:Date|null|undefined,recUrl: string) {\r\n let wavBlob = new Blob([wavFile], {type: 'audio/wav'});\r\n\r\n let fd=new FormData();\r\n if(uuid) {\r\n fd.set('uuid', uuid);\r\n }\r\n if(sessionId!==null) {\r\n fd.set('sessionId', sessionId.toString());\r\n }\r\n if(startedDate){\r\n fd.set('startedDate',startedDate.toJSON());\r\n }\r\n fd.set('audio',wavBlob);\r\n let ul = new Upload(fd, recUrl);\r\n this.uploader.queueUpload(ul);\r\n }\r\n\r\n stop() {\r\n if(this.ac) {\r\n this.ac.close();\r\n }\r\n }\r\n\r\n private updateControlPlaybackPosition() {\r\n if (this._controlAudioPlayer.playPositionFrames) {\r\n this.recorderCombiPane.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 if(!this.destroyed) {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'app-audiorecorder-comp',\r\n providers: [SessionService],\r\n template: `\r\n <app-audiorecorder [projectName]=\"_project?.name\" [dataSaved]=\"dataSaved\"></app-audiorecorder>\r\n `,\r\n styles: [`:host{\r\n flex: 2;\r\n display: flex;\r\n height: 100%;\r\n flex-direction: column;\r\n min-height:0;\r\n\r\n }`]\r\n\r\n})\r\nexport class AudioRecorderComponent extends RecorderComponent implements OnInit,OnDestroy,AfterViewInit,ReadyStateProvider {\r\n\r\n mode!:Mode;\r\n controlAudioPlayer!:AudioPlayer;\r\n audio:any;\r\n\r\n _project:Project|undefined;\r\n sessionId!: string;\r\n session!:Session;\r\n\r\n @ViewChild(AudioRecorder, { static: true }) ar!:AudioRecorder;\r\n\r\n constructor(protected injector:Injector,private route: ActivatedRoute,\r\n private router: Router,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n private sessionService:SessionService,\r\n private projectService:ProjectService,\r\n private recFilesService:RecordingService,\r\n protected uploader:SpeechRecorderUploader\r\n ) {\r\n super(uploader);\r\n }\r\n\r\n ngOnInit() {\r\n //super.ngOnInit();\r\n let audioContext = AudioContextProvider.audioContextInstance();\r\n if(audioContext) {\r\n this.controlAudioPlayer = new AudioPlayer(audioContext,this.ar);\r\n }\r\n this.ar.controlAudioPlayer=this.controlAudioPlayer;\r\n\r\n //TODO Duplicate code in SpeechRecorderComponent\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 }\r\n\r\n ngAfterViewInit() {\r\n this.uploader.listener = (ue) => {\r\n this.uploadUpdate(ue);\r\n }\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 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 ngOnDestroy() {\r\n //super.ngOnDestroy();\r\n }\r\n\r\n fetchSession(sessionId:string){\r\n\r\n let sessObs= this.sessionService.sessionObserver(sessionId);\r\n\r\n if(sessObs) {\r\n sessObs.subscribe({\r\n next:(sess) => {\r\n this.ar.statusAlertType='info';\r\n this.ar.statusMsg = 'Received session info.';\r\n this.ar.statusWaiting=false;\r\n this.session=sess;\r\n this.ar.session=sess;\r\n if (sess.project) {\r\n //console.debug(\"Session associated project: \"+sess.project)\r\n this.projectService.projectObservable(sess.project).subscribe({\r\n next:(project)=>{\r\n this.ar.project=project;\r\n this.ar.fetchRecordings(sess);\r\n },error:(reason) =>{\r\n this.ar.statusMsg=reason;\r\n this.ar.statusAlertType='error';\r\n this.ar.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 }\r\n },\r\n error:(reason) => {\r\n this.ar.statusMsg = reason;\r\n this.ar.statusAlertType = 'error';\r\n this.ar.statusWaiting=false;\r\n console.error(\"Error fetching session \" + reason)\r\n }});\r\n }\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.ar.uploadStatus = 'warn'\r\n } else {\r\n if (percentUpl < 50) {\r\n this.ar.uploadStatus = 'accent'\r\n } else {\r\n this.ar.uploadStatus = 'success'\r\n }\r\n this.ar.uploadProgress = percentUpl;\r\n }\r\n\r\n this.changeDetectorRef.detectChanges()\r\n }\r\n\r\n\r\n ready():boolean{\r\n return this.dataSaved && !this.ar.isActive()\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\nimport {AudioRecorder, AudioRecorderComponent} from \"./speechrecorder/session/audiorecorder\";\r\nimport {RecordingList} from \"./speechrecorder/session/recording_list\";\r\nimport {RecorderCombiPane} from \"./speechrecorder/session/recorder_combi_pane\";\r\n\r\n\r\n\r\nexport const SPR_ROUTES: Routes = [\r\n { path: 'spr/session/:id', component: SpeechrecorderngComponent },\r\n { path: 'recorder/session/:id', component: AudioRecorderComponent},\r\n { path: 'recorder', component: AudioRecorderComponent},\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, AudioRecorder,SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent,AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent,RecordingList,RecorderCombiPane,AudioRecorder],\r\n exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar,AudioRecorder],\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\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.24.1'","/*\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\nexport {ReadyStateProvider} from \"./lib/recorder_component\"\r\nexport {AudioClip,Selection} from './lib/audio/persistor'\r\nexport {WavWriter} from './lib/audio/impl/wavwriter'\r\nexport {RecorderComponent} from './lib/recorder_component'\r\nexport {AudioPlayer, AudioPlayerListener, AudioPlayerEvent, EventType} from './lib/audio/playback/player'\r\nexport {AudioRecorder,AudioRecorderComponent} from './lib/speechrecorder/session/audiorecorder'\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 {SprRecordingFile} 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":["Browser","Platform","CfgPlatform","UploadStatus","i1.AudioSignal","i2.Sonagram","i1.AudioClipUIContainer","i1","i2","i2.AudioDisplayScrollPane","i3.AudioDisplayControl","i3.ScrollIntoViewDirective","i1.ProjectService","i2.SimpleTrafficLight","i3.Progress","i4.AudioDisplay","i5","i3","Item","DEFAULT_WARN_DB_LEVEL","MIN_DB_LEVEL","i6","i7","i5.LevelBar","i5.WarningBar","i6.Prompting","i8.LevelBar","i9.RecordingItemControls","i10.UploadStatus","i10.ReadyStateIndicator","i10.StatusDisplay","i10.TransportPanel","i11","i12","i13","PlaybackEventType","i2.SessionService","i3.ProjectService","i4.ScriptService","i5.RecordingService","i6.SpeechRecorderUploader","i7.SessionManager","i4","i1.RecordingFileService","i2.RecordingService","i3.SessionService","i6.AudioDisplayScrollPane","i7.RecordingFileMetaComponent","i8.AudioDisplayControl","i9.RecordingFileNaviComponent","i7.AudioDisplayScrollPane","i8.RecordingFileMetaComponent","i9.AudioDisplayControl","i10.RecordingFileNaviComponent","i5.ScrollIntoViewDirective","i1.RecordingList","i2.AudioDisplay","i7.WarningBar","i8.RecorderCombiPane","i9.LevelBar","i10.RecordingItemControls","i11.UploadStatus","i11.ReadyStateIndicator","i11.StatusDisplay","i14","i15","i16","i4.SessionService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"speechrecorderng.mjs","sources":["../../../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/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/dsp/utils.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/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/audio/ui/livelevel.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/controlpanel.ts","../../../projects/speechrecorderng/src/lib/audio/dsp/level_measure.ts","../../../projects/speechrecorderng/src/lib/ui/recordingitem_display.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/basicrecorder.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/recorder_component.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/media/utils.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recording_list.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/recorder_combi_pane.ts","../../../projects/speechrecorderng/src/lib/speechrecorder/session/audiorecorder.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\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 recordingDeviceWakeLock?:boolean,\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\r\n // Typescript lib.dom.ts MediaTrackSettings.channelCount is missing\r\n // https://github.com/mdn/browser-compat-data/blob/5493d8f937e05b2ddbd41b99f5bdfad4a1f2ed85/api/MediaTrackSettings.json\r\n //@ts-ignore\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 let frameLen: number = 0;\r\n let ch0Data = this.data[0];\r\n\r\n for (let ch0Chk of ch0Data) {\r\n frameLen += ch0Chk.length;\r\n }\r\n let ab:AudioBuffer;\r\n try {\r\n ab = this.context.createBuffer(this.channelCount, frameLen, this.context.sampleRate);\r\n }catch(err){\r\n if(err instanceof DOMException){\r\n if(err.name==='NotSupportedError'){\r\n if(frameLen==0){\r\n // Empty buffers are not supported by Chromium\r\n // Create dummy buffer with one sample\r\n ab = this.context.createBuffer(this.channelCount, 1, this.context.sampleRate);\r\n }else{\r\n throw err;\r\n }\r\n }else{\r\n throw err;\r\n }\r\n }else if (err instanceof RangeError){\r\n // Out of memory\r\n // TODO What to do ??\r\n throw err;\r\n }else{\r\n throw err;\r\n }\r\n }\r\n for (let ch = 0; ch < this.channelCount; ch++) {\r\n let chD = ab.getChannelData(ch);\r\n let pos = 0;\r\n for (let chChk of this.data[ch]) {\r\n let 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\" | \"PRERECORDINGONLY\" | \"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 prerecdelay?: number,\r\n prerecording?: number,\r\n recduration?: number,\r\n postrecording?: number,\r\n postrecdelay?: 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\nexport interface RecordingFileDescriptor {\r\n recording:PromptItem;\r\n version:number;\r\n}\r\n\r\nexport class RecordingFileDescriptorImpl {\r\n recording!:PromptItem;\r\n version!:number;\r\n constructor() {}\r\n}\r\n\r\nexport class RecordingFile {\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 startedDate: string|null=null;\r\n _startedAsDateObj?:Date|null=null;\r\n audioBuffer:AudioBuffer|null=null;\r\n session:string|number|null=null;\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(uuid:string,sessionId:string|number,audioBuffer:AudioBuffer|null) {\r\n this.session=sessionId;\r\n this.audioBuffer=audioBuffer;\r\n this.uuid=uuid;\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 fns+=this.uuid;\r\n return fns;\r\n }\r\n}\r\n\r\n export class SprRecordingFile extends RecordingFile implements RecordingFileDescriptor{\r\n\r\n itemCode:string;\r\n\r\n recording!:PromptItem;\r\n version!:number;\r\n\r\n constructor(sessionId:string|number,itemcode:string,version:number,audioBuffer:AudioBuffer|null) {\r\n super(UUID.generate(),sessionId,audioBuffer);\r\n this.session=sessionId;\r\n this.itemCode=itemcode;\r\n this.version=version;\r\n this.audioBuffer=audioBuffer;\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|FormData;\r\n private _url:string;\r\n status: UploadStatus;\r\n\r\n constructor(blob:Blob|FormData, 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|FormData {\r\n return this._data;\r\n }\r\n\r\n public toString = () : string => {\r\n let s=`Upload: Status: ${this.status}, URL: ${this._url}`;\r\n if(this._data instanceof Blob){\r\n s=s+`, Size: ${this._data.size}`;\r\n }else if(this._data instanceof FormData){\r\n // TODO (iterate through parts ??)\r\n }\r\n return s;\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 private te:TextEncoder=new TextEncoder();\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 private dataSize(dt:Blob|FormData){\r\n let si=0;\r\n if(dt instanceof Blob){\r\n si=dt.size;\r\n }else if(dt instanceof FormData){\r\n dt.forEach((v,k)=>{\r\n if(v instanceof File){\r\n si+=v.size;\r\n }else if(typeof v ==='string'){\r\n // encode to UT-f8 to get upload size\r\n si+= this.te.encode().length;\r\n }\r\n })\r\n }\r\n return si;\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 = this.dataSize(ul.data);\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=this.dataSize(ul.data);\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 = this.dataSize(ul.data);\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 {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 if(cl.style.left!=leftStyle) {\r\n cl.style.left = leftStyle;\r\n }\r\n const topStyle=bounds.position.top + 'px';\r\n if(cl.style.top!=topStyle) {\r\n cl.style.top = topStyle;\r\n }\r\n }\r\n if (bounds.dimension.width) {\r\n let intW=Math.floor(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 if(cl.width!=intW) {\r\n cl.width = intW;\r\n }\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 if(cl.style.width!=wStr) {\r\n cl.style.width = wStr;\r\n }\r\n }\r\n }\r\n if (bounds.dimension.height) {\r\n let intH=Math.floor(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 if(cl.height!=intH) {\r\n cl.height = intH;\r\n }\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 if(cl.style.height!=hStr){\r\n cl.style.height = hStr;\r\n }\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 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","\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 overflow: hidden;\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 let vbLeftStyl = vbLeft + 'px';\r\n if (this.dc.style.left != vbLeftStyl) {\r\n this.dc.style.left = vbLeftStyl;\r\n }\r\n // top position\r\n const dTop = asH;\r\n const dTopStr = dTop + 'px';\r\n if (this.dc.style.top != dTopStr) {\r\n this.dc.style.top = dTopStr;\r\n }\r\n // width\r\n let vbWidthStyle = vbWidth + 'px';\r\n if (this.dc.style.width != vbWidthStyle) {\r\n this.dc.style.width = vbWidthStyle;\r\n }\r\n if (this.dc.width != vbWidth) {\r\n this.dc.width = vbWidth;\r\n }\r\n // height\r\n if(this.dc.height!=AudioClipUIContainer.DIVIDER_PIXEL_SIZE) {\r\n this.dc.height = AudioClipUIContainer.DIVIDER_PIXEL_SIZE;\r\n\r\n }\r\n let divPixelSizeStyle=AudioClipUIContainer.DIVIDER_PIXEL_SIZE.toString() + 'px';\r\n if(this.dc.style.height!=divPixelSizeStyle) {\r\n this.dc.style.height = divPixelSizeStyle;\r\n }\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 if(this.ce.style.width!='100%') {\r\n //console.log(\"set width to 100%\");\r\n this.ce.style.width = '100%';\r\n }\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 //ev.preventDefault();\r\n }\r\n }\r\n }\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 ev.preventDefault();\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 }\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 ev.preventDefault();\r\n }\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","\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 {SprRecordingFile} from \"../recording\";\r\n\r\nexport class Item {\r\n recs: Array<SprRecordingFile> | null;\r\n\r\n constructor(private _promptAsString: string, private _training: boolean,private _recording:boolean) {\r\n this.recs = null;\r\n }\r\n\r\n get promptAsString():string{\r\n return this._promptAsString;\r\n }\r\n\r\n get training():boolean{\r\n return this._training;\r\n }\r\n\r\n get recording():boolean{\r\n return this._recording;\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 {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 *ngIf=\"pausingEnabled\" (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 button {\r\n touch-action: manipulation;\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 @Input() pausingEnabled=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 || !this.pausingEnabled;\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","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 {\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 button {\r\n touch-action: manipulation;\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","import {TransportActions} from \"./controlpanel\";\r\nimport {Browser, UserAgent, UserAgentBuilder} from \"../../utils/ua-parser\";\r\nimport {MatDialog} from \"@angular/material/dialog\";\r\nimport {MessageDialog} from \"../../ui/message_dialog\";\r\nimport {Session} from \"./session\";\r\nimport {SessionService} from \"./session.service\";\r\nimport {AudioCapture} from \"../../audio/capture/capture\";\r\nimport {AudioDevice, AutoGainControlConfig} from \"../project/project\";\r\nimport {LevelInfos, LevelMeasure, StreamLevelMeasure} from \"../../audio/dsp/level_measure\";\r\nimport {AudioPlayer} from \"../../audio/playback/player\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {AudioClip} from \"../../audio/persistor\";\r\nimport {Action} from \"../../action/action\";\r\nimport {MIN_DB_LEVEL} from \"../../ui/recordingitem_display\";\r\nimport NoSleep from \"nosleep.js\";\r\n\r\nexport const FORCE_REQUEST_AUDIO_PERMISSIONS=false;\r\nexport const RECFILE_API_CTX = 'recfile';\r\nexport const MAX_RECORDING_TIME_MS = 1000 * 60 * 60 * 60; // 1 hour\r\n\r\nexport const LEVEL_BAR_INTERVALL_SECONDS = 0.1; // 100ms\r\n\r\nexport class BasicRecorder {\r\n\r\n protected userAgent:UserAgent;\r\n statusMsg: string='';\r\n statusAlertType!: string;\r\n statusWaiting: boolean=false;\r\n readonly=false;\r\n processingRecording=false;\r\n ac: AudioCapture|null=null;\r\n\r\n protected _wakeLock:boolean=false;\r\n // Property audioDevices from project config: list of names of allowed audio devices.\r\n protected _audioDevices: Array<AudioDevice> | null| undefined;\r\n protected _selectedDeviceId:string|undefined=undefined;\r\n protected selCaptureDeviceId: ConstrainDOMString | null;\r\n protected _channelCount = 2;\r\n protected _autoGainControlConfigs: Array<AutoGainControlConfig> | null| undefined;\r\n\r\n _session: Session|null=null;\r\n\r\n transportActions: TransportActions;\r\n playStartAction: Action<void>;\r\n\r\n uploadProgress: number = 100;\r\n uploadStatus: string = 'ok'\r\n audioSignalCollapsed = true;\r\n\r\n protected streamLevelMeasure: StreamLevelMeasure;\r\n protected levelMeasure: LevelMeasure;\r\n peakLevelInDb:number=MIN_DB_LEVEL;\r\n displayLevelInfos: LevelInfos | null=null;\r\n protected _controlAudioPlayer!: AudioPlayer;\r\n displayAudioClip: AudioClip | null=null;\r\n protected audioFetchSubscription:Subscription|null=null;\r\n\r\n protected destroyed=false;\r\n\r\n protected navigationDisabled=true;\r\n\r\n protected noSleep:NoSleep|null=null;\r\n\r\n\r\n constructor( public dialog: MatDialog,protected sessionService:SessionService) {\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 this.transportActions = new TransportActions();\r\n this.playStartAction = new Action('Play');\r\n this.levelMeasure = new LevelMeasure();\r\n this.streamLevelMeasure = new StreamLevelMeasure();\r\n this.selCaptureDeviceId = null;\r\n }\r\n\r\n get wakeLock(): boolean {\r\n return this._wakeLock;\r\n }\r\n\r\n set wakeLock(value: boolean) {\r\n this._wakeLock = value;\r\n }\r\n\r\n enableWakeLockCond(){\r\n if(this.wakeLock===true) {\r\n if(!this.noSleep){\r\n this.noSleep=new NoSleep();\r\n }\r\n if(!this.noSleep.isEnabled) {\r\n this.noSleep.enable();\r\n }\r\n }\r\n }\r\n\r\n disableWakeLockCond(){\r\n if(this.noSleep && this.noSleep.isEnabled){\r\n this.noSleep.disable();\r\n }\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 set channelCount(channelCount: number) {\r\n this._channelCount = channelCount;\r\n }\r\n\r\n set session(session: Session|null) {\r\n this._session = session;\r\n }\r\n\r\n get session():Session|null{\r\n return this._session;\r\n }\r\n\r\n enableStartUserGesture() {\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Ready.';\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 }\r\n\r\n closed() {\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Session closed.';\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, 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 {SprRecordingFile, RecordingFileDescriptorImpl, RecordingFile} 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 public static readonly RECORDING_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\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 recordingFilesUrl():string{\r\n let recFilesUrl = this.apiEndPoint + RecordingService.RECORDING_API_CTX;\r\n return recFilesUrl;\r\n }\r\n\r\n private sessionRecordingFilesUrl(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.RECORDING_API_CTX;\r\n return recFilesUrl;\r\n }\r\n\r\n private sessionRecFilesUrl(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 sessionRecFilesReqUrl(projectName: string, sessId: string | number):string{\r\n let recFilesUrl=this.sessionRecFilesUrl(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<RecordingFileDescriptorImpl>> {\r\n let recFilesReqUrl = this.sessionRecFilesReqUrl(projectName,sessId);\r\n let wobs = this.http.get<Array<RecordingFileDescriptorImpl>>(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.sessionRecFilesReqUrl(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 sprRecordingFileList(projectName: string, sessId: string | number):Observable<Array<SprRecordingFile>> {\r\n let recFilesReqUrl = this.sessionRecFilesReqUrl(projectName,sessId);\r\n let wobs = this.http.get<Array<SprRecordingFile>>(recFilesReqUrl,{withCredentials:this.withCredentials});\r\n return wobs;\r\n }\r\n\r\n private audioRequest(audioUrl:string): Observable<HttpResponse<ArrayBuffer>> {\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 audioUrl = audioUrl + '.wav?requestUUID=' + UUID.generate();\r\n }\r\n let headers = new HttpHeaders();\r\n headers = headers.set('Accept', 'audio/wav');\r\n return this.http.get(audioUrl, {\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 private fetchAudiofile(projectName: string, sessId: string | number, recFileId: string|number): Observable<HttpResponse<ArrayBuffer>> {\r\n let recFilesUrl=this.sessionRecordingFilesUrl(projectName,sessId);\r\n let encRecFileId=encodeURIComponent(recFileId);\r\n let recUrl = recFilesUrl + '/' + encRecFileId;\r\n return this.audioRequest(recUrl);\r\n }\r\n\r\n private fetchSprAudiofile(projectName: string, sessId: string | number, itemcode: string,version:number): Observable<HttpResponse<ArrayBuffer>> {\r\n let recFilesUrl=this.sessionRecFilesUrl(projectName,sessId);\r\n let encItemcode=encodeURIComponent(itemcode);\r\n let recUrl = recFilesUrl + '/' + encItemcode +'/'+version;\r\n return this.audioRequest(recUrl);\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 && recordingFile.recordingFileId) {\r\n let obs = this.fetchAudiofile(projectName, recordingFile.session, recordingFile.recordingFileId);\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 fetchAndApplySprRecordingFile(aCtx: AudioContext, projectName: string, recordingFile:SprRecordingFile):Observable<SprRecordingFile|null> {\r\n\r\n let wobs = new Observable<SprRecordingFile|null>(observer=>{\r\n if(recordingFile.session) {\r\n let obs = this.fetchSprAudiofile(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<SprRecordingFile|null> {\r\n\r\n let wobs = new Observable<SprRecordingFile | null>(observer=>{\r\n let obs = this.fetchSprAudiofile(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 SprRecordingFile(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 {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 {SprRecordingFile, RecordingFileDescriptorImpl} 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 {Prompting} from \"./prompting\";\r\nimport {SequenceAudioFloat32ChunkerOutStream} from \"../../audio/io/stream\";\r\nimport {SessionFinishedDialog} from \"./session_finished_dialog\";\r\nimport {MessageDialog} from \"../../ui/message_dialog\";\r\nimport {RecordingService} from \"../recordings/recordings.service\";\r\nimport {AudioContextProvider} from \"../../audio/context\";\r\nimport {AudioClip} from \"../../audio/persistor\";\r\nimport {Item} from \"./item\";\r\nimport {LevelBar} from \"../../audio/ui/livelevel\";\r\nimport {BasicRecorder, LEVEL_BAR_INTERVALL_SECONDS, MAX_RECORDING_TIME_MS, RECFILE_API_CTX} from \"./basicrecorder\";\r\n\r\nconst DEFAULT_PRE_REC_DELAY=1000;\r\nconst DEFAULT_POST_REC_DELAY=500;\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@Component({\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 extends BasicRecorder 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 @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 startStopSignalState!: StartStopSignalState;\r\n\r\n private updateTimerId: any;\r\n private preRecTimerId: number|null=null;\r\n private preRecTimerRunning: boolean|null=null;\r\n private postDelay:number=DEFAULT_POST_REC_DELAY;\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 dnlLnk!: HTMLAnchorElement;\r\n\r\n audio: any;\r\n _script!: Script;\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: SprRecordingFile | null=null;\r\n private displayRecFileVersion!: number;\r\n\r\n promptItemCount!: number;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef,\r\n private renderer: Renderer2,\r\n public dialog: MatDialog,\r\n protected sessionService:SessionService,\r\n private recFileService:RecordingService,\r\n private uploader: SpeechRecorderUploader,\r\n @Inject(SPEECHRECORDER_CONFIG) public config?: SpeechRecorderConfig) {\r\n super(dialog,sessionService);\r\n this.status = Status.IDLE;\r\n this.audio = document.getElementById('audio');\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.disableWakeLockCond();\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 = 'Unknown error';\r\n if(err instanceof Error){\r\n errMsg=err.message;\r\n }\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 == ' ') {\r\n this.transportActions.stopAction.perform();\r\n }\r\n if (ke.key == 'p') {\r\n this.transportActions.pauseAction.perform();\r\n }\r\n\r\n if (ke.key == 'Escape') {\r\n if(!this.audioSignalCollapsed){\r\n this.audioSignalCollapsed=true;\r\n }\r\n this.transportActions.stopAction.perform();\r\n this.transportActions.pauseAction.perform();\r\n }\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 script(script: any) {\r\n this._script = script;\r\n this.loadScript();\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.enableWakeLockCond();\r\n\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,(!pi.type || pi.type==='recording'));\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: SprRecordingFile | 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.fetchAndApplySprRecordingFile(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(): SprRecordingFile | 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<SprRecordingFile>();\r\n }\r\n\r\n let recentRecFile: SprRecordingFile | 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 super.start();\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 super.enableStartUserGesture();\r\n this.transportActions.startAction.disabled=!(this.ac && this.isRecordingItem());\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 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' || this.section.promptphase === 'PRERECORDINGONLY') {\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.prerecdelay!=null) {\r\n preDelay = this.promptItem.prerecdelay;\r\n }else if (this.promptItem.prerecording!=null) {\r\n preDelay = this.promptItem.prerecording;\r\n }\r\n\r\n this.postDelay=DEFAULT_POST_REC_DELAY;\r\n if(this.promptItem.postrecdelay!=null){\r\n this.postDelay=this.promptItem.postrecdelay;\r\n }else if(this.promptItem.postrecording!=null){\r\n this.postDelay=this.promptItem.postrecording;\r\n }\r\n\r\n let maxRecordingTimeMs = MAX_RECORDING_TIME_MS;\r\n if (this.promptItem.recduration!==null && this.promptItem.recduration!==undefined) {\r\n maxRecordingTimeMs = preDelay+this.promptItem.recduration+this.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 if (this.section.promptphase === 'PRERECORDINGONLY'){\r\n this.clearPrompt();\r\n }\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\r\n this.postRecTimerId = window.setTimeout(() => {\r\n this.postRecTimerRunning = false;\r\n this.status = Status.STOPPING_STOP;\r\n this.stopRecording();\r\n }, this.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\r\n this.postRecTimerId = window.setTimeout(() => {\r\n this.postRecTimerRunning = false;\r\n this.status = Status.STOPPING_PAUSE;\r\n this.stopRecording();\r\n }, this.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:RecordingFileDescriptorImpl){\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<SprRecordingFile>();\r\n }\r\n let rf = new SprRecordingFile(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:SprRecordingFile){\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:AudioBuffer|null = 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<SprRecordingFile>();\r\n }\r\n rf = new SprRecordingFile(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.recording && !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\r\n","import {SpeechRecorderUploader} from \"./speechrecorder/spruploader\";\r\nimport {UploaderStatus, UploaderStatusChangeEvent} from \"./net/uploader\";\r\n\r\n\r\nexport interface ReadyStateProvider {\r\n ready():boolean;\r\n}\r\n\r\n\r\nexport abstract class RecorderComponent implements ReadyStateProvider{\r\n\r\n dataSaved: boolean = true;\r\n\r\n constructor(protected uploader:SpeechRecorderUploader) {\r\n }\r\n\r\n abstract ready():boolean;\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 {RecordingFileDescriptorImpl} from \"./speechrecorder/recording\";\r\nimport {Arrays} from \"./utils/utils\";\r\nimport {AudioRecorderComponent} from \"./speechrecorder/session/audiorecorder\";\r\nimport {RecorderComponent} from \"./recorder_component\";\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 extends RecorderComponent 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\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 protected uploader:SpeechRecorderUploader) {\r\n super(uploader);\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 let errMsg='Unknown error';\r\n if(err instanceof Error){\r\n errMsg=err.message;\r\n }\r\n this.sm.statusMsg=errMsg;\r\n this.sm.statusAlertType='error';\r\n console.error(errMsg)\r\n }\r\n }\r\n ngAfterViewInit(){\r\n // let wakeLockSupp=('wakeLock' in navigator);\r\n // alert('Wake lock API supported: '+wakeLockSupp);\r\n\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 let sessObs= this.sessionsService.sessionObserver(sessionId);\r\n\r\n if(sessObs) {\r\n sessObs.subscribe({\r\n next: 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({\r\n next: (project) => {\r\n this.project = project;\r\n this.fetchScript(sess);\r\n }, error: (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 );\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 error:(reason) =>\r\n {\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({\r\n next: (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 }, error: (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 });\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 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({\r\n next: (rfs: Array<RecordingFileDescriptorImpl>) => {\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 }, error: (err) => {\r\n // we start the session anyway\r\n this.startSession()\r\n }, complete: () => {\r\n this.startSession()\r\n }\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 //TODO Duplicate code in AudioRecorderComponent\r\n this.uploader.listener = (ue) => {\r\n this.uploadUpdate(ue);\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 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 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 if(project.recordingDeviceWakeLock===true){\r\n this.sm.wakeLock=true;\r\n }\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 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 start(){\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","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 if(err instanceof Error) {\r\n this.status = err.message;\r\n }\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 {PromptitemUtil} from \"../../script/script\";\r\nimport {RecordingFile, SprRecordingFile} 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:SprRecordingFile) {\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, SprRecordingFile} 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 private sprRecordingFileDescrObserver(recordingFileId: string | number): Observable<SprRecordingFile> {\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<SprRecordingFile>(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:SprRecordingFile):Observable<SprRecordingFile|null> {\r\n\r\n let wobs = new Observable<SprRecordingFile|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 fetchSprRecordingFile(aCtx: AudioContext, recordingFileId: string | number): Observable<SprRecordingFile | null> {\r\n\r\n let wobs = new Observable<SprRecordingFile | null>(observer => {\r\n let rf: SprRecordingFile|null = null;\r\n let rfDescrObs = this.sprRecordingFileDescrObserver(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|null,editStartFrame:number|null,editEndFrame:number|null): Observable<SprRecordingFile | 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<SprRecordingFile>(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, SprRecordingFile} 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 *ngIf=\"itemCode\">\r\n <td>Itemcode:</td>\r\n <td>{{itemCode}}</td>\r\n </tr>\r\n <tr *ngIf=\"uuid && !itemCode\">\r\n <td>UUID:</td>\r\n <td>{{uuid}}</td>\r\n </tr>\r\n <tr *ngIf=\"recordingFile?.startedDate\">\r\n <td>Started:</td>\r\n <td>{{recordingFile?.startedDate}}</td>\r\n </tr>\r\n <tr *ngIf=\"!recordingFile?.startedDate && recordingFile?.date\">\r\n <td>Date:</td>\r\n <td>{{recordingFile?.date}}</td>\r\n </tr>\r\n <tr *ngIf=\"itemCode\">\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\r\n @Input() sessionId:string | number | null=null;\r\n\r\n private _recordingFile:SprRecordingFile|null=null;\r\n\r\n get recordingFile(): SprRecordingFile | null {\r\n return this._recordingFile;\r\n }\r\n\r\n @Input() set recordingFile(recordingFile:SprRecordingFile|null){\r\n this._recordingFile=recordingFile;\r\n if(this._recordingFile) {\r\n this.itemCode = this._recordingFile.itemCode;\r\n if(!this.itemCode && this._recordingFile.recording?.itemcode){\r\n this.itemCode=this._recordingFile.recording.itemcode;\r\n }\r\n if (this.itemCode) {\r\n\r\n this.uuid = null;\r\n console.debug(\"SprRecordingFile: \"+this.itemCode+ \" UUID: \"+this.uuid)\r\n } else {\r\n this.itemCode = null;\r\n this.uuid = this._recordingFile?.uuid;\r\n console.debug(\"RecordingFile: \"+this.itemCode+ \" UUID: \"+this.uuid)\r\n }\r\n }else{\r\n this.itemCode=null;\r\n this.uuid=null;\r\n }\r\n }\r\n\r\n itemCode:string|null=null;\r\n uuid:string|null|undefined=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, SprRecordingFile} from \"../../recording\";\r\nimport {RecordingFileUtil} from \"./recording-file\";\r\n\r\n\r\nexport class ItemcodeIndex{\r\n [itemcode: string]: Array<SprRecordingFile>;\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]=\"recordingFileVersion\" [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<SprRecordingFile>>;\r\n versions: Array<number>|null=null;\r\n\r\n recordingFile: SprRecordingFile|null=null;\r\n recordingFileVersion:number|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 !=null) {\r\n if (cRf.version === version) {\r\n toRfId = cRf.recordingFileId;\r\n break;\r\n }\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.itemCode;\r\n if(!cic && this.recordingFile.recording && this.recordingFile.recording.itemcode){\r\n cic=this.recordingFile.recording.itemcode;\r\n }\r\n if (cic) {\r\n let itemCnt = this.availRecFiles.length\r\n for (let rfdi = 0; rfdi < itemCnt; rfdi++) {\r\n let arRf = this.availRecFiles[rfdi][0];\r\n if (arRf.recording) {\r\n let ar = arRf.recording;\r\n if (cic === ar.itemcode) {\r\n return rfdi;\r\n }\r\n }\r\n }\r\n }else{\r\n let itemCnt = this.availRecFiles.length\r\n for (let rfdi = 0; rfdi < itemCnt; rfdi++) {\r\n let arRf = this.availRecFiles[rfdi][0];\r\n if (this.recordingFile.uuid === arRf.uuid) {\r\n return rfdi;\r\n }\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 if(arf.recording?.itemcode) {\r\n this.versions.push(arf.version)\r\n }\r\n }\r\n\r\n this.toVersionAction.disabled=(this.versions.length<2);\r\n }\r\n }\r\n }\r\n\r\n if(this.recordingFile){\r\n if(this.recordingFile.version){\r\n this.recordingFileVersion=this.recordingFile.version;\r\n }else{\r\n this.recordingFileVersion=0;\r\n }\r\n }else{\r\n this.recordingFileVersion=null;\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.fetchSprRecordingFile(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\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.sprRecordingFileList(s.project, s.sessionId).subscribe((rfds) => {\r\n this.availRecFiles = new Array<Array<SprRecordingFile>>();\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 ic = rfd.itemCode;\r\n\r\n if (!ic) {\r\n let r = rfd.recording;\r\n if (r && r.itemcode) {\r\n ic = r.itemcode;\r\n }\r\n }\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<SprRecordingFile>();\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 } else {\r\n let arfd = new Array<SprRecordingFile>();\r\n arfd.push(rfd);\r\n this.availRecFiles.push(arfd);\r\n }\r\n }\r\n // have unsorted itemcode 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 for(let avRf of this.availRecFiles){\r\n if(avRf[0] && avRf[0].recording) {\r\n let os = avRf[0].recording.itemcode + ': versions: ';\r\n for (let avRfV of avRf) {\r\n os += avRfV.version + '/';\r\n }\r\n console.debug(os);\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]=\"recordingFileVersion\" [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 (ab && this.recordingFile?.recordingFileId) {\r\n\r\n let sr= null;\r\n let sf=null;\r\n let ef=null;\r\n if(s) {\r\n sr= ab.sampleRate;\r\n sf = s.startFrame;\r\n ef = s.endFrame;\r\n }\r\n this.recordingFileService.saveEditSelection(this.recordingFile.recordingFileId, sr, sf, ef).subscribe((value) => {\r\n },\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","\r\n export class MediaUtils {\r\n\r\n static toMediaTime(timeInSeconds:number):string{\r\n let rest=timeInSeconds;\r\n let hours=Math.floor(timeInSeconds/3600);\r\n rest-=hours*3600;\r\n let minutes=Math.floor(rest/60);\r\n rest-=minutes*60;\r\n let seconds=Math.floor(rest);\r\n rest-=seconds;\r\n let millis=Math.round(rest*1000);\r\n return hours.toString().padStart(2,'0')+':'+minutes.toString().padStart(2,'0')+':'+seconds.toString().padStart(2,'0')+'.'+millis.toString().padStart(3,'0');\r\n }\r\n }\r\n","import {AfterViewInit, Component, EventEmitter, Input, Output} from \"@angular/core\";\r\nimport {RecordingFile, SprRecordingFile} from \"../recording\";\r\nimport {MediaUtils} from \"../../media/utils\";\r\nimport {MatTable, MatTableDataSource} from \"@angular/material/table\";\r\nimport {Observable, Subject} from \"rxjs\";\r\n\r\n@Component({\r\n\r\n selector: 'app-recordinglist',\r\n\r\n template: `\r\n <mat-card>\r\n <mat-card-header>\r\n <h2>Recording list</h2>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <table mat-table [dataSource]=\"recordingListDataSource\" class=\"mat-elevation-z0\">\r\n <tr mat-header-row *matHeaderRowDef=\"cols;sticky:true\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: cols;\" [scrollIntoViewToBottom]=\"element.uuid===selectedRecordingFile?.uuid\"></tr>\r\n <ng-container matColumnDef=\"index\">\r\n <th mat-header-cell *matHeaderCellDef mat-header>#</th>\r\n <td mat-cell class=\"monospaced\" *matCellDef=\"let element;let i = index\">{{recordingListDataSource.data.length-i}}</td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"startedDate\">\r\n <th mat-header-cell *matHeaderCellDef mat-header>Started</th>\r\n <td mat-cell class=\"monospaced\" *matCellDef=\"let element\">{{element.startedDate | date:'YYYY-MM-dd HH:mm:ss'}}</td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"length\">\r\n <th mat-header-cell *matHeaderCellDef mat-header>Length</th>\r\n <td mat-cell class=\"monospaced\" *matCellDef=\"let element\">{{lengthTimeFormatted(element)}}</td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"action\">\r\n <th mat-header-cell *matHeaderCellDef>Action</th>\r\n <td mat-cell *matCellDef=\"let element\"><button mat-stroked-button color=\"primary\" (click)=\"selectRecordingFile(element)\" [disabled]=\"selectDisabled || element.uuid===selectedRecordingFile?.uuid\"><mat-icon>edit_attributes</mat-icon> Select</button></td>\r\n </ng-container>\r\n </table>\r\n </mat-card-content>\r\n </mat-card>\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 overflow-y: auto;\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 }`,`\r\n .selected{\r\n font-weight: bold;\r\n }\r\n `],\r\n styleUrls: ['../../speechrecorder_mat.scss']\r\n\r\n})\r\nexport class RecordingList implements AfterViewInit{\r\n private recordingList:Array<RecordingFile>=new Array<RecordingFile>();\r\n //recordingListSubject:Subject<Array<RecordingFile>> = new Subject<Array<RecordingFile>>();\r\n recordingListDataSource:MatTableDataSource<RecordingFile>;\r\n //cols=['index','length','samples','samplerate','action'];\r\n cols=['index','startedDate','length','action'];\r\n @Input() selectDisabled:boolean=false;\r\n @Output() selectedRecordingFileChanged = new EventEmitter<RecordingFile>();\r\n @Input() selectedRecordingFile:RecordingFile|null=null;\r\n\r\n constructor() {\r\n this.recordingListDataSource=new MatTableDataSource<RecordingFile>();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.buildDataSource();\r\n }\r\n\r\n private buildDataSource(){\r\n this.recordingList.sort((a, b) => {\r\n let cmp:number=0;\r\n let aD:Date|null=null;\r\n let bD:Date|null=null;\r\n if(a._startedAsDateObj && b._startedAsDateObj){\r\n aD=a._startedAsDateObj\r\n bD=b._startedAsDateObj\r\n }else if(a.startedDate && b.startedDate){\r\n aD=new Date(a.startedDate);\r\n bD=new Date(b.startedDate);\r\n }else if(a.date && b.date) {\r\n aD=new Date(a.date);\r\n bD=new Date(b.date);\r\n }\r\n if(aD!==null && bD!==null){\r\n cmp=bD.getTime()-aD.getTime();\r\n }\r\n return cmp;\r\n });\r\n this.recordingListDataSource.data=this.recordingList;\r\n }\r\n\r\n push(rf:RecordingFile){\r\n this.recordingList.push(rf);\r\n this.buildDataSource();\r\n }\r\n\r\n selectRecordingFile(rf:RecordingFile){\r\n this.selectedRecordingFileChanged.emit(rf);\r\n }\r\n\r\n selectTop() {\r\n if (this.recordingList.length > 0) {\r\n this.selectRecordingFile(this.recordingList[0]);\r\n }\r\n }\r\n\r\n lengthTimeFormatted(rf:RecordingFile){\r\n let str='--:--:--';\r\n if(rf.frames && rf.audioBuffer) {\r\n str=MediaUtils.toMediaTime(rf.frames / rf.audioBuffer?.sampleRate);\r\n }\r\n return str;\r\n }\r\n}\r\n","import {AfterViewInit, Component, EventEmitter, Input, Output, ViewChild} from \"@angular/core\";\r\nimport {RecordingFile, SprRecordingFile} from \"../recording\";\r\nimport {MediaUtils} from \"../../media/utils\";\r\nimport {MatTable, MatTableDataSource} from \"@angular/material/table\";\r\nimport {Observable, Subject} from \"rxjs\";\r\nimport {RecordingList} from \"./recording_list\";\r\nimport {AudioClip} from \"../../audio/persistor\";\r\nimport {Action} from \"../../action/action\";\r\nimport {AudioDisplay} from \"../../audio/audio_display\";\r\n\r\n@Component({\r\n\r\n selector: 'app-recordercombipane',\r\n\r\n template: `\r\n <div class=\"scrollList\">\r\n <app-recordinglist [selectedRecordingFile]=\"selectedRecordingFile\" [selectDisabled]=\"selectDisabled\" (selectedRecordingFileChanged)=\"selectRecordingFile($event)\"></app-recordinglist>\r\n </div>\r\n <div class=\"collapsable\" fxHide.xs #asCt [class.active]=\"!audioSignalCollapsed\">\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 </div>\r\n `,\r\n styles: [`:host {\r\n background-color: yellow;\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 /* 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 }`,`.scrollList{\r\n margin: 0;\r\n padding: 0;\r\n background: lightgrey;\r\n width: 100%; \r\n height: 100%;\r\n overflow-y: auto;\r\n }`, `\r\n .collapsable {\r\n display: none;\r\n position: absolute;\r\n z-index: 5;\r\n }`, `\r\n .collapsable.active {\r\n display: flex;\r\n position: absolute;\r\n bottom: 0px;\r\n height: 90%;\r\n width: 100%;\r\n overflow: hidden;\r\n padding: 0px;\r\n z-index: 200; /* Needs a higher value then the sticky Material table header (which is z-index: 100) */\r\n box-sizing: border-box;\r\n background-color: rgba(0, 0, 0, 0)\r\n }`],\r\n styleUrls: ['../../speechrecorder_mat.scss']\r\n\r\n})\r\nexport class RecorderCombiPane implements AfterViewInit{\r\n\r\n @ViewChild(RecordingList) recordingListComp!:RecordingList;\r\n @Input() selectDisabled:boolean=false;\r\n @Output() selectedRecordingFileChanged = new EventEmitter<RecordingFile>();\r\n @Input() selectedRecordingFile:RecordingFile|null=null;\r\n\r\n @ViewChild(AudioDisplay, { static: true }) audioDisplay!: AudioDisplay;\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\r\n constructor() {\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n }\r\n\r\n push(rf:RecordingFile){\r\n this.recordingListComp.push(rf);\r\n\r\n }\r\n\r\n selectRecordingFile(rf:RecordingFile){\r\n this.selectedRecordingFileChanged.emit(rf);\r\n }\r\n\r\n selectTop() {\r\n this.recordingListComp.selectTop();\r\n }\r\n\r\n}\r\n","import {AudioCapture, AudioCaptureListener} from '../../audio/capture/capture';\r\nimport {AudioPlayer, AudioPlayerEvent, EventType} from '../../audio/playback/player'\r\nimport {WavWriter} from '../../audio/impl/wavwriter'\r\nimport {RecordingFile, RecordingFileDescriptorImpl, SprRecordingFile} from '../recording'\r\nimport {\r\n Component, ViewChild, ChangeDetectorRef, Inject,\r\n AfterViewInit, HostListener, OnDestroy, Input, Renderer2, OnInit, Injector\r\n} from \"@angular/core\";\r\nimport {SessionService} from \"./session.service\";\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 { Project, ProjectUtil} from \"../project/project\";\r\nimport {SequenceAudioFloat32ChunkerOutStream} from \"../../audio/io/stream\";\r\nimport {MessageDialog} from \"../../ui/message_dialog\";\r\nimport {RecordingService} from \"../recordings/recordings.service\";\r\n\r\nimport {AudioContextProvider} from \"../../audio/context\";\r\nimport {AudioClip} from \"../../audio/persistor\";\r\n\r\nimport {Upload, UploaderStatus, UploaderStatusChangeEvent} from \"../../net/uploader\";\r\nimport {ActivatedRoute, Params, Router} from \"@angular/router\";\r\nimport {ProjectService} from \"../project/project.service\";\r\nimport {UUID} from \"../../utils/utils\";\r\nimport {LevelBar} from \"../../audio/ui/livelevel\";\r\nimport {RecorderCombiPane} from \"./recorder_combi_pane\";\r\nimport {BasicRecorder, LEVEL_BAR_INTERVALL_SECONDS, MAX_RECORDING_TIME_MS, RECFILE_API_CTX} from \"./basicrecorder\";\r\nimport {ReadyStateProvider, RecorderComponent} from \"../../recorder_component\";\r\nimport {Mode} from \"../../speechrecorderng.component\";\r\nimport NoSleep from \"nosleep.js\";\r\n\r\n\r\n\r\n\r\n\r\nexport const enum Status {\r\n BLOCKED, IDLE, RECORDING, STOPPING_STOP, ERROR\r\n}\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@Component({\r\n selector: 'app-audiorecorder',\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()\"\r\n warningText=\"This test uses default audio device! Regular sessions may require a particular audio device (microphone)!\"></app-warningbar>\r\n <app-recordercombipane (selectedRecordingFileChanged)=\"selectRecordingFile($event)\"\r\n [audioSignalCollapsed]=\"audioSignalCollapsed\"\r\n [selectedRecordingFile]=\"displayRecFile\"\r\n [selectDisabled]=\"isActive()\"\r\n [displayAudioClip]=\"displayAudioClip\"\r\n [playStartAction]=\"controlAudioPlayer.startAction\"\r\n [playStopAction]=\"controlAudioPlayer.stopAction\"\r\n [playSelectionAction]=\"controlAudioPlayer.startSelectionAction\"\r\n [autoPlayOnSelectToggleAction]=\"controlAudioPlayer.autoPlayOnSelectToggleAction\"\r\n ></app-recordercombipane>\r\n\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" [ngStyle]=\"{'height.px':100,'min-height.px': 100}\"\r\n [ngStyle.xs]=\"{'height.px':125,'min-height.px': 125}\">\r\n <audio-levelbar fxFlex=\"1 0 1\" [streamingMode]=\"isRecording()\"\r\n [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\"\r\n [value]=\"uploadProgress\"\r\n [status]=\"uploadStatus\" [awaitNewUpload]=\"processingRecording\"></app-uploadstatus>\r\n <app-readystateindicator class=\"ricontrols dark\" fxHide fxShow.xs fxFlex=\"0 0 0\"\r\n [ready]=\"dataSaved && !isActive()\"></app-readystateindicator>\r\n </div>\r\n </div>\r\n <div #controlpanel class=\"controlpanel\" fxLayout=\"row\">\r\n <app-sprstatusdisplay fxHide.xs fxFlex=\"30% 1 30%\" [statusMsg]=\"statusMsg\" [statusAlertType]=\"statusAlertType\"\r\n [statusWaiting]=\"statusWaiting\"\r\n class=\"hidden-xs\"></app-sprstatusdisplay>\r\n <div fxFlex=\"100% 0 100%\" class=\"startstop\">\r\n <div style=\"align-content: center\">\r\n <button (click)=\"startStopPerform()\" [disabled]=\"startDisabled() && stopDisabled()\" mat-raised-button class=\"bigbutton\">\r\n <mat-icon [style.color]=\"startStopNextIconColor()\" inline=\"true\">{{startStopNextIconName()}}</mat-icon>\r\n <span style=\"font-weight: bolder;font-size: 14px\">{{startStopNextName()}}</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div fxFlex=\"30% 1 30%\" >\r\n <div fxFlex=\"1 1 auto\"></div>\r\n <app-uploadstatus class=\"ricontrols\" fxHide.xs fxFlex=\"0 0 0\" *ngIf=\"enableUploadRecordings\"\r\n [value]=\"uploadProgress\"\r\n [status]=\"uploadStatus\" [awaitNewUpload]=\"processingRecording\"></app-uploadstatus>\r\n <app-readystateindicator class=\"ricontrols\" fxHide.xs\r\n [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 height: 100%;\r\n min-height: 0px;\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 }`,`.startstop {\r\n width: 100%;\r\n text-align: center;\r\n align-content: center;\r\n align-items: center;\r\n }`,`.bigbutton {\r\n min-width: 70px;\r\n min-height: 50px;\r\n font-size: 50px;\r\n border-radius: 20px;\r\n }`\r\n ]\r\n})\r\nexport class AudioRecorder extends BasicRecorder implements OnInit,AfterViewInit,OnDestroy, AudioCaptureListener,ReadyStateProvider {\r\n\r\n @Input() _project:Project|undefined| null=null;\r\n @Input() projectName:string|undefined|null=null;\r\n enableUploadRecordings: boolean = true;\r\n enableDownloadRecordings: boolean = false;\r\n status: Status = Status.BLOCKED;\r\n\r\n @ViewChild(RecorderCombiPane, { static: true }) recorderCombiPane!: RecorderCombiPane;\r\n @ViewChild(LevelBar, { static: true }) liveLevelDisplay!: LevelBar;\r\n\r\n @Input() dataSaved=true\r\n\r\n private startedDate:Date|null=null;\r\n private maxRecTimerId: number|null=null;\r\n private maxRecTimerRunning: boolean=false;\r\n private updateTimerId: any;\r\n\r\n startStopNextButtonName!:string;\r\n startStopNextButtonIconName!:string;\r\n\r\n audio: any;\r\n\r\n private _promptIndex:number|null=null;\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=0;\r\n\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef,\r\n private renderer: Renderer2,\r\n private route: ActivatedRoute,\r\n public dialog: MatDialog,\r\n private projectService:ProjectService,\r\n protected sessionService:SessionService,\r\n private recFileService:RecordingService,\r\n private uploader: SpeechRecorderUploader,\r\n @Inject(SPEECHRECORDER_CONFIG) public config?: SpeechRecorderConfig) {\r\n super(dialog,sessionService);\r\n\r\n //super(injector);\r\n this.status = Status.IDLE;\r\n\r\n this.audio = document.getElementById('audio');\r\n\r\n if (this.config && this.config.enableUploadRecordings != null) {\r\n this.enableUploadRecordings = this.config.enableUploadRecordings;\r\n }\r\n if (this.config && this.config.enableDownloadRecordings != null) {\r\n this.enableDownloadRecordings = this.config.enableDownloadRecordings;\r\n }\r\n //this.init();\r\n }\r\n\r\n\r\n ngAfterViewInit() {\r\n\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 //let wakeLockSupp=('wakeLock' in navigator);\r\n //alert('Wake lock API supported: '+wakeLockSupp);\r\n }\r\n\r\n ready():boolean{\r\n return this.dataSaved && !this.isActive()\r\n }\r\n ngOnDestroy() {\r\n this.disableWakeLockCond();\r\n this.destroyed=true;\r\n // TODO stop capture /playback\r\n }\r\n\r\n ngOnInit() {\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\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 = 'Unknown error';\r\n if(err instanceof Error){\r\n errMsg=err.message;\r\n }\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.controlAudioPlayer = new AudioPlayer(context, this);\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\r\n this.playStartAction.onAction = () => this.controlAudioPlayer.start();\r\n\r\n }\r\n this.uploader.listener = (ue) => {\r\n this.uploadUpdate(ue);\r\n }\r\n\r\n let wakeLockSupp=('wakeLock' in navigator);\r\n\r\n // if(wakeLockSupp) {\r\n // let wakeLock = null;\r\n // try {\r\n // //@ts-ignore\r\n // wakeLock = navigator.wakeLock.request('screen');\r\n //\r\n // //statusElem.textContent = 'Wake Lock is active!';\r\n // } catch (err) {\r\n // // The Wake Lock request has failed - usually system related, such as battery.\r\n // console.error('Wakelock failed'+err)\r\n // }\r\n // }else{\r\n // let noSleep=new NoSleep();\r\n // noSleep.enable();\r\n //\r\n // }\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 == ' ') {\r\n if(!this.transportActions.startAction.disabled){\r\n this.transportActions.startAction.perform();\r\n }else if(!this.transportActions.stopAction.disabled) {\r\n this.transportActions.stopAction.perform();\r\n }\r\n }\r\n if (ke.key == 'p') {\r\n this.transportActions.pauseAction.perform();\r\n }\r\n if (ke.key == 'Escape') {\r\n if (!this.audioSignalCollapsed) {\r\n this.audioSignalCollapsed = true;\r\n }\r\n this.transportActions.stopAction.perform();\r\n this.transportActions.pauseAction.perform();\r\n }\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 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 fetchRecordings(sess:Session){\r\n this.statusAlertType='info';\r\n this.statusMsg = 'Fetching infos of recordings...';\r\n this.statusWaiting=true;\r\n let prNm:string|null=null;\r\n if(this.project) {\r\n let rfsObs = this.recFileService.recordingFileList(this.project.name, sess.sessionId);\r\n rfsObs.subscribe({next:(rfs: Array<RecordingFile>) => {\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Received infos of recordings.';\r\n this.statusWaiting = false;\r\n if (rfs) {\r\n if (rfs instanceof Array) {\r\n rfs.forEach((rf) => {\r\n if(rf.startedDate){\r\n rf._startedAsDateObj=new Date(rf.startedDate);\r\n }\r\n if(rf.date){\r\n rf._dateAsDateObj=new Date(rf.date);\r\n }\r\n this.recorderCombiPane.push(rf);\r\n })\r\n } else {\r\n console.error('Expected type array for list of already recorded files ')\r\n }\r\n\r\n } else {\r\n //console.debug(\"Recording file list: \" + rfs);\r\n }\r\n }, error:(err) => {\r\n // Failed fetching existing, but we start the session anyway\r\n this.start()\r\n }, complete:() => {\r\n // Normal start\r\n this.start()\r\n }\r\n })\r\n }else{\r\n // No project def -> error\r\n this.statusAlertType = 'error';\r\n this.statusMsg = 'No project definiton.';\r\n this.statusWaiting = false;\r\n console.error(this.statusMsg);\r\n }\r\n }\r\n\r\n\r\n set project(project: Project|undefined|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 if(project.recordingDeviceWakeLock===true){\r\n this.wakeLock=true;\r\n }\r\n this.audioDevices = project.audioDevices;\r\n chCnt = ProjectUtil.audioChannelCount(project);\r\n console.info(\"Project requested recording channel count: \" + chCnt);\r\n this.autoGainControlConfigs=project.autoGainControlConfigs;\r\n } else {\r\n console.error(\"Empty project configuration!\")\r\n }\r\n this.channelCount = chCnt;\r\n }\r\n\r\n get project():Project|undefined|null{\r\n return this._project;\r\n }\r\n\r\n selectRecordingFile(rf:RecordingFile){\r\n this.displayRecFile=rf;\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.uploadStatus = 'warn'\r\n } else {\r\n if (percentUpl < 50) {\r\n this.uploadStatus = 'accent'\r\n } else {\r\n this.uploadStatus = 'success'\r\n }\r\n this.uploadProgress = percentUpl;\r\n }\r\n\r\n this.changeDetectorRef.detectChanges()\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 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 startDisabled() {\r\n return !this.transportActions || this.readonly || this.transportActions.startAction.disabled\r\n }\r\n\r\n stopDisabled() {\r\n return !this.transportActions || this.transportActions.stopAction.disabled\r\n }\r\n\r\n startStopNextName():string{\r\n 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 }\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()){\r\n return \"yellow\"\r\n }else{\r\n return \"grey\";\r\n }\r\n }\r\n\r\n startStopPerform(){\r\n if(!this.startDisabled()){\r\n this.transportActions.startAction.perform();\r\n }else if(!this.stopDisabled()){\r\n this.transportActions.stopAction.perform();\r\n }\r\n }\r\n\r\n startItem() {\r\n this.enableWakeLockCond();\r\n\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\r\n if (this.ac) {\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 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\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 this.showRecording();\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 updateStartActionDisableState(){\r\n this.transportActions.startAction.disabled=!(this.ac);\r\n }\r\n\r\n start() {\r\n super.start();\r\n this.recorderCombiPane.selectTop();\r\n this.enableNavigation();\r\n this.updateStartActionDisableState();\r\n\r\n }\r\n\r\n isRecording(): boolean {\r\n return (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 private updateNavigationActions(){\r\n\r\n this.transportActions.fwdAction.disabled = this.navigationDisabled;\r\n this.transportActions.bwdAction.disabled = this.navigationDisabled;\r\n }\r\n\r\n enableStartUserGesture() {\r\n super.enableStartUserGesture();\r\n this.transportActions.startAction.disabled=!(this.ac);\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 if(this.ac) {\r\n this.ac.start();\r\n }\r\n }\r\n\r\n started() {\r\n this.startedDate=new Date();\r\n this.transportActions.startAction.disabled = true;\r\n\r\n this.statusAlertType = 'info';\r\n this.statusMsg = 'Recording...';\r\n\r\n let maxRecordingTimeMs = MAX_RECORDING_TIME_MS;\r\n this.maxRecTimerId = window.setTimeout(() => {\r\n this.stopRecordingMaxRec()\r\n }, maxRecordingTimeMs);\r\n this.maxRecTimerRunning = true;\r\n\r\n this.status = Status.RECORDING;\r\n this.transportActions.stopAction.disabled = false;\r\n }\r\n\r\n stopItem() {\r\n\r\n this.transportActions.stopAction.disabled = true;\r\n this.transportActions.nextAction.disabled = true;\r\n this.status = Status.STOPPING_STOP;\r\n this.stopRecording();\r\n\r\n }\r\n\r\n stopRecording() {\r\n if (this.maxRecTimerRunning && this.maxRecTimerId!=null) {\r\n window.clearTimeout(this.maxRecTimerId);\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\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 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\r\n let ad:AudioBuffer;\r\n if(this.ac) {\r\n ad = this.ac.audioBuffer();\r\n let sessId: string | number = 0;\r\n if(this._session){\r\n sessId=this._session.sessionId;\r\n }\r\n let rf = new RecordingFile(UUID.generate(),sessId,ad);\r\n rf._startedAsDateObj=this.startedDate;\r\n if(rf._startedAsDateObj) {\r\n rf.startedDate = rf._startedAsDateObj.toString();\r\n }\r\n let apiEndPoint = '';\r\n\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\r\n let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;\r\n let recUrl: string = sessionsUrl + '/' + rf.session + '/' + RECFILE_API_CTX + '/' + rf.uuid;\r\n //\r\n //\r\n //\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 let ww = new WavWriter();\r\n ww.writeAsync(ad, (wavFile) => {\r\n rf.frames=ad.length;\r\n this.displayRecFile=rf;\r\n this.recorderCombiPane.push(rf);\r\n this.postRecordingMultipart(wavFile, rf.uuid,rf.session,rf._startedAsDateObj,recUrl);\r\n this.processingRecording=false;\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n // }\r\n }\r\n\r\n // check complete session\r\n let complete = true;\r\n\r\n let autoStart = (this.status === Status.STOPPING_STOP);\r\n this.status = Status.IDLE;\r\n let startNext=false;\r\n\r\n this.navigationDisabled = false;\r\n this.updateNavigationActions();\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 postRecordingMultipart(wavFile: Uint8Array, uuid:string|null,sessionId:string|number|null,startedDate:Date|null|undefined,recUrl: string) {\r\n let wavBlob = new Blob([wavFile], {type: 'audio/wav'});\r\n\r\n let fd=new FormData();\r\n if(uuid) {\r\n fd.set('uuid', uuid);\r\n }\r\n if(sessionId!==null) {\r\n fd.set('sessionId', sessionId.toString());\r\n }\r\n if(startedDate){\r\n fd.set('startedDate',startedDate.toJSON());\r\n }\r\n fd.set('audio',wavBlob);\r\n let ul = new Upload(fd, recUrl);\r\n this.uploader.queueUpload(ul);\r\n }\r\n\r\n stop() {\r\n if(this.ac) {\r\n this.ac.close();\r\n }\r\n }\r\n\r\n private updateControlPlaybackPosition() {\r\n if (this._controlAudioPlayer.playPositionFrames) {\r\n this.recorderCombiPane.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 if(!this.destroyed) {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'app-audiorecorder-comp',\r\n providers: [SessionService],\r\n template: `\r\n <app-audiorecorder [projectName]=\"_project?.name\" [dataSaved]=\"dataSaved\"></app-audiorecorder>\r\n `,\r\n styles: [`:host{\r\n flex: 2;\r\n display: flex;\r\n height: 100%;\r\n flex-direction: column;\r\n min-height:0;\r\n\r\n }`]\r\n\r\n})\r\nexport class AudioRecorderComponent extends RecorderComponent implements OnInit,OnDestroy,AfterViewInit,ReadyStateProvider {\r\n\r\n mode!:Mode;\r\n controlAudioPlayer!:AudioPlayer;\r\n audio:any;\r\n\r\n _project:Project|undefined;\r\n sessionId!: string;\r\n session!:Session;\r\n\r\n @ViewChild(AudioRecorder, { static: true }) ar!:AudioRecorder;\r\n\r\n constructor(protected injector:Injector,private route: ActivatedRoute,\r\n private router: Router,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n private sessionService:SessionService,\r\n private projectService:ProjectService,\r\n private recFilesService:RecordingService,\r\n protected uploader:SpeechRecorderUploader\r\n ) {\r\n super(uploader);\r\n }\r\n\r\n ngOnInit() {\r\n //super.ngOnInit();\r\n let audioContext = AudioContextProvider.audioContextInstance();\r\n if(audioContext) {\r\n this.controlAudioPlayer = new AudioPlayer(audioContext,this.ar);\r\n }\r\n this.ar.controlAudioPlayer=this.controlAudioPlayer;\r\n\r\n //TODO Duplicate code in SpeechRecorderComponent\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 }\r\n\r\n ngAfterViewInit() {\r\n this.uploader.listener = (ue) => {\r\n this.uploadUpdate(ue);\r\n }\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 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 ngOnDestroy() {\r\n //super.ngOnDestroy();\r\n }\r\n\r\n fetchSession(sessionId:string){\r\n\r\n let sessObs= this.sessionService.sessionObserver(sessionId);\r\n\r\n if(sessObs) {\r\n sessObs.subscribe({\r\n next:(sess) => {\r\n this.ar.statusAlertType='info';\r\n this.ar.statusMsg = 'Received session info.';\r\n this.ar.statusWaiting=false;\r\n this.session=sess;\r\n this.ar.session=sess;\r\n if (sess.project) {\r\n //console.debug(\"Session associated project: \"+sess.project)\r\n this.projectService.projectObservable(sess.project).subscribe({\r\n next:(project)=>{\r\n this.ar.project=project;\r\n this.ar.fetchRecordings(sess);\r\n },error:(reason) =>{\r\n this.ar.statusMsg=reason;\r\n this.ar.statusAlertType='error';\r\n this.ar.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 }\r\n },\r\n error:(reason) => {\r\n this.ar.statusMsg = reason;\r\n this.ar.statusAlertType = 'error';\r\n this.ar.statusWaiting=false;\r\n console.error(\"Error fetching session \" + reason)\r\n }});\r\n }\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.ar.uploadStatus = 'warn'\r\n } else {\r\n if (percentUpl < 50) {\r\n this.ar.uploadStatus = 'accent'\r\n } else {\r\n this.ar.uploadStatus = 'success'\r\n }\r\n this.ar.uploadProgress = percentUpl;\r\n }\r\n\r\n this.changeDetectorRef.detectChanges()\r\n }\r\n\r\n\r\n ready():boolean{\r\n return this.dataSaved && !this.ar.isActive()\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\nimport {AudioRecorder, AudioRecorderComponent} from \"./speechrecorder/session/audiorecorder\";\r\nimport {RecordingList} from \"./speechrecorder/session/recording_list\";\r\nimport {RecorderCombiPane} from \"./speechrecorder/session/recorder_combi_pane\";\r\n\r\n\r\n\r\nexport const SPR_ROUTES: Routes = [\r\n { path: 'spr/session/:id', component: SpeechrecorderngComponent },\r\n { path: 'recorder/session/:id', component: AudioRecorderComponent},\r\n { path: 'recorder', component: AudioRecorderComponent},\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, AudioRecorder,SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent,AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent,RecordingList,RecorderCombiPane,AudioRecorder],\r\n exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar,AudioRecorder],\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\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.24.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\nexport {ReadyStateProvider} from \"./lib/recorder_component\"\r\nexport {AudioClip,Selection} from './lib/audio/persistor'\r\nexport {WavWriter} from './lib/audio/impl/wavwriter'\r\nexport {RecorderComponent} from './lib/recorder_component'\r\nexport {AudioPlayer, AudioPlayerListener, AudioPlayerEvent, EventType} from './lib/audio/playback/player'\r\nexport {AudioRecorder,AudioRecorderComponent} from './lib/speechrecorder/session/audiorecorder'\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 {SprRecordingFile} 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":["Browser","Platform","CfgPlatform","UploadStatus","i1.AudioSignal","i2.Sonagram","i1.AudioClipUIContainer","i1","i2","i2.AudioDisplayScrollPane","i3.AudioDisplayControl","i3.ScrollIntoViewDirective","i1.ProjectService","i2.SimpleTrafficLight","i3.Progress","i4.AudioDisplay","i5","i3","Item","DEFAULT_WARN_DB_LEVEL","MIN_DB_LEVEL","i6","i7","i5.LevelBar","i5.WarningBar","i6.Prompting","i8.LevelBar","i9.RecordingItemControls","i10.UploadStatus","i10.ReadyStateIndicator","i10.StatusDisplay","i10.TransportPanel","i11","i12","i13","PlaybackEventType","i2.SessionService","i3.ProjectService","i4.ScriptService","i5.RecordingService","i6.SpeechRecorderUploader","i7.SessionManager","i4","i1.RecordingFileService","i2.RecordingService","i3.SessionService","i6.AudioDisplayScrollPane","i7.RecordingFileMetaComponent","i8.AudioDisplayControl","i9.RecordingFileNaviComponent","i7.AudioDisplayScrollPane","i8.RecordingFileMetaComponent","i9.AudioDisplayControl","i10.RecordingFileNaviComponent","i5.ScrollIntoViewDirective","i1.RecordingList","i2.AudioDisplay","i7.WarningBar","i8.RecorderCombiPane","i9.LevelBar","i10.RecordingItemControls","i11.UploadStatus","i11.ReadyStateIndicator","i11.StatusDisplay","i14","i15","i16","i4.SessionService"],"mappings":"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"}
|