(function(context,$) { "use strict"; context.JK = context.JK || {}; context.JK.FakeJamClient = function(app, p2pMessageFactory) { var ChannelGroupIds = context.JK.ChannelGroupIds var logger = context.JK.logger; logger.info("*** Fake JamClient instance initialized. ***"); // Change this to false if you want to see FTUE with fake jam client var ftueStatus = true; var eventCallbackName = ''; var alertCallbackName = ''; var eventCallbackRate = 1000; var vuValue = -70; var vuChange = 10; var callbackTimer = null; var _mix = -30; var device_id = -1; var latencyCallback = null; var frameSize = 2.5; var fakeJamClientRecordings = null; var p2pCallbacks = null; var videoShared = false; var metronomeActive=false; var metronomeBPM=false; var metronomeSound=false; var metronomeMeter=0; var backingTrackPath = ""; var backingTrackLoop = false; var simulateNoInputs = false; function dbg(msg) { logger.debug('FakeJamClient: ' + msg); } // Bummer that javascript doesn't have much in the way of reflection. // arguments.callee.name would probably do what we want, but it's deprecated // and not allowed when using "strict" // (Wishing I could write a single function which debug logs the name of the // current function and a JSON stringify of the arguments). function OpenSystemBrowser(href) { dbg("OpenSystemBrowser('" + href + "')"); context.window.open(href); } function RestartApplication() {} function ShutdownApplication() {} function FTUEPageEnter() {} function FTUEPageLeave() {} function FTUECancel() {} function FTUEGetMusicProfileName() { if(simulateNoInputs) { return "System Default (Playback Only)" } else { return "FTUEAttempt-1" } } function FTUESetMusicProfileName() { } function FTUESetPreferredMixerSampleRate() {} function FTUESetPreferredOutputSampleRate(){ } function FTUESetPreferredChatSampleRate() {} function FTUEgetInputDeviceSampleRate() { return 44100; } function FTUEgetOutputDeviceSampleRate() { return 44100; } function FTUESelectVideoCaptureDevice(device, settings) { } function FTUESetVideoEncodeResolution(resolution) { } function FTUEGetVideoCaptureDeviceNames() { return ["Built-in Webcam HD"] } function FTUECurrentSelectedVideoDevice() { return {"xy323ss": "Built-in Webcam HD"} } function FTUEGetAvailableEncodeVideoResolutions() { return { 1: "1024x768", 2: "800x600" } } function FTUEGetVideoCaptureDeviceCapabilities() { return {} } function isSessVideoShared() { return videoShared; } function SessStopVideoSharing() { videoShared=false; } function SessStartVideoSharing(bitrate) { if (!bitrate || typeof(bitrate)=="undefined") { bitrate = 0 } videoShared=true; } function FTUEGetInputLatency() { dbg("FTUEGetInputLatency"); return 2; } function FTUESetInputLatency(latency) { dbg("FTUESetInputLatency:" + latency); } function FTUEGetOutputLatency() { dbg("FTUEGetOutputLatency"); return 2; } function FTUESetOutputLatency(latency) { dbg("FTUESetOutputLatency:" + latency); } function FTUEGetVolumeRanges () { dbg("FTUEGetVolumeRanges"); return { input_maximum: 20, input_minimum: -80, output_maximum: 20, output_minimum: -80 }; } function FTUEHasControlPanel() { dbg("FTUEHasControlPanel"); return true; } function FTUEGetFrameSize(newSize) { dbg("FTUEGetFrameSize"); return frameSize; } function FTUESetFrameSize(newSize) { dbg("FTUESetFrameSize:" + newSize); // one of 2.5, 5 or 10 frameSize = newSize; } function FTUEOpenControlPanel() { dbg("FTUEOpenControlPanel"); context.alert("Simulated ASIO Dialog"); } function FTUEInit() { dbg("FTUEInit"); } function FTUERefreshDevices() { dbg("FTUERefreshDevices()"); } function FTUESave(b) { dbg("FTUESave(" + b + ")"); return {}; } function FTUEGetStatus() { return ftueStatus; } function FTUESetStatus(b) { ftueStatus = b; } function FTUESetMusicDevice(id) { dbg("FTUESetMusicDevice"); } function FTUEGetAudioDevices() { return {"devices":[{"display_name":"Built-in","guid":"Built-in","input_count":1,"name":"Built-in","output_count":1,"port_audio_name":"Built-in"},{"display_name":"JamKazam Virtual Monitor","guid":"JamKazam Virtual Monitor","input_count":0,"name":"JamKazam Virtual Monitor","output_count":1,"port_audio_name":"JamKazam Virtual Monitor"}]} } function FTUEGetDevices() { dbg('FTUEGetMusicDevices'); return { "ASIO4ALL v2":"ASIO4ALL v2 - ASIO", "M-Audio FW ASIO":"M-AUDIO FW ASIO - ASIO" }; } function FTUEGetMusicInputs() { dbg('FTUEGetMusicInputs'); return { "i~11~MultiChannel (FWAPMulti)~0^i~11~Multichannel (FWAPMulti)~1": "Multichannel (FWAPMulti) - Channel 1/Multichannel (FWAPMulti) - Channel 2" }; } function FTUEGetMusicOutputs() { dbg('FTUEGetMusicOutputs'); return { "o~11~Multichannel (FWAPMulti)~0^o~11~Multichannel (FWAPMulti)~1": "Multichannel (FWAPMulti) - Channel 1/Multichannel (FWAPMulti) - Channel 2" }; } function FTUEGetChatInputs() { dbg('FTUEGetChatInputs'); return { "i~11~MultiChannel (FWAPMulti)~0^i~11~Multichannel (FWAPMulti)~1": "Multichannel (FWAPMulti) - Channel 1/Multichannel (FWAPMulti) - Channel 2" }; } function FTUEGetChannels() { return { "inputs": [ { "assignment": 1, "chat": false, "device_id": "Built-in Microph", "device_type": 5, "id": "i~5~Built-in Microph~0~0~Built-in", "name": "Built-in Microph - Left", "number": 0 }, { "assignment": 0, "chat": false, "device_id": "Built-in Microph", "device_type": 5, "id": "i~5~Built-in Microph~1~0~Built-in", "name": "Built-in Microph - Right", "number": 1 } ], "outputs": [ { "assignment": -1, "chat": false, "device_id": "Built-in Output", "device_type": 5, "id": "o~5~Built-in Output~0~0~Built-in", "name": "Built-in Output - Left", "number": 0 }, { "assignment": -1, "chat": false, "device_id": "Built-in Output", "device_type": 5, "id": "o~5~Built-in Output~1~0~Built-in", "name": "Built-in Output - Right", "number": 1 } ] }; } function FTUEClearChannelAssignments(){} function FTUEClearChatInput(){} function FTUEGetAudioDevices() { return { "devices": [ { "display_name": "Built-in", "guid": "Built-in", "input_count": 1, "name": "Built-in", "output_count": 1, "port_audio_name": "Built-in" }, { "display_name": "JamKazam Virtual Monitor", "guid": "JamKazam Virtual Monitor", "input_count": 0, "name": "JamKazam Virtual Monitor", "output_count": 1, "port_audio_name": "JamKazam Virtual Monitor" } ] }; } function FTUEStartIoPerfTest() {} function FTUEGetIoPerfData() { return { "in_var" : 0.15, "out_var" : 0.25, "in_median" : 399.9, "out_median" : 400.3, "in_target" : 400, "out_target" : 400 }; } function FTUESetInputMusicDevice() { } function FTUESetOutputMusicDevice() { } function FTUEGetInputMusicDevice() { return 'Built-in'; } function FTUEGetOutputMusicDevice() { return 'Built-in'; } function FTUESetMusicInput() { dbg('FTUESetMusicInput'); } function FTUESetChatInput() { dbg('FTUESetChatInput'); } function FTUESetMusicOutput() { dbg('FTUESetMusicOutput'); } function FTUEGetInputVolume() { dbg('FTUEGetInputVolume'); return -60; } function FTUESetInputVolume() { dbg('FTUESetInputVolume'); } function FTUEGetOutputVolume() { dbg('FTUEGetOutputVolume'); return -40; } function FTUESetOutputVolume() { dbg('FTUESetOutputVolume'); } function FTUEGetChatInputVolume() { dbg('FTUEGetChatInputVolume'); return -10; } function FTUESetChatInputVolume() { dbg('FTUESetChatInputVolume'); } function FTUERegisterVUCallbacks() { dbg('FTUERegisterVUCallbacks'); } function FTUERegisterLatencyCallback(functionName) { dbg('FTUERegisterLatencyCallback'); latencyCallback = functionName; } function FTUEStartLatency() { function cb() { // Change 4192 to modify latency MS results (in microseconds) eval(latencyCallback + "(10.0)"); } context.setTimeout(cb, 1000); } function FTUEGetExpectedLatency() { return {latencyknown:true, latency:5} } function FTUEGetGoodConfigurationList() { return ['default']; } function FTUEGetAllAudioConfigurations() { return ['default']; } function FTUEGetGoodAudioConfigurations() { return ['default']; } function FTUEGetConfigurationDevice() { return 'Good Device'; } function FTUELoadAudioConfiguration() { return true; } function FTUEIsMusicDeviceWDM() { return false; } function FTUECreateUpdatePlayBackProfile() { return true; } function RegisterVolChangeCallBack(functionName) { dbg('RegisterVolChangeCallBack'); } function GetOS() { return 100000000; } function GetOSAsString() { return "Win32"; //return "MacOSX"; } function LatencyUpdated(map) { dbg('LatencyUpdated:' + JSON.stringify(map)); } function LeaveSession(map) { dbg('LeaveSession:' + JSON.stringify(map)); } // this is not a real bridge method; purely used by the fake jam client function RegisterP2PMessageCallbacks(callbacks) { p2pCallbacks = callbacks; } function P2PMessageReceived(from, payload) { dbg('P2PMessageReceived'); // this function is different in that the payload is a JSON ready string; // whereas a real p2p message is base64 encoded binary packaged data try { payload = JSON.parse(payload); } catch(e) { logger.warn("unable to parse payload as JSON from client %o, %o, %o", from, e, payload); } var callback = p2pCallbacks[payload.type]; if(callback) { callback(from, payload); } } function JoinSession(sessionId) {dbg('JoinSession:' + sessionId);} function ParticipantLeft(session, participant) { dbg('ParticipantLeft:' + JSON.stringify(session) + ',' + JSON.stringify(participant)); } function ParticipantJoined(session, participant) { dbg('ParticipantJoined:' + JSON.stringify(session) + ',' + JSON.stringify(participant)); } function RecordTestBegin() { dbg('RecordTestBegin'); } function RecordTestEnd() { dbg('RecordTestBegin'); } function RecordTestPlayback() { dbg('RecordTestBegin'); } function SendP2PMessage(s1,s2) { dbg('SendP2PMessage:' + s1 + ',' + s2); } function SetASIOEnabled(i1, i2, i3, i4, i5, i6) { dbg('SetASIOEnabled(' + i1 + ',' + i2 + ',' + i3 + ',' + i4 + ',' + i5 + ',' + i6 + ')'); } function SignalLatencyUpdated(client) { dbg('SignalLatencyUpdated:' + JSON.stringify(client)); } function SignalSendP2PMessage(s1,ba) { dbg('SignalSendP2PMessage:' + JSON.stringify(arguments)); } function StartPlayTest(s) { dbg('StartPlayTest' + JSON.stringify(arguments)); } function StartRecordTest(s) { dbg('StartRecordTest' + JSON.stringify(arguments)); } function StartRecording(recordingId, groupedClientTracks) { dbg('StartRecording'); fakeJamClientRecordings.StartRecording(recordingId, groupedClientTracks); } function StopPlayTest() { dbg('StopPlayTest'); } function StopRecording(recordingId, groupedTracks, errorReason, detail) { dbg('StopRecording'); fakeJamClientRecordings.StopRecording(recordingId, groupedTracks, errorReason, detail); } function AbortRecording(recordingId, errorReason, errorDetail) { dbg('AbortRecording'); fakeJamClientRecordings.AbortRecording(recordingId, errorReason, errorDetail); } function OnTrySyncCommand(cmd) { } function GetRecordingManagerState() { return {running: false} } function TestASIOLatency(s) { dbg('TestASIOLatency' + JSON.stringify(arguments)); } function TestLatency(clientID, callbackFunctionName, timeoutCallbackName) { logger.debug("Fake JamClient: TestLatency called with client, " + clientID + " and callback function name: " + callbackFunctionName); var response = { clientID: clientID, latency: 50 }; var js = callbackFunctionName + "(" + JSON.stringify(response) + ");"; eval(js); } function IsMyNetworkWireless() { // 1=true, 0 = false, -1=unknown return 1; } function SetNetworkTestScore(numClients) { } function GetNetworkTestScore() { return 8; } function SetLatencyTestBlocked(blocked) { } function isLatencyTestBlocked() { return false; } function GetLastLatencyTestTimes() { return { initiated: 10000, requested: 10000} } function GetASIODevices() { var response =[{"device_id":0,"device_name":"Realtek High Definition Audio","device_type": 0,"interfaces":[{"interface_id":0,"interface_name":"Realtek HDA SPDIF Out","pins":[{"is_input":false,"pin_id":0,"pin_name":"PC Speaker"}]},{"interface_id":1,"interface_name":"Realtek HD Audio rear output","pins":[{"is_input":false,"pin_id":0,"pin_name":"PC Speaker"}]},{"interface_id":2,"interface_name":"Realtek HD Audio Mic input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"}]},{"interface_id":3,"interface_name":"Realtek HD Audio Line input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"}]},{"interface_id":4,"interface_name":"Realtek HD Digital input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Capture"}]},{"interface_id":5,"interface_name":"Realtek HD Audio Stereo input","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"}]}],"wavert_supported":false},{"device_id":1,"device_name":"M-Audio FW Audiophile","device_type": 1,"interfaces":[{"interface_id":0,"interface_name":"FWAPMulti","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"},{"is_input":true,"pin_id":1,"pin_name":"Input"}]},{"interface_id":1,"interface_name":"FW AP 1/2","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"},{"is_input":true,"pin_id":1,"pin_name":"Input"}]},{"interface_id":2,"interface_name":"FW AP SPDIF","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"},{"is_input":true,"pin_id":1,"pin_name":"Input"}]},{"interface_id":3,"interface_name":"FW AP 3/4","pins":[{"is_input":false,"pin_id":0,"pin_name":"Output"}]}],"wavert_supported":false},{"device_id":2,"device_name":"Virtual Audio Cable","device_type": 2,"interfaces":[{"interface_id":0,"interface_name":"Virtual Cable 2","pins":[{"is_input":true,"pin_id":0,"pin_name":"Capture"},{"is_input":false,"pin_id":1,"pin_name":"Output"}]},{"interface_id":1,"interface_name":"Virtual Cable 1","pins":[{"is_input":true,"pin_id":0,"pin_name":"Capture"},{"is_input":false,"pin_id":1,"pin_name":"Output"}]}],"wavert_supported":false},{"device_id":3,"device_name":"WebCamDV WDM Audio Capture","device_type": 3,"interfaces":[{"interface_id":0,"interface_name":"WebCamDV Audio","pins":[{"is_input":true,"pin_id":0,"pin_name":"Recording Control"},{"is_input":false,"pin_id":1,"pin_name":"Volume Control"}]}],"wavert_supported":false}]; return response; } // Session Functions function SessionCurrrentJamTrackPlayPosMs() { return 0; } function SessionGetJamTracksPlayDurationMs() { return 60000; } function SessionAddTrack() {} function SessionAudioResync() { logger.debug("Fake JamClient: SessionAudioResync()"); } function SessionGetAllControlState(isMasterOrPersonal) { var mixerIds = SessionGetIDs() return SessionGetControlState(mixerIds, isMasterOrPersonal); } function SessionGetControlState(mixerIds, isMasterOrPersonal) { dbg("SessionGetControlState"); var groups = [ChannelGroupIds.MasterGroup, ChannelGroupIds.MonitorGroup, ChannelGroupIds.AudioInputMusicGroup, ChannelGroupIds.AudioInputChatGroup, ChannelGroupIds.AudioInputChatGroup, ChannelGroupIds.UserMusicInputGroup, ChannelGroupIds.UserChatInputGroup, ChannelGroupIds.PeerMediaTrackGroup, ChannelGroupIds.JamTrackGroup, ChannelGroupIds.MetronomeGroup]; var names = [ "FWAPMulti", "FWAPMulti", "FWAPMulti", "FWAPMulti", "", "", "", "", "", "" ]; var media_types = [ "Master", "Monitor", "AudioInputMusic", "AudioInputChat", "StreamOutMusic", "UserMusicInput", "PeerAudioInputMusic", "PeerMediaTrack", "JamTrack", "MetronomeTrack" ] var clientIds = [ "", "", "", "", "3933ebec-913b-43ab-a4d3-f21dc5f8955b", "", "", "", "", "" ]; var response = []; for (var i=0; i 10 || vuValue < -70) { vuChange = vuChange * -1; } } function SetVURefreshRate(rateMS) { eventCallbackRate = rateMS; if (callbackTimer) { context.clearInterval(callbackTimer); } if (eventCallbackName) { callbackTimer = context.setInterval(doCallbacks, eventCallbackRate); } } // Track Functions // Returns a list of objects representing all available audio devices and // pins on the current system. On my windows box, I get 38 objects back. // First couple examples included here. Note that the list tends to come // back with all of the left inputs, then all the right inputs, then all // the left outputs, then all the right outputs. function TrackGetChannels() { // Real example: /* { device_id: "1394\\M-Audio&FW_Audiophile", full_id: "i~1~\\\\?\\1394#m-audio&fw_audiophile#d4eb0700036c0d00#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\\fwap_12", id: "\\\\?\\1394#m-audio&fw_audiophile#d4eb0700036c0d00#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\\fwap_12", input: true, left: true, name: "M-Audio FW Audiophile: FW AP 1/2 - Left" }, */ // But we'll just build a list of names and fake it var devices = [ "M-Audio FW Audiophile: FW AP 1/2" //"M-Audio FW Audiophile: FW Multi 1/2", //"M-Audio FW Audiophile: FW SPDIF 1/2", //"Realtek High Definition Audio: Realtek HD Digital", // "Realtek High Definition Audio: Realtek HD Line", // "Realtek High Definition Audio: Realtek HD Audio Mic", // "Realtek High Definition Audio: Realtek HD Audio Stereo", //"WebCamDV WDM Audio Capture: WebCamDV Audio" ]; var suffixes = [ " - Left", " - Right", " - Left", " - Right"]; var lefts = [true, false, true, false]; var inputs = [true, true, false, false]; var types = ["music", "non-music", "music", "non-music"]; var response = []; var name, o, i, j; for (j=0; j<4; j++) { for (i=0; i 0.5 } } function getPeerState(clientId) { return { ntp_stable: Math.random() > 0.5 } } // stun function NetworkTestResult() { return {remote_udp_blocked: false} } // Client Update Functions function IsAppInWritableVolume() { return true; } function ClientUpdateVersion() { return "Compiled 1.2.3"; } function ClientUpdateStartDownload(url, progressCallback, successCallback, failureCallback) { // simulate a bunch of download callbacks var count = 0; var max = 100; var bytesReceived = 0; var bytesTotal = 10000; function fire() { count++; context.setTimeout(function() { bytesReceived = ( count / max ) * bytesTotal; context.JK.ClientUpdate.DownloadProgressCallback(bytesReceived, bytesTotal, 0, 0); if(count < max) { fire(); } else { context.JK.ClientUpdate.DownloadFailureCallback("/some/path/here"); } }, 50); } fire(); } function getBackingTrackList() { return {backing_tracks: [ {name:"This is a really long name for a song dude.mp3", size:4283}, {name:"foo.mp3",size:325783838} ]}; } function ClientUpdateStartUpdate(path, successCallback, failureCallback) {} // ------------------------------- // fake jam client methods // not a part of the actual bridge // ------------------------------- function SetFakeRecordingImpl(fakeRecordingsImpl) { fakeJamClientRecordings = fakeRecordingsImpl; } function TestNetworkPktBwRate(targetClientId, successCallback, timeoutCallback, testType, duration, numClients, payloadSize) { var progress = {progress:true, upthroughput:.95, downthroughput:.95, upjitter: 2.3, downjitter: 2.3 } var count = 0; var interval = setInterval(function() { eval(successCallback + "(" + JSON.stringify(progress) + ");"); if(progress.upthroughput < 1) { progress.upthroughput += .05; } if(progress.downthroughput < 1) { progress.downthroughput += .05; } count++; if(count == duration) { clearInterval(interval); delete progress['progress'] progress.pass = true; eval(successCallback + "(" + JSON.stringify(progress) + ");"); } }, 1000); } function StopNetworkTest(targetClientId) {} function OnLoggedIn(userId, sessionToken) {} function OnLoggedOut() {} function UserAttention(option) {} function IsFrontendVisible() {return true;} function LastUsedProfileName() {return 'default'}; function SetLastUsedProfileName(name) {return true;}; function log(level, message) { console.log("beep : " + message) } function getOperatingMode() { if (location.pathname == '/latency_tester') { return 'server'; } else { return 'client'; } } // passed an array of recording objects from the server function GetLocalRecordingState(recordings) { var result = { recordings:[]}; var recordingResults = result.recordings; var possibleAnswers = ['HQ', 'RT', 'MISSING', 'PARTIALLY_MISSING']; $.each(recordings, function(i, recording) { // just make up a random yes-hq/yes-rt/missing answer var recordingResult = {}; recordingResult['aggregate_state'] = possibleAnswers[Math.floor((Math.random()*4))]; recordingResults.push(recordingResult); }) return result; } function OpenRecording(claimedRecording) { return {success: true} } function PreviewRecording(claimedRecording) { return OpenRecording(claimedRecording); } function CloseRecording() {} function ClosePreviewRecording() {CloseRecording();} function OnDownloadAvailable() {} function SaveToClipboard(text) {} function IsNativeClient() { /* must always return false in all scenarios due to not ruin scoring !*/ return false; } function IsAudioStarted() { logger.debug("FakeJamClient: IsAudioStarted"); return false; } function StopAudio() {logger.debug("FakeJamClient: StopAudio"); } function ResetPageCounters() {logger.debug("FakeJamClient: ResetPageCounters"); } function ReloadAudioSystem(leaveRunning, loadLastProfile, reinitAssignments) {logger.debug("FakeJamClient: ReloadAudioSystem"); return {};} function SessionLiveBroadcastStart(host, port, mount, sourceUser, sourcePass, preferredClientId, bitrate) { logger.debug("SessionLiveBroadcastStart requested"); } function SessionLiveBroadcastStop() { logger.debug("SessionLiveBroadcastStop requested"); } function RegisterQuitCallback() { } function LeaveSessionAndMinimize() {} function SetAutoStart() {} function GetAutoStart() { return true; } function SaveSettings() {} // Javascript Bridge seems to camel-case // Set the instance functions: this.AbortRecording = AbortRecording; this.OnTrySyncCommand = OnTrySyncCommand; this.GetRecordingManagerState = GetRecordingManagerState; this.GetASIODevices = GetASIODevices; this.GetOS = GetOS; this.GetOSAsString = GetOSAsString; this.JoinSession = JoinSession; this.LatencyUpdated = LatencyUpdated; this.LeaveSession = LeaveSession; this.P2PMessageReceived = P2PMessageReceived; this.ParticipantJoined = ParticipantJoined; this.ParticipantLeft = ParticipantLeft; this.RecordTestBegin = RecordTestBegin; this.RecordTestEnd = RecordTestEnd; this.RecordTestPlayback = RecordTestPlayback; this.RegisterVolChangeCallBack = RegisterVolChangeCallBack; this.SendP2PMessage = SendP2PMessage; this.SetASIOEnabled = SetASIOEnabled; this.SignalLatencyUpdated = SignalLatencyUpdated; this.SignalSendP2PMessage = SignalSendP2PMessage; this.StartPlayTest = StartPlayTest; this.StartRecordTest = StartRecordTest; this.StartRecording = StartRecording; this.StopPlayTest = StopPlayTest; this.StopRecording = StopRecording; this.TestASIOLatency = TestASIOLatency; this.TestLatency = TestLatency; this.IsMyNetworkWireless = IsMyNetworkWireless; this.SetNetworkTestScore = SetNetworkTestScore; this.GetNetworkTestScore = GetNetworkTestScore; this.SetLatencyTestBlocked = SetLatencyTestBlocked; this.isLatencyTestBlocked = isLatencyTestBlocked; this.GetLastLatencyTestTimes = GetLastLatencyTestTimes; this.RegisterQuitCallback = RegisterQuitCallback; this.LeaveSessionAndMinimize = LeaveSessionAndMinimize; this.GetAutoStart = GetAutoStart; this.SetAutoStart = SetAutoStart; this.connected = true; // FTUE (round 3) this.FTUESetInputMusicDevice = FTUESetInputMusicDevice; this.FTUESetOutputMusicDevice = FTUESetOutputMusicDevice; this.FTUEGetInputMusicDevice = FTUEGetInputMusicDevice; this.FTUEGetOutputMusicDevice = FTUEGetOutputMusicDevice; this.FTUEGetChatInputVolume = FTUEGetChatInputVolume; this.FTUEGetChatInputs = FTUEGetChatInputs; this.FTUEGetChannels = FTUEGetChannels; this.FTUEGetAudioDevices = FTUEGetAudioDevices; this.FTUEStartIoPerfTest = FTUEStartIoPerfTest; this.FTUEGetIoPerfData = FTUEGetIoPerfData; this.FTUEGetDevices = FTUEGetDevices; this.FTUEGetFrameSize = FTUEGetFrameSize; this.FTUECancel = FTUECancel; this.FTUEPageEnter = FTUEPageEnter; this.FTUEPageLeave = FTUEPageLeave; this.FTUEGetMusicProfileName = FTUEGetMusicProfileName; this.FTUESetMusicProfileName = FTUESetMusicProfileName; this.FTUESetPreferredMixerSampleRate = FTUESetPreferredMixerSampleRate; this.FTUESetPreferredOutputSampleRate = FTUESetPreferredOutputSampleRate; this.FTUESetPreferredChatSampleRate = FTUESetPreferredChatSampleRate; this.FTUEgetInputDeviceSampleRate = FTUEgetInputDeviceSampleRate; this.FTUEgetOutputDeviceSampleRate = FTUEgetOutputDeviceSampleRate; this.FTUEGetInputLatency = FTUEGetInputLatency; this.FTUEGetInputVolume = FTUEGetInputVolume; this.FTUEGetMusicInputs = FTUEGetMusicInputs; this.FTUEGetMusicOutputs = FTUEGetMusicOutputs; this.FTUEGetOutputLatency = FTUEGetOutputLatency; this.FTUEGetOutputVolume = FTUEGetOutputVolume; this.FTUEGetStatus = FTUEGetStatus; this.FTUEGetVolumeRanges = FTUEGetVolumeRanges; this.FTUEHasControlPanel = FTUEHasControlPanel; this.FTUEInit = FTUEInit; this.FTUEOpenControlPanel = FTUEOpenControlPanel; this.FTUERegisterLatencyCallback = FTUERegisterLatencyCallback; this.FTUERegisterVUCallbacks = FTUERegisterVUCallbacks; this.FTUERefreshDevices = FTUERefreshDevices; this.FTUESave = FTUESave; this.FTUESetChatInput = FTUESetChatInput; this.FTUESetChatInputVolume = FTUESetChatInputVolume; this.FTUESetInputVolume = FTUESetInputVolume; this.FTUESetFrameSize = FTUESetFrameSize; this.FTUESetInputLatency = FTUESetInputLatency; this.FTUESetMusicDevice = FTUESetMusicDevice; this.FTUESetMusicInput = FTUESetMusicInput; this.FTUESetMusicOutput = FTUESetMusicOutput; this.FTUESetOutputLatency = FTUESetOutputLatency; this.FTUESetOutputVolume = FTUESetOutputVolume; this.FTUESetStatus = FTUESetStatus; this.FTUEStartLatency = FTUEStartLatency; this.FTUEGetExpectedLatency = FTUEGetExpectedLatency; this.FTUEGetGoodConfigurationList = FTUEGetGoodConfigurationList; this.FTUEGetAllAudioConfigurations = FTUEGetAllAudioConfigurations; this.FTUEGetGoodAudioConfigurations = FTUEGetGoodAudioConfigurations; this.FTUEGetConfigurationDevice = FTUEGetConfigurationDevice; this.FTUEIsMusicDeviceWDM = FTUEIsMusicDeviceWDM; this.FTUELoadAudioConfiguration = FTUELoadAudioConfiguration; this.FTUEClearChannelAssignments = FTUEClearChannelAssignments; this.FTUEClearChatInput = FTUEClearChatInput; this.FTUECreateUpdatePlayBackProfile = FTUECreateUpdatePlayBackProfile; // Session this.SessionAddTrack = SessionAddTrack; this.SessionCurrrentJamTrackPlayPosMs = SessionCurrrentJamTrackPlayPosMs; this.SessionGetJamTracksPlayDurationMs = SessionGetJamTracksPlayDurationMs; this.SessionGetControlState = SessionGetControlState; this.SessionGetAllControlState = SessionGetAllControlState; this.SessionSetUserName = SessionSetUserName; this.SessionGetIDs = SessionGetIDs; this.RegisterRecordingManagerCallbacks = RegisterRecordingManagerCallbacks; this.RegisterRecordingCallbacks = RegisterRecordingCallbacks; this.SessionRegisterCallback = SessionRegisterCallback; this.SessionSetAlertCallback = SessionSetAlertCallback; this.SessionSetControlState = SessionSetControlState; this.SessionSetRecordingFilename = SessionSetRecordingFilename; this.SessionSetRecordingFolder = SessionSetRecordingFolder; this.SessionStartPlay = SessionStartPlay; this.SessionStartRecording = SessionStartRecording; this.SessionStopPlay = SessionStopPlay; this.SessionAddPlayTrack = SessionAddPlayTrack; this.SessionRemoveAllPlayTracks = SessionRemoveAllPlayTracks; this.SessionStopRecording = SessionStopRecording; this.isSessionTrackPlaying = isSessionTrackPlaying; this.SessionCurrrentPlayPosMs = SessionCurrrentPlayPosMs; this.SessionGetTracksPlayDurationMs = SessionGetTracksPlayDurationMs; this.SessionPageEnter = SessionPageEnter; this.SessionPageLeave = SessionPageLeave; this.SetMixerMode = SetMixerMode; this.SetVURefreshRate = SetVURefreshRate; this.SessionGetMasterLocalMix = SessionGetMasterLocalMix; this.SessionSetMasterLocalMix = SessionSetMasterLocalMix; this.SessionGetDeviceLatency = SessionGetDeviceLatency; this.SessionAudioResync = SessionAudioResync; // Track this.TrackGetChannels = TrackGetChannels; this.TrackSetAssignment = TrackSetAssignment; this.TrackGetAssignment = TrackGetAssignment; this.TrackSetCount = TrackSetCount; this.TrackGetCount = TrackGetCount; this.TrackSave = TrackSave; this.TrackLoadAssignments = TrackLoadAssignments; this.TrackSetInstrument = TrackSetInstrument; this.TrackGetInstrument = TrackGetInstrument; this.TrackSaveAssignments = TrackSaveAssignments; this.TrackGetDevices = TrackGetDevices; this.TrackDeleteProfile = TrackDeleteProfile; this.TrackGetMusicDeviceID = TrackGetMusicDeviceID; this.TrackSetMusicDevice = TrackSetMusicDevice; this.TrackGetMusicDeviceNames = TrackGetMusicDeviceNames; this.TrackHasControlPanel = TrackHasControlPanel; this.TrackOpenControlPanel = TrackOpenControlPanel; this.TrackIsMusicDeviceType = TrackIsMusicDeviceType; this.TrackGetChatEnable = TrackGetChatEnable; this.TrackSetChatEnable = TrackSetChatEnable; this.TrackGetChatUsesMusic = TrackGetChatUsesMusic; this.TrackSetChatUsesMusic = TrackSetChatUsesMusic; this.JamTrackStopPlay = JamTrackStopPlay; this.JamTrackPlay = JamTrackPlay; this.JamTrackIsPlayable = JamTrackIsPlayable; this.JamTrackGetTrackDetail = JamTrackGetTrackDetail; this.JamTrackKeysRequest = JamTrackKeysRequest; this.JamTrackDownload = JamTrackDownload; // Scoring Knobs this.GetScoreWorkTimingInterval = GetScoreWorkTimingInterval; this.SetScoreWorkTimingInterval = SetScoreWorkTimingInterval; // Backing tracks: this.getBackingTrackList = getBackingTrackList; this.SessionCloseBackingTrackFile = SessionCloseBackingTrackFile; this.SessionOpenBackingTrackFile = SessionOpenBackingTrackFile; this.SessionSetBackingTrackFileLoop = SessionSetBackingTrackFileLoop; // Metronome: this.SessionCloseMetronome = SessionCloseMetronome; this.SessionOpenMetronome = SessionOpenMetronome; this.SessionSetMetronome = SessionSetMetronome; this.setMetronomeOpenCallback = setMetronomeOpenCallback; this.getMyNetworkState = getMyNetworkState; this.getPeerState = getPeerState; // Client Update this.IsAppInWritableVolume = IsAppInWritableVolume; this.ClientUpdateVersion = ClientUpdateVersion; this.ClientUpdateStartDownload = ClientUpdateStartDownload; this.ClientUpdateStartUpdate = ClientUpdateStartUpdate; this.OpenSystemBrowser = OpenSystemBrowser; this.RestartApplication = RestartApplication; this.ShutdownApplication = ShutdownApplication; // Websocket/Auth sessions this.OnLoggedIn = OnLoggedIn; this.OnLoggedOut = OnLoggedOut; this.UserAttention = UserAttention; this.IsFrontendVisible = IsFrontendVisible; this.LastUsedProfileName = LastUsedProfileName; this.SetLastUsedProfileName = SetLastUsedProfileName; // Recording Playback this.GetLocalRecordingState = GetLocalRecordingState; this.OpenRecording = OpenRecording; this.CloseRecording = CloseRecording; this.PreviewRecording = PreviewRecording; this.ClosePreviewRecording = ClosePreviewRecording; this.OnDownloadAvailable = OnDownloadAvailable; // Video functionality: this.FTUESelectVideoCaptureDevice = FTUESelectVideoCaptureDevice this.FTUESetVideoEncodeResolution = FTUESetVideoEncodeResolution; this.FTUEGetVideoCaptureDeviceNames = FTUEGetVideoCaptureDeviceNames; this.FTUECurrentSelectedVideoDevice = FTUECurrentSelectedVideoDevice; this.FTUEGetAvailableEncodeVideoResolutions = FTUEGetAvailableEncodeVideoResolutions; this.FTUEGetVideoCaptureDeviceCapabilities = FTUEGetVideoCaptureDeviceCapabilities; this.isSessVideoShared = isSessVideoShared; this.SessStopVideoSharing = SessStopVideoSharing; this.SessStartVideoSharing = SessStartVideoSharing; // Clipboard this.SaveToClipboard = SaveToClipboard; // Capabilities this.IsNativeClient = IsNativeClient; // Audio this.IsAudioStarted = IsAudioStarted; this.StopAudio = StopAudio; this.ResetPageCounters = ResetPageCounters; this.ReloadAudioSystem = ReloadAudioSystem; // Broadcasting this.SessionLiveBroadcastStart = SessionLiveBroadcastStart; this.SessionLiveBroadcastStop = SessionLiveBroadcastStop; this.SessionSetConnectionStatusRefreshRate = SessionSetConnectionStatusRefreshRate; // fake calls; not a part of the actual jam client this.RegisterP2PMessageCallbacks = RegisterP2PMessageCallbacks; this.SetFakeRecordingImpl = SetFakeRecordingImpl; // network test this.TestNetworkPktBwRate = TestNetworkPktBwRate; this.StopNetworkTest = StopNetworkTest; this.log = log; this.getOperatingMode = getOperatingMode; this.clientID = "devtester"; }; })(window,jQuery);