graphName "builtin_speaker_out" ; macros ; Uncomment the fs definition below if you want to process the graph offline ;[def fs 48000] [def numChansIn 2] [def numChansOut 4] [def numRefChans 4] [def DEVICE_BRING_UP 0] ; set this to 0 or remove any references to enable LSM post bringup ; boxes in in in telemetry out out out ref box XTC (aufx axtc) 1 1 box NFP nfnp 1 1 ; Non Finite Protection box VirtBass (aufx vben) 1 1 box Tone1 (aufx tmst) 1 1 box Norm (aufx ldnm) 1 1 box Comp (aufx mstk) 1 1 box Tone2 (aufx tmst) 1 1 box AUVolumeTaper (aufx volt) 1 1 box split split 1 2 box leftBalance dbgn 1 1 box rightBalance dbgn 1 1 box join join 2 1 box EQSplit split 1 2 box toneSplit split 1 4 box Tone3 (aufx tmst) 1 1 box toneJoin join 4 1 box EQJoinLF join 2 1 box EQJoinHF join 2 1 box freakJoin join 4 1 box ControlFreakLF (aufx cfrk) 1 1 box ControlFreakHF (aufx cfrk) 1 1 box freakSplitLF split 1 2 box freakSplitHF split 1 2 box Ramp dbgn 1 1; For ramping at start/stop to avoid pop box TelemetryDeInterleaver srlconverter 1 1 box SysIDDeadEnd dead 1 0 ; We need to add an additional attenuation of 20dB ; for bring up purposes, this is to ensure the safety ; of the speaker hardware before it is actually tuned. [if [== [DEVICE_BRING_UP] 1] { box bringUpGain dbgn 1 1 }{ box LSM (aufx lsm2) 1 1 box SysID (aufx lsid) 1 1 box telemetryDelay (aufx cdly) 1 1 }] ; format format inputTelemetryFormatFixedChannelCount8Interleaved ([fs] 8i) format inputTelemetryFormatFixedChannelCount8Deinterleaved ([fs] 8) ; wires wire in NFP ([fs] [numChansIn]) wire NFP Norm ([fs] [numChansIn]) wire Norm VirtBass ([fs] [numChansIn]) wire VirtBass Tone1 ([fs] [numChansIn]) wire Tone1 split ([fs] [numChansIn]) wire (split 0) leftBalance ([fs] 1) wire leftBalance (join 0) ([fs] 1) wire (split 1) rightBalance ([fs] 1) wire rightBalance (join 1) ([fs] 1) wire join XTC ([fs] [numChansIn]) wire XTC Tone2 ([fs] [numChansIn]) wire Tone2 AUVolumeTaper ([fs] [numChansIn]) wire AUVolumeTaper Comp ([fs] [numChansIn]) wire Comp EQSplit ([fs] [numChansIn]) wire (EQSplit 0) (toneJoin 0) ([fs] 1) ;left woofer wire (EQSplit 0) (toneJoin 2) ([fs] 1) ;left tweeter wire (EQSplit 1) (toneJoin 1) ([fs] 1) ;right woofer wire (EQSplit 1) (toneJoin 3) ([fs] 1) ;right tweeter wire toneJoin Tone3 ([fs] [numChansOut]) wire Tone3 toneSplit ([fs] [numChansOut]) wire (toneSplit 0) (EQJoinLF 0) ([fs] 1) ;left woofer wire (toneSplit 1) (EQJoinLF 1) ([fs] 1) ;right woofer wire (toneSplit 2) (EQJoinHF 0) ([fs] 1) ;left tweeter wire (toneSplit 3) (EQJoinHF 1) ([fs] 1) ;right tweeter wire EQJoinLF ControlFreakLF ([fs] 2) wire EQJoinHF ControlFreakHF ([fs] 2) wire ControlFreakLF freakSplitLF ([fs] 2) wire ControlFreakHF freakSplitHF ([fs] 2) wire (freakSplitLF 0) (freakJoin 0) ([fs] 1) ;left woofer wire (freakSplitLF 1) (freakJoin 1) ([fs] 1) ;right woofer wire (freakSplitHF 0) (freakJoin 2) ([fs] 1) ;left tweeter wire (freakSplitHF 1) (freakJoin 3) ([fs] 1) ;right tweeter wire telemetry TelemetryDeInterleaver inputTelemetryFormatFixedChannelCount8Interleaved [if [== [DEVICE_BRING_UP] 1] { wire freakJoin bringUpGain ([fs] [numChansOut]) wire bringUpGain Ramp ([fs] [numChansOut]) wire TelemetryDeInterleaver SysIDDeadEnd inputTelemetryFormatFixedChannelCount8Deinterleaved }{ wire freakJoin LSM ([fs] [numChansOut]) wire LSM Ramp ([fs] [numChansOut]) wire TelemetryDeInterleaver telemetryDelay inputTelemetryFormatFixedChannelCount8Deinterleaved wire telemetryDelay SysID inputTelemetryFormatFixedChannelCount8Deinterleaved wire SysID SysIDDeadEnd inputTelemetryFormatFixedChannelCount8Deinterleaved }] wire Ramp out ([fs] [numChansOut]) wire Ramp ref ([fs] [numRefChans]) ; graph-level parameters param mvsc 1 wireGraphParam mvsc (AUVolumeTaper 4 0 0) wireGraphParam mvsc (Tone1 3 0 0) wireGraphParam mvsc (Tone2 3 0 0) wireGraphParam mvsc (Tone3 3 0 0) param mvol 0 ;wireParam (AUVolumeTaper 100 0 0) (AULowFlow 4) ; TBD param mmut 0 wireGraphParam mmut (AUVolumeTaper 0 0 0) param rpss 0 wireGraphParam rpss (Ramp 1) param lbal 0 wireGraphParam lbal (leftBalance 0) param rbal 0 wireGraphParam rbal (rightBalance 0) [if [== [DEVICE_BRING_UP] 1] { param brgn -20.0 in ; default value of -20dB wireGraphParam brgn (bringUpGain 0 0 0) }{ ; Graph parameter 4cc definitions [def kGraphParameter_SpkMeasuredPwr mspw] [def kGraphParameter_SpkModelPwr mdpw] [def kAULoudspeakerSystemID_SpkMeasuredPwr 1073741824] [def kAULoudspeakerManagerV2_SpkModelPwr 1073741824] ;[def kAULoudspeakerManagerV2_VelocityControl 1048582] param [kGraphParameter_SpkMeasuredPwr] 0 out wireGraphParam [kGraphParameter_SpkMeasuredPwr] (SysID [kAULoudspeakerSystemID_SpkMeasuredPwr] global 0) param [kGraphParameter_SpkModelPwr] 0 out wireGraphParam [kGraphParameter_SpkModelPwr] (LSM [kAULoudspeakerManagerV2_SpkModelPwr] global 0) ; Do we need this input parameter? ;param velo 1 in ;wireGraphParam velo (LSM [kAULoudspeakerManagerV2_VelocityControl] global 0) ; Graph property connections property tdso in wireGraphProperty tdso (LSM 64005 0 0) ; SpeakerInputDataSourceOrder property spts in wireGraphProperty spts (LSM 64009 0 0) ; TransducerCalibrationCF property cpms in wireGraphProperty cpms (LSM 64008 0 0) ; CPMSPowerBudget wireProperty (SysID 6630 0 0) (LSM 6630 0 0) true ; [kAudioUnitProperty_DspLibLoudspeakerSystemIDModel] property spcl in ; unused? ;wireGraphProperty spcl (SpeakerProtect [kAUSpeakerProtectionV3Property_TransducerCalibration] 0 0) }]