Initial commit
This commit is contained in:
111
stores/device.ts
Normal file
111
stores/device.ts
Normal file
@@ -0,0 +1,111 @@
|
||||
// stores/devices.ts
|
||||
import { defineStore } from 'pinia'
|
||||
import { type Device } from '@rnbo/js'
|
||||
import { useAudioStore } from './audio'
|
||||
import { createRNBODevice } from '~/lib/AudioFunctions'
|
||||
import patcher from '~/assets/patches/1.3.1_versions/export/js/LAF-Controll-Values_Simple_Band1000.rnbopat.export.json'
|
||||
import noisePatcher from '~/assets/patches/1.3.1_versions/nomusicPatch/export/js/ASM_Vers_4in2out_48kHz_NoMusik.rnbopat.export.json'
|
||||
import passPatcher from '~/assets/patches/1.3.1_versions/passthrough/passthrough_Stereo.rnbopat.export.json'
|
||||
import controlValuesPatcher from '~/assets/patches/1.3.1_versions/controlvalues/LAF-Controll-Values_Simple_Band1000.rnbopat.export.json'
|
||||
import bandPatcher from '~/assets/patches/1.3.1_versions/singleBand/adaptive_masking_controller_NoMusic.rnbopat.export.json'
|
||||
interface DeviceInfo {
|
||||
id: string;
|
||||
name: string;
|
||||
device: Device | null; // Assuming it could be an AudioWorkletNode for example
|
||||
audioNode: AudioNode | null;
|
||||
}
|
||||
export const useDevicesStore = defineStore('devices', {
|
||||
state: () => ({
|
||||
devices: new Map<string, DeviceInfo>()
|
||||
}),
|
||||
|
||||
actions: {
|
||||
async createDevice (name: string) {
|
||||
try {
|
||||
// useNuxtApp().$logger.log('Creating device')
|
||||
const context = useAudioStore().audioContext
|
||||
if (context === null) { return }
|
||||
const device = await createRNBODevice(context, patcher)
|
||||
// useNuxtApp().$logger.log('device created', { device })
|
||||
this.devices.set(name, { id: name, name, device, audioNode: device.node })
|
||||
return device
|
||||
} catch (error) {
|
||||
// useNuxtApp().$logger.error('Failed to create device:', error)
|
||||
}
|
||||
},
|
||||
async createNoiseDevice (name: string) {
|
||||
if(this.devices.has(name)) return this.devices.get(name)?.device
|
||||
try {
|
||||
// useNuxtApp().$logger.log('Creating device')
|
||||
const context = useAudioStore().audioContext
|
||||
if (context === null) { return }
|
||||
const device = await createRNBODevice(context, noisePatcher)
|
||||
// useNuxtApp().$logger.log('device created', { device })
|
||||
this.devices.set(name, { id: name, name, device, audioNode: device.node })
|
||||
return device
|
||||
} catch (error) {
|
||||
// useNuxtApp().$logger.error('Failed to create device:', error)
|
||||
}
|
||||
},
|
||||
async createPasstroughDevice (name: string) {
|
||||
if(this.devices.has(name)) return this.devices.get(name)?.device
|
||||
try {
|
||||
// useNuxtApp().$logger.log('Creating device')
|
||||
const context = useAudioStore().audioContext
|
||||
if (context === null) { return }
|
||||
const device = await createRNBODevice(context, passPatcher)
|
||||
// useNuxtApp().$logger.log('device created', { device })
|
||||
this.devices.set(name, { id: name, name, device, audioNode: device.node })
|
||||
return device
|
||||
} catch (error) {
|
||||
// useNuxtApp().$logger.error('Failed to create device:', error)
|
||||
}
|
||||
},
|
||||
async createFullBandDevice (name: string) {
|
||||
if(this.devices.has(name)) return this.devices.get(name)?.device
|
||||
try {
|
||||
// useNuxtApp().$logger.log('Creating device')
|
||||
const context = useAudioStore().audioContext
|
||||
if (context === null) { return }
|
||||
const device = await createRNBODevice(context, bandPatcher)
|
||||
// useNuxtApp().$logger.log('device created', { device })
|
||||
this.devices.set(name, { id: name, name, device, audioNode: device.node })
|
||||
return device
|
||||
} catch (error) {
|
||||
// useNuxtApp().$logger.error('Failed to create device:', error)
|
||||
}
|
||||
},
|
||||
async createControlValuesDevice (name: string, centerFrequency: number = 1000) {
|
||||
if(this.devices.has(name+centerFrequency)) return this.devices.get(name+centerFrequency)?.device
|
||||
try {
|
||||
const context = useAudioStore().audioContext
|
||||
if (context === null) { return }
|
||||
const device = await createRNBODevice(context, controlValuesPatcher)
|
||||
const param = device.parametersById.get('centerFrequency')
|
||||
param.value = centerFrequency
|
||||
this.devices.set(name+centerFrequency, { id: name+centerFrequency, name, device, audioNode: device.node })
|
||||
return device
|
||||
} catch (error) {
|
||||
useNuxtApp().$logger.error('Failed to create control values device:', error)
|
||||
}
|
||||
},
|
||||
removeDevice (id: string) {
|
||||
const deviceInfo = this.devices.get(id)
|
||||
if (deviceInfo) {
|
||||
if (deviceInfo.audioNode) {
|
||||
deviceInfo.audioNode.disconnect()
|
||||
deviceInfo.audioNode = null
|
||||
}
|
||||
this.devices.delete(id)
|
||||
}
|
||||
},
|
||||
getDevice (id: string) {
|
||||
const device = this.devices.get(id)
|
||||
return device
|
||||
},
|
||||
getDeviceAudioNode (id: string): AudioNode | null {
|
||||
const device = this.devices.get(id)
|
||||
return device ? device.audioNode : null
|
||||
}
|
||||
}
|
||||
})
|
Reference in New Issue
Block a user