featherbear / presonus-studiolive-api

Exploring the PreSonus network control protocol from a StudioLive Series III
https://featherbear.cc/presonus-studiolive-api/
46 stars 13 forks source link

Project and Scene Recall #40

Closed featherbear closed 1 year ago

featherbear commented 1 year ago
featherbear commented 1 year ago

We receive these four payloads when a scene AAAAAAA is renamed in project BBBBBBB

PS { name: 'presets/loaded_scene_title', value: 'AAAAAAA' }
PS {
  name: 'presets/loaded_scene_name',
  value: 'proj/03.BBBBBBB.proj/01.AAAAAAA.scn'
}
JM {
  id: 'RenamedPreset',
  presetFile: 'presets/proj/03.BBBBBBB.proj/01.AAAAAAA.scn',
  presetName: 'AAAAAAA',
  presetType: 'scn',
  url: 'presets'
}
JM {
  id: 'StoredPreset',
  presetFile: 'presets/proj/03.BBBBBBB.proj/01.AAAAAAA.scn',
  presetName: 'AAAAAAA',
  presetType: 'scn',
  url: 'presets'
}
featherbear commented 1 year ago

Commit 1a4d364c100e804cda8bc9ec5680bff499159c94 implements project/scene listing and setting

featherbear commented 1 year ago

We receive these four payloads when a new scene AAAAAAA is saved in project BBBBBBB

PS { name: 'presets/loaded_scene_title', value: 'AAAAAAA' }
PS {
  name: 'presets/loaded_scene_name',
  value: 'proj/03.BBBBBBB.proj/02.AAAAAAA.scn'
}
JM {
  id: 'StoredPreset',
  presetFile: 'presets/proj/03.BBBBBBB.proj/02.AAAAAAA.scn',
  presetName: 'AAAAAAA',
  presetType: 'scn',
  url: 'presets'
}
PV {
  name: 'presets/diskusage',
  value: <Buffer 3b ee 1f 3e>,
  partA: <Buffer 00 00>,
  partB: <Buffer 3b ee 1f 3e>
}
featherbear commented 1 year ago

We receive these eight payloads when a new project CCCCCCC is made

PS { name: 'presets/loaded_project_title', value: 'CCCCCCC' }
PS { name: 'presets/loaded_project_name', value: 'proj/04.CCCCCCC.proj' }
JM {
  id: 'StoredPreset',
  presetFile: 'presets/proj/04.CCCCCCC.proj',
  presetName: 'CCCCCCC',
  presetType: 'proj',
  url: 'presets'
}
PV {
  name: 'presets/diskusage',
  value: <Buffer ef e1 20 3e>,
  partA: <Buffer 00 00>,
  partB: <Buffer ef e1 20 3e>
}
PS { name: 'presets/loaded_scene_title', value: 'New Scene' }
PS {
  name: 'presets/loaded_scene_name',
  value: 'proj/04.CCCCCCC.proj/01.New Scene.scn'
}
JM {
  id: 'StoredPreset',
  presetFile: 'presets/proj/04.CCCCCCC.proj/01.New Scene.scn',
  presetName: 'New Scene',
  presetType: 'scn',
  url: 'presets'
}
PV {
  name: 'presets/diskusage',
  value: <Buffer a3 d5 21 3e>,
  partA: <Buffer 00 00>,
  partB: <Buffer a3 d5 21 3e>
}
featherbear commented 1 year ago

We receive these four payloads when a project DDDDDDD is renamed

PS { name: 'presets/loaded_project_title', value: 'DDDDDDD' }
PS { name: 'presets/loaded_project_name', value: 'proj/04.DDDDDDD.proj' }
JM {
  id: 'RenamedPreset',
  presetFile: 'presets/proj/04.DDDDDDD.proj',
  presetName: 'DDDDDDD',
  presetType: 'proj',
  url: 'presets'
}
JM {
  id: 'StoredPreset',
  presetFile: 'presets/proj/04.DDDDDDD.proj',
  presetName: 'DDDDDDD',
  presetType: 'proj',
  url: 'presets'
}
featherbear commented 1 year ago

Looks like we can listen to the JSON StoredPreset and RenamedPreset messages.

Or just pull all new projects/scenes with getProjects(true)

featherbear commented 1 year ago

I propose we should listen to both the StoredPreset / RenamedPreset messages. With a quick debounce (50ms?). A request for getProjects(true) happens at the end of the debounce

featherbear commented 1 year ago

Closing as we'll let the user handle the project scene logic themselves.

See https://github.com/featherbear/bitfocus-companion-module-presonus-studiolive/blob/7bb24d00360e3d7061829b348182de8510107651/src/index.ts#L143-L145