some sound bug fixes

This commit is contained in:
Timur Nizamov 2025-11-16 16:01:23 +02:00
parent e12c5f2f98
commit ef3b4c363e
40 changed files with 476 additions and 322 deletions

View File

@ -28,6 +28,7 @@ public class CarDrivingRoutine : NetworkBehaviour
private EventInstance CarMovement;
private void Awake()
{
//Debug.LogError("AUDIO MANAGER:");
@ -39,6 +40,7 @@ public class CarDrivingRoutine : NetworkBehaviour
CarMovement = AudioManager.Instance.CreateInstance(FMODEvents.Instance.BoltCarSimpleDriving); //initialising the variable
CarMovement.setParameterByName("EasyBoltLogic", 0); //"Driving - 0 in FMOD"
CarMovement.set3DAttributes(FMODUnity.RuntimeUtils.To3DAttributes(gameObject)); //setting 3d attributes
}
private void Start()
{

View File

@ -123,7 +123,7 @@ public class KeyboardManager : NetworkBehaviour
void OnEnterPressed()
{
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Hover, gameObject);
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Click, gameObject);
if (_input.Length > 0)
{

View File

@ -9,7 +9,11 @@ public class FloorButtonVisualizer : MonoBehaviour
public Sprite ActiveSprite;
public bool ActiveState;
private Image buttonImage;
// Start is called before the first frame update
// --- Static tracking for selection change ---
private static FloorButtonVisualizer lastActiveButton = null;
private static bool initialized = false;
void Start()
{
buttonImage = gameObject.GetComponent<Image>();
@ -19,12 +23,20 @@ public class FloorButtonVisualizer : MonoBehaviour
{
this.ActiveState = true;
buttonImage.sprite = ActiveSprite;
//Debug.Log("Floorbutton of " + gameObject.name + " activated");
// --- Only play hover if selection actually changed ---
if (initialized && lastActiveButton != this)
{
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Hover, gameObject);
}
lastActiveButton = this;
initialized = true;
}
public void Deactivate()
{
this.ActiveState = false;
buttonImage.sprite = InactiveSprite;
//Debug.Log("Floorbutton of " + gameObject.name + " deactivated");
}
}

View File

@ -25,6 +25,9 @@ public class MenuTeleportButton : MonoBehaviour
private EventInstance TeleportingSound;
FMOD.Studio.Bus SpecialBus; //FMOD bus variable
private static MenuTeleportButton lastSelectedButton = null;
private static bool initialized = false;
private void Awake()
{
TeleportingSound = AudioManager.Instance.CreateInstance(FMODEvents.Instance.Teleport); //initialise the instance
@ -58,12 +61,19 @@ public class MenuTeleportButton : MonoBehaviour
public void SetStateSelected()
{
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Hover, gameObject);
if (button != null && HoverSprite != null)
{
button.targetGraphic.GetComponent<Image>().sprite = HoverSprite;
// --- Only play hover sound if selection actually changed ---
if (initialized && lastSelectedButton != this)
{
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Hover, gameObject);
}
lastSelectedButton = this;
initialized = true;
}
}
public void SetStateDefault()
@ -106,7 +116,7 @@ public class MenuTeleportButton : MonoBehaviour
button.interactable = false;
button.interactable = true;
StartCoroutine(MuteBusForSeconds(1.5f));
StartCoroutine(MuteBusForSeconds(2.0f));
TeleportingSound.start(); //playing 2d oneshot
}

View File

@ -14,10 +14,16 @@ public class TutorialAudioListener : MonoBehaviour
private TeleportationProvider teleportationProvider;
private float lastStepTime;
[SerializeField] private float baseStepCooldown = 0.5f; // base interval at speed = 1
private float stepCooldown;
[Header("Settings")]
[SerializeField] private float baseStepRate = 0.5f; // Step interval at joystick = 1 and slider = 1
[SerializeField] private float joystickThreshold = 0.1f; // Minimum stick movement to count as walking
private float settingsSpeedMultiplier = 1f; // From slider (1 = default)
private bool locomotionEnabled = false;
private Vector2 currentMoveVector;
private void Awake()
{
if (tutorialController == null)
@ -32,14 +38,15 @@ public class TutorialAudioListener : MonoBehaviour
turnAction = tutorialController.turnProvider.rightHandSnapTurnAction.action;
teleportationProvider = tutorialController.teleportProvider;
}
stepCooldown = baseStepCooldown;
}
private void OnEnable()
{
if (moveAction != null)
moveAction.performed += OnMovePerformed;
{
moveAction.performed += OnMoveInput;
moveAction.canceled += OnMoveCanceled;
}
if (turnAction != null)
turnAction.performed += OnTurnPerformed;
@ -57,7 +64,10 @@ public class TutorialAudioListener : MonoBehaviour
private void OnDisable()
{
if (moveAction != null)
moveAction.performed -= OnMovePerformed;
{
moveAction.performed -= OnMoveInput;
moveAction.canceled -= OnMoveCanceled;
}
if (turnAction != null)
turnAction.performed -= OnTurnPerformed;
@ -75,26 +85,48 @@ public class TutorialAudioListener : MonoBehaviour
private void HandleLocomotionToggled(bool enabled)
{
locomotionEnabled = enabled;
Debug.Log($"[TutorialAudioListener] Locomotion toggled: {enabled}");
}
private void HandleSpeedChanged(float newSpeed)
{
// Invert proportionality: faster speed = shorter step interval
float calculatedCooldown = baseStepCooldown / Mathf.Max(newSpeed, 0.01f);
// Clamp the result between 0.4 and 0.6 seconds
stepCooldown = Mathf.Clamp(calculatedCooldown, 0.3f, 0.69f);
Debug.Log($"[TutorialAudioListener] Step cooldown adjusted: {stepCooldown}");
// Slider is allowed to range normally but we clamp for stability
settingsSpeedMultiplier = Mathf.Clamp(newSpeed, 0.4f, 1.2f);
}
private void OnMovePerformed(InputAction.CallbackContext context)
private void OnMoveInput(InputAction.CallbackContext ctx)
{
currentMoveVector = ctx.ReadValue<Vector2>();
}
private void OnMoveCanceled(InputAction.CallbackContext ctx)
{
currentMoveVector = Vector2.zero;
}
private void Update()
{
TryPlayStep();
}
private void TryPlayStep()
{
if (!locomotionEnabled)
return;
if (Time.time - lastStepTime < stepCooldown)
float joystickMagnitude = currentMoveVector.magnitude;
if (joystickMagnitude < joystickThreshold)
return; // Not moving enough to walk
// --- NEW: Slider influence (very light touch) ---
float sliderInfluence = 1f + (settingsSpeedMultiplier) * 0.25f;
float effectiveMagnitude = joystickMagnitude * sliderInfluence;
// --- NEW: Step cooldown ---
float dynamicCooldown = baseStepRate / Mathf.Max(effectiveMagnitude, 0.01f);
dynamicCooldown = Mathf.Clamp(dynamicCooldown, 0.33f, 0.65f);
if (Time.time - lastStepTime < dynamicCooldown)
return;
lastStepTime = Time.time;
@ -103,13 +135,16 @@ public class TutorialAudioListener : MonoBehaviour
private void OnTurnPerformed(InputAction.CallbackContext context)
{
// If magnitude above threshold = walking don't play spin sound
if (currentMoveVector.magnitude > joystickThreshold)
return;
// Otherwise play turning sound
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.StepSpin, gameObject);
}
private void OnTeleportEnd(LocomotionSystem locomotionSystem)
{
// Optional: Uncomment if teleport should play sound
// AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Steps, gameObject);
// Optional teleport sound
}
}

View File

@ -3221,6 +3221,7 @@ GameObject:
- component: {fileID: 2567477070120516364}
- component: {fileID: 5667922335807455518}
- component: {fileID: 9130699439852735294}
- component: {fileID: 244862221083601452}
m_Layer: 5
m_Name: Level 1 button
m_TagString: Untagged
@ -3346,6 +3347,35 @@ MonoBehaviour:
InactiveSprite: {fileID: 21300000, guid: 9b9161f51c7cdb84eba98c454b3f542c, type: 3}
ActiveSprite: {fileID: 21300000, guid: 594b1f27343305e4e99551b5fb8a1b76, type: 3}
ActiveState: 0
--- !u!114 &244862221083601452
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4006117569149960393}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Delegates:
- eventID: 0
callback:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 9130699439852735294}
m_TargetAssemblyTypeName: FloorButtonVisualizer, Assembly-CSharp
m_MethodName: Activate
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!1 &4122378368372937094
GameObject:
m_ObjectHideFlags: 0
@ -3395,6 +3425,7 @@ GameObject:
- component: {fileID: 735405659653074444}
- component: {fileID: 1877344747539671532}
- component: {fileID: 2993125651756248496}
- component: {fileID: 5719623585416982853}
m_Layer: 5
m_Name: Level 2 button
m_TagString: Untagged
@ -3520,6 +3551,35 @@ MonoBehaviour:
InactiveSprite: {fileID: 21300000, guid: 28748e86c9a1f0c4694006461434eca7, type: 3}
ActiveSprite: {fileID: 21300000, guid: a84b9455a04a3ca459595ecb5810fb98, type: 3}
ActiveState: 1
--- !u!114 &5719623585416982853
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4441188026596657465}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Delegates:
- eventID: 0
callback:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 2993125651756248496}
m_TargetAssemblyTypeName: FloorButtonVisualizer, Assembly-CSharp
m_MethodName: Activate
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!1 &4552840262979230797
GameObject:
m_ObjectHideFlags: 0
@ -7700,7 +7760,9 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
tutorialController: {fileID: 8296457994299276779}
stepCooldown: 0.4
locomotionConfigurator: {fileID: 0}
baseStepRate: 0.5
joystickThreshold: 0.1
--- !u!4 &4954755430420460766 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 1894017693134941767, guid: d90913a7f0b00844a8c4482b2afc2c66,

Binary file not shown.

View File

@ -0,0 +1,164 @@
using UnityEngine;
using FMODUnity;
using FMOD.Studio;
using System.Collections;
public class FirstPersonOcclusion : MonoBehaviour
{
[Header("FMOD Event")]
[SerializeField] private EventReference SelectAudio;
private EventInstance AudioOccluded;
private EventDescription AudioDes;
private StudioListener Listener;
private PLAYBACK_STATE pb;
[Header("Occlusion Options")]
[SerializeField][Range(0f, 10f)] private float SoundOcclusionWidening = 1f;
[SerializeField][Range(0f, 10f)] private float PlayerOcclusionWidening = 1f;
[SerializeField] private LayerMask OcclusionLayer;
private bool AudioIsVirtual;
private float MaxDistance;
private float ListenerDistance;
private float lineCastHitCount = 0f;
private Color colour;
private bool initialisedExternally = false;
// ============================================================
// NEW — Optional external initialiser
// ============================================================
public void InitialiseWithInstance(EventInstance instance)
{
AudioOccluded = instance;
initialisedExternally = true;
RuntimeManager.AttachInstanceToGameObject(
AudioOccluded,
gameObject,
GetComponent<Rigidbody>()
);
AudioOccluded.getDescription(out AudioDes);
AudioDes.getMinMaxDistance(out float min, out MaxDistance);
}
// ============================================================
// ORIGINAL START — kept exactly the same unless external init used
// ============================================================
private IEnumerator Start()
{
// If already initialised, skip internal creation
if (!initialisedExternally)
{
AudioOccluded = RuntimeManager.CreateInstance(SelectAudio);
RuntimeManager.AttachInstanceToGameObject(AudioOccluded, gameObject);
AudioOccluded.start();
AudioOccluded.release();
AudioDes = RuntimeManager.GetEventDescription(SelectAudio);
AudioDes.getMinMaxDistance(out float minDistance, out MaxDistance);
}
// Find listener (kept exactly as before)
yield return new WaitUntil(() => FindObjectOfType<StudioListener>() != null);
Listener = FindObjectOfType<StudioListener>();
}
// ============================================================
// UNCHANGED core functionality
// ============================================================
private void FixedUpdate()
{
if (Listener == null) return;
AudioOccluded.isVirtual(out AudioIsVirtual);
AudioOccluded.getPlaybackState(out pb);
ListenerDistance = Vector3.Distance(transform.position, Listener.transform.position);
if (!AudioIsVirtual && pb == PLAYBACK_STATE.PLAYING && ListenerDistance <= MaxDistance)
{
OccludeBetween(transform.position, Listener.transform.position);
}
lineCastHitCount = 0f;
}
private void OccludeBetween(Vector3 sound, Vector3 listener)
{
Vector3 SoundLeft = CalculatePoint(sound, listener, SoundOcclusionWidening, true);
Vector3 SoundRight = CalculatePoint(sound, listener, SoundOcclusionWidening, false);
Vector3 ListenerLeft = CalculatePoint(listener, sound, PlayerOcclusionWidening, true);
Vector3 ListenerRight = CalculatePoint(listener, sound, PlayerOcclusionWidening, false);
Vector3 SoundAbove = new Vector3(sound.x, sound.y + SoundOcclusionWidening, sound.z);
Vector3 SoundBelow = new Vector3(sound.x, sound.y - SoundOcclusionWidening, sound.z);
Vector3 ListenerAbove = new Vector3(listener.x, listener.y + PlayerOcclusionWidening * .5f, listener.z);
Vector3 ListenerBelow = new Vector3(listener.x, listener.y - PlayerOcclusionWidening * .5f, listener.z);
CastLine(SoundLeft, ListenerLeft);
CastLine(SoundLeft, listener);
CastLine(SoundLeft, ListenerRight);
CastLine(sound, ListenerLeft);
CastLine(sound, listener);
CastLine(sound, ListenerRight);
CastLine(SoundRight, ListenerLeft);
CastLine(SoundRight, listener);
CastLine(SoundRight, ListenerRight);
CastLine(SoundAbove, ListenerAbove);
CastLine(SoundBelow, ListenerBelow);
colour = (PlayerOcclusionWidening == 0f || SoundOcclusionWidening == 0f) ? Color.blue : Color.green;
SetParameter();
}
private Vector3 CalculatePoint(Vector3 a, Vector3 b, float m, bool posOrneg)
{
float n = Vector3.Distance(new Vector3(a.x, 0f, a.z), new Vector3(b.x, 0f, b.z));
if (n == 0f) return a;
float mn = (m / n);
float x, z;
if (posOrneg)
{
x = a.x + (mn * (a.z - b.z));
z = a.z - (mn * (a.x - b.x));
}
else
{
x = a.x - (mn * (a.z - b.z));
z = a.z + (mn * (a.x - b.x));
}
return new Vector3(x, a.y, z);
}
private void CastLine(Vector3 Start, Vector3 End)
{
RaycastHit hit;
bool isHit = Physics.Linecast(Start, End, out hit, OcclusionLayer);
if (isHit)
{
lineCastHitCount++;
Debug.DrawLine(Start, End, Color.red);
}
else
{
Debug.DrawLine(Start, End, colour);
}
}
private void SetParameter()
{
float occlusionValue = lineCastHitCount / 11;
AudioOccluded.setParameterByName("Occlusion", occlusionValue);
}
}

View File

@ -1,195 +0,0 @@
using UnityEngine;
using FMODUnity;
using FMOD.Studio;
using System.Collections;
public class FirstPersonOcclusion : MonoBehaviour
{
[Header("FMOD Event")]
[SerializeField]
private FMODUnity.EventReference SelectAudio;
private EventInstance AudioOccluded;
private EventDescription AudioDes;
private StudioListener Listener;
private PLAYBACK_STATE pb;
[Header("Occlusion Options")]
[SerializeField]
[Range(0f, 10f)]
private float SoundOcclusionWidening = 1f;
[SerializeField]
[Range(0f, 10f)]
private float PlayerOcclusionWidening = 1f;
[SerializeField]
private LayerMask OcclusionLayer;
private bool AudioIsVirtual;
private float MaxDistance;
private float ListenerDistance;
private float lineCastHitCount = 0f;
private Color colour;
private IEnumerator Start()
{
Debug.Log("--- Start Method ---");
// 1. Event Instance Creation
AudioOccluded = RuntimeManager.CreateInstance(SelectAudio);
//Debug.Log($"Created FMOD Event Instance for: {SelectAudio.Path}");
// 2. Attaching Instance
RuntimeManager.AttachInstanceToGameObject(AudioOccluded, gameObject);
Debug.Log($"Attached FMOD Event Instance to GameObject: {gameObject.name}");
// 3. Starting Audio
AudioOccluded.start();
Debug.Log("Started FMOD Event Instance.");
// 4. Releasing Instance (This allows the event to self-manage its lifetime, which is fine)
AudioOccluded.release();
Debug.Log("Released FMOD Event Instance.");
// 5. Getting Event Description and Max Distance
AudioDes = RuntimeManager.GetEventDescription(SelectAudio);
AudioDes.getMinMaxDistance(out float minDistance, out MaxDistance);
Debug.Log($"FMOD Event Min/Max Distance: {minDistance:F2} / {MaxDistance:F2}");
// 6. Finding Listener
yield return new WaitUntil(() => FindObjectOfType<StudioListener>() != null);
Listener = FindObjectOfType<StudioListener>();
Debug.Log($"FMOD StudioListener found on {Listener.gameObject.name}");
Debug.Log("--- End Start Method ---");
}
private void FixedUpdate()
{
// Debug.Log("--- FixedUpdate Method ---"); // Too frequent, only log conditions
if (Listener == null) return; // Skip until listener exists
AudioOccluded.isVirtual(out AudioIsVirtual);
AudioOccluded.getPlaybackState(out pb);
ListenerDistance = Vector3.Distance(transform.position, Listener.transform.position);
// 7. Check Occlusion Condition
if (!AudioIsVirtual && pb == PLAYBACK_STATE.PLAYING && ListenerDistance <= MaxDistance)
{
Debug.Log($"Occlusion Check: Not Virtual, Playing, Distance {ListenerDistance:F2} <= Max {MaxDistance:F2}. Calling OccludeBetween.");
OccludeBetween(transform.position, Listener.transform.position);
}
else
{
// Log reasons why occlusion is NOT being checked
if (AudioIsVirtual) Debug.Log("Occlusion Skipped: Audio is Virtual.");
if (pb != PLAYBACK_STATE.PLAYING) Debug.Log($"Occlusion Skipped: Playback State is not PLAYING. State: {pb}");
if (ListenerDistance > MaxDistance) Debug.Log($"Occlusion Skipped: Distance {ListenerDistance:F2} > Max Distance {MaxDistance:F2}.");
}
// 8. Reset Hit Count
// Debug.Log($"Resetting lineCastHitCount from {lineCastHitCount:F0} to 0.");
lineCastHitCount = 0f;
}
private void OccludeBetween(Vector3 sound, Vector3 listener)
{
Debug.Log("--- OccludeBetween Method ---");
// 9. Calculate Points (Log only a few to avoid clutter)
Vector3 SoundLeft = CalculatePoint(sound, listener, SoundOcclusionWidening, true);
Vector3 SoundRight = CalculatePoint(sound, listener, SoundOcclusionWidening, false);
// Debug.Log($"Sound Positions: Center {sound}, Left {SoundLeft}, Right {SoundRight}");
Vector3 ListenerLeft = CalculatePoint(listener, sound, PlayerOcclusionWidening, true);
Vector3 ListenerRight = CalculatePoint(listener, sound, PlayerOcclusionWidening, false);
// Debug.Log($"Listener Positions: Center {listener}, Left {ListenerLeft}, Right {ListenerRight}");
Vector3 SoundAbove = new Vector3(sound.x, sound.y + SoundOcclusionWidening, sound.z);
Vector3 SoundBelow = new Vector3(sound.x, sound.y - SoundOcclusionWidening, sound.z);
Vector3 ListenerAbove = new Vector3(listener.x, listener.y + PlayerOcclusionWidening * 0.5f, listener.z);
Vector3 ListenerBelow = new Vector3(listener.x, listener.y - PlayerOcclusionWidening * 0.5f, listener.z);
// 10. Casting Lines (The line casts themselves will log hits)
CastLine(SoundLeft, ListenerLeft);
CastLine(SoundLeft, listener);
CastLine(SoundLeft, ListenerRight);
CastLine(sound, ListenerLeft);
CastLine(sound, listener);
CastLine(sound, ListenerRight);
CastLine(SoundRight, ListenerLeft);
CastLine(SoundRight, listener);
CastLine(SoundRight, ListenerRight);
CastLine(SoundAbove, ListenerAbove);
CastLine(SoundBelow, ListenerBelow);
if (PlayerOcclusionWidening == 0f || SoundOcclusionWidening == 0f)
{
colour = Color.blue;
}
else
{
colour = Color.green;
}
SetParameter();
Debug.Log("--- End OccludeBetween Method ---");
}
private Vector3 CalculatePoint(Vector3 a, Vector3 b, float m, bool posOrneg)
{
// Debug.Log($"Calculating offset point for: {a} to {b} with magnitude {m} and posOrneg {posOrneg}");
float x;
float z;
// n is the 2D distance between a and b
float n = Vector3.Distance(new Vector3(a.x, 0f, a.z), new Vector3(b.x, 0f, b.z));
float mn = (m / n);
// Safety check for division by zero (if sound and listener are exactly on top of each other horizontally)
if (n == 0f)
{
// If points are on the same XZ position, just return the point 'a'
// Debug.LogWarning("CalculatePoint: Division by zero avoided. Sound and Listener are at the same XZ position.");
return a;
}
if (posOrneg)
{
x = a.x + (mn * (a.z - b.z));
z = a.z - (mn * (a.x - b.x));
}
else
{
x = a.x - (mn * (a.z - b.z));
z = a.z + (mn * (a.x - b.x));
}
return new Vector3(x, a.y, z);
}
private void CastLine(Vector3 Start, Vector3 End)
{
RaycastHit hit;
// 11. Raycast result
bool isHit = Physics.Linecast(Start, End, out hit, OcclusionLayer);
if (isHit)
{
lineCastHitCount++;
Debug.Log($"Linecast HIT! Hit Count: {lineCastHitCount:F0}/11. Object hit: {hit.collider.name}.");
Debug.DrawLine(Start, End, Color.red);
}
else
{
Debug.DrawLine(Start, End, colour);
}
}
private void SetParameter()
{
float occlusionValue = lineCastHitCount / 11; // 11 is the total number of line casts
// 12. Final Parameter Value
Debug.Log($"Setting FMOD Parameter 'Occlusion' to: {occlusionValue:F2} (Hits: {lineCastHitCount:F0}/11)");
AudioOccluded.setParameterByName("Occlusion", occlusionValue);
}
}

View File

@ -69,7 +69,7 @@
</object>
<object class="EventAutomatableProperties" id="{c76e816d-57c8-456c-a329-17eb0603d09f}">
<property name="maximumDistance">
<value>60</value>
<value>45</value>
</property>
</object>
<object class="MarkerTrack" id="{59eaef25-4ee8-45f7-92cb-43f884ffe19f}" />

View File

@ -60,7 +60,7 @@
<destination>{99406875-ba7e-46e6-8a1c-583c35145678}</destination>
</relationship>
<relationship name="output">
<destination>{c751273e-6b77-46b1-8c19-a99f6f08e61e}</destination>
<destination>{ce68ea24-56d6-4af5-a850-87bda0652ecc}</destination>
</relationship>
</object>
<object class="EventAutomatableProperties" id="{9d7e6e68-4635-4e3b-a66b-975d89419ca5}">

View File

@ -64,7 +64,7 @@
<destination>{785a0218-171c-43b0-a400-ed5b478e0e52}</destination>
</relationship>
<relationship name="output">
<destination>{c751273e-6b77-46b1-8c19-a99f6f08e61e}</destination>
<destination>{ce68ea24-56d6-4af5-a850-87bda0652ecc}</destination>
</relationship>
</object>
<object class="EventAutomatableProperties" id="{bae5b038-7025-49bb-a46b-664b3b2cf708}">

View File

@ -60,7 +60,7 @@
<destination>{d6578bd3-e81d-4e23-9b1f-d98a017a7b35}</destination>
</relationship>
<relationship name="output">
<destination>{c751273e-6b77-46b1-8c19-a99f6f08e61e}</destination>
<destination>{ce68ea24-56d6-4af5-a850-87bda0652ecc}</destination>
</relationship>
</object>
<object class="EventAutomatableProperties" id="{6a901485-ac65-4417-b96f-749644c60b5f}">

View File

@ -53,7 +53,7 @@
<destination>{cd5d92df-177f-4077-b83b-a1d3846825e9}</destination>
</relationship>
<relationship name="output">
<destination>{c751273e-6b77-46b1-8c19-a99f6f08e61e}</destination>
<destination>{ce68ea24-56d6-4af5-a850-87bda0652ecc}</destination>
</relationship>
</object>
<object class="EventAutomatableProperties" id="{009221a7-eede-4793-b2fe-d8fe720d1052}">

View File

@ -54,7 +54,7 @@
<destination>{692e7fb8-403d-4ed5-99e4-7e138fa06823}</destination>
</relationship>
<relationship name="output">
<destination>{8431e203-753a-4633-bbee-15f9c2412d0a}</destination>
<destination>{9f27e443-4657-4fe2-9f99-cb50bf4bb534}</destination>
</relationship>
</object>
<object class="EventAutomatableProperties" id="{b0d3a5ad-8759-4304-af27-29078fab72f3}">

View File

@ -53,7 +53,7 @@
<destination>{b883c971-d553-41c9-8d37-3b20092b7741}</destination>
</relationship>
<relationship name="output">
<destination>{69ee688f-dc4e-4df2-a125-df79ed93217e}</destination>
<destination>{9f27e443-4657-4fe2-9f99-cb50bf4bb534}</destination>
</relationship>
</object>
<object class="EventAutomatableProperties" id="{88cc1d43-9b50-4bde-a353-56b0e49c0812}" />

View File

@ -56,7 +56,7 @@
<destination>{6721f316-4c14-42f0-abed-906731885df2}</destination>
</relationship>
<relationship name="output">
<destination>{9f27e443-4657-4fe2-9f99-cb50bf4bb534}</destination>
<destination>{69ee688f-dc4e-4df2-a125-df79ed93217e}</destination>
</relationship>
</object>
<object class="EventAutomatableProperties" id="{27b9bba1-5a4c-4886-9adf-acfd3ae2c80e}" />

View File

@ -53,7 +53,7 @@
<destination>{9fa374b5-4d33-4d57-9e95-cbd43def38b3}</destination>
</relationship>
<relationship name="output">
<destination>{9f27e443-4657-4fe2-9f99-cb50bf4bb534}</destination>
<destination>{69ee688f-dc4e-4df2-a125-df79ed93217e}</destination>
</relationship>
</object>
<object class="EventAutomatableProperties" id="{0521ae5c-7f73-4be8-9de7-1d9031eb4f5c}">

View File

@ -54,7 +54,7 @@
<destination>{e9d8a9af-9a9b-4cdc-921e-bdc5b1db9955}</destination>
</relationship>
<relationship name="output">
<destination>{c751273e-6b77-46b1-8c19-a99f6f08e61e}</destination>
<destination>{8431e203-753a-4633-bbee-15f9c2412d0a}</destination>
</relationship>
</object>
<object class="EventAutomatableProperties" id="{3ddbb4f1-4569-45de-9f6b-4cdda476e6ff}">
@ -87,7 +87,7 @@
</object>
<object class="EventMixerMaster" id="{09541088-24f8-4cef-ad4f-6e713e129f95}">
<property name="volume">
<value>6</value>
<value>8</value>
</property>
<relationship name="effectChain">
<destination>{0fee013d-657b-47c5-85d1-475195a25a23}</destination>

View File

@ -35,7 +35,7 @@
</relationship>
<relationship name="parameters">
<destination>{052e1f9c-5b6f-476b-946d-b2bdcdc8f8eb}</destination>
<destination>{9abe2acc-a8b4-4415-840b-2ac27847b4ff}</destination>
<destination>{68bf40d2-7df8-4b0c-a6bc-9d3c36d63439}</destination>
</relationship>
<relationship name="banks">
<destination>{9d1145b0-e099-4ee4-ab1d-23cc274af901}</destination>
@ -49,6 +49,7 @@
<object class="MasterTrack" id="{cd01f012-7f74-4693-8f68-395acd8b0d35}">
<relationship name="automationTracks">
<destination>{087063af-72f8-4cca-b56a-eda53b878587}</destination>
<destination>{980354c8-26a3-47a1-80a6-769cbf436bda}</destination>
</relationship>
<relationship name="modules">
<destination>{05ec5f01-3eb6-4f68-b75b-e99b7c476eee}</destination>
@ -118,12 +119,15 @@
<destination>{c6ed1c8a-6317-4b6e-9c2f-a9de5d998f05}</destination>
</relationship>
</object>
<object class="ParameterProxy" id="{9abe2acc-a8b4-4415-840b-2ac27847b4ff}">
<object class="ParameterProxy" id="{68bf40d2-7df8-4b0c-a6bc-9d3c36d63439}">
<relationship name="preset">
<destination>{8d183079-30c4-4cbb-837b-5db8c493ed3b}</destination>
<destination>{fb894807-eb7f-48db-b3de-e2f5dd3322a2}</destination>
</relationship>
</object>
<object class="EventMixerMaster" id="{783c2004-c047-4bf0-a1b5-05f363b1ec24}">
<relationship name="automators">
<destination>{93017814-5ff7-41bb-a85c-fc00228d6511}</destination>
</relationship>
<relationship name="effectChain">
<destination>{5ac38b31-98b7-473d-8882-03fa4bb5da28}</destination>
</relationship>
@ -139,6 +143,11 @@
<destination>{6d4159b3-ea9e-461b-ba14-b1be5405eb95}</destination>
</relationship>
</object>
<object class="AutomationTrack" id="{980354c8-26a3-47a1-80a6-769cbf436bda}">
<relationship name="automator">
<destination>{93017814-5ff7-41bb-a85c-fc00228d6511}</destination>
</relationship>
</object>
<object class="TransitionSourceSound" id="{05ec5f01-3eb6-4f68-b75b-e99b7c476eee}">
<property name="length">
<value>0</value>
@ -317,6 +326,14 @@
<destination>{7007bc9b-631e-461e-b46e-f1cb71b0a9e3}</destination>
</relationship>
</object>
<object class="Automator" id="{93017814-5ff7-41bb-a85c-fc00228d6511}">
<property name="nameOfPropertyBeingAutomated">
<value>volume</value>
</property>
<relationship name="automationCurves">
<destination>{c6483dc0-3132-49c3-9ba3-ef97f7f31091}</destination>
</relationship>
</object>
<object class="MixerBusEffectChain" id="{5ac38b31-98b7-473d-8882-03fa4bb5da28}">
<relationship name="effects">
<destination>{17b6686c-b69a-4290-9a34-f1615792f5c3}</destination>
@ -414,6 +431,17 @@
<destination>{c6ed1c8a-6317-4b6e-9c2f-a9de5d998f05}</destination>
</relationship>
</object>
<object class="AutomationCurve" id="{c6483dc0-3132-49c3-9ba3-ef97f7f31091}">
<relationship name="parameter">
<destination>{fb894807-eb7f-48db-b3de-e2f5dd3322a2}</destination>
</relationship>
<relationship name="automationPoints">
<destination>{6511c4b5-301e-45ff-b07e-2dc25691ad3c}</destination>
<destination>{f27b755e-124b-49b8-8d3f-d69403044a53}</destination>
<destination>{2f40e6d1-2e17-4ac1-93ec-f9cdf454778e}</destination>
<destination>{9c80fde5-1b08-459f-a1d1-e3b7830cc8f9}</destination>
</relationship>
</object>
<object class="MixerBusFader" id="{17b6686c-b69a-4290-9a34-f1615792f5c3}" />
<object class="SpatialiserEffect" id="{fe7fa346-05af-4c7e-900c-1772749be6a1}" />
<object class="MultibandEqEffect" id="{c43e9d3e-ce29-4e53-8209-26b736863d02}">
@ -516,61 +544,93 @@
</property>
</object>
<object class="MixerBusFader" id="{b99da5db-4add-462e-999e-35bad8a56417}" />
<object class="AutomationPoint" id="{6511c4b5-301e-45ff-b07e-2dc25691ad3c}">
<property name="position">
<value>0.001076426264800861</value>
</property>
<property name="value">
<value>3.81469727e-06</value>
</property>
</object>
<object class="AutomationPoint" id="{f27b755e-124b-49b8-8d3f-d69403044a53}">
<property name="position">
<value>0.47631862217438103</value>
</property>
<property name="value">
<value>-7</value>
</property>
</object>
<object class="AutomationPoint" id="{2f40e6d1-2e17-4ac1-93ec-f9cdf454778e}">
<property name="position">
<value>0.99946178686759946</value>
</property>
<property name="value">
<value>-80</value>
</property>
</object>
<object class="AutomationPoint" id="{9c80fde5-1b08-459f-a1d1-e3b7830cc8f9}">
<property name="position">
<value>0.9903121636167922</value>
</property>
<property name="value">
<value>-10.9341545</value>
</property>
</object>
<object class="Automator" id="{6d4159b3-ea9e-461b-ba14-b1be5405eb95}">
<property name="nameOfPropertyBeingAutomated">
<value>frequencyA</value>
</property>
<relationship name="automationCurves">
<destination>{2e2c0b59-cd7c-4f56-a6fb-948fb66056bf}</destination>
<destination>{6c505241-c058-47cb-b714-f520fdbe0caa}</destination>
</relationship>
</object>
<object class="AutomationCurve" id="{2e2c0b59-cd7c-4f56-a6fb-948fb66056bf}">
<object class="AutomationCurve" id="{6c505241-c058-47cb-b714-f520fdbe0caa}">
<relationship name="parameter">
<destination>{8d183079-30c4-4cbb-837b-5db8c493ed3b}</destination>
<destination>{fb894807-eb7f-48db-b3de-e2f5dd3322a2}</destination>
</relationship>
<relationship name="automationPoints">
<destination>{50d95503-71eb-40cd-bf3c-9c81df86ce9c}</destination>
<destination>{dd976ac6-fd76-433d-9529-838cfc6b729f}</destination>
<destination>{271ac30f-9855-4d8d-9c3f-e9decd599a63}</destination>
<destination>{ca5c5e24-641a-4abe-a446-fb75c5add4a8}</destination>
<destination>{c5d1b0fa-4a02-495b-b7b9-213d29640d30}</destination>
<destination>{0b8a39b4-4ce2-4b14-b5f9-09d0d5ecb004}</destination>
<destination>{3d47a52a-5449-42c0-b0b3-b7dbb7694761}</destination>
<destination>{411906cd-ff80-4c62-8a5b-d2d075404e9e}</destination>
</relationship>
</object>
<object class="AutomationPoint" id="{50d95503-71eb-40cd-bf3c-9c81df86ce9c}">
<object class="AutomationPoint" id="{c5d1b0fa-4a02-495b-b7b9-213d29640d30}">
<property name="position">
<value>0</value>
<value>0.001076426264800861</value>
</property>
<property name="value">
<value>22000</value>
<value>18000</value>
</property>
<property name="curveShape">
<value>-0.12912713</value>
</property>
</object>
<object class="AutomationPoint" id="{0b8a39b4-4ce2-4b14-b5f9-09d0d5ecb004}">
<property name="position">
<value>0.47524219590958017</value>
</property>
<property name="value">
<value>4500</value>
</property>
</object>
<object class="AutomationPoint" id="{3d47a52a-5449-42c0-b0b3-b7dbb7694761}">
<property name="position">
<value>0.98170075349838526</value>
</property>
<property name="value">
<value>150</value>
</property>
<property name="curveShape">
<value>0.0435885787</value>
</property>
</object>
<object class="AutomationPoint" id="{411906cd-ff80-4c62-8a5b-d2d075404e9e}">
<property name="position">
<value>1</value>
</property>
<property name="isSCurve">
<value>true</value>
</property>
</object>
<object class="AutomationPoint" id="{dd976ac6-fd76-433d-9529-838cfc6b729f}">
<property name="position">
<value>39.604519774011301</value>
</property>
<property name="value">
<value>30</value>
</property>
</object>
<object class="AutomationPoint" id="{271ac30f-9855-4d8d-9c3f-e9decd599a63}">
<property name="position">
<value>25.5</value>
</property>
<property name="value">
<value>35</value>
</property>
</object>
<object class="AutomationPoint" id="{ca5c5e24-641a-4abe-a446-fb75c5add4a8}">
<property name="position">
<value>14.5</value>
</property>
<property name="value">
<value>3500</value>
<value>20</value>
</property>
</object>
</objects>

View File

@ -152,7 +152,7 @@
</object>
<object class="EventMixerGroup" id="{cdf80f01-e74c-4af6-98fc-be0a8a66d5fa}">
<property name="volume">
<value>9.5</value>
<value>7.5</value>
</property>
<property name="name">
<value>Audio 2</value>

View File

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<objects serializationModel="Studio.02.03.00">
<object class="ParameterPreset" id="{319559ef-04bf-4399-ad4d-f2857201675d}">
<property name="name">
<value>Car</value>
</property>
<relationship name="folder">
<destination>{72821a40-1f9b-449e-9f29-45c4d8800c81}</destination>
</relationship>
<relationship name="parameter">
<destination>{8d183079-30c4-4cbb-837b-5db8c493ed3b}</destination>
</relationship>
</object>
<object class="GameParameter" id="{8d183079-30c4-4cbb-837b-5db8c493ed3b}">
<property name="parameterType">
<value>3</value>
</property>
<property name="maximum">
<value>40</value>
</property>
<property name="initialValue">
<value>0</value>
</property>
<property name="isExposedRecursively">
<value>false</value>
</property>
</object>
</objects>

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<objects serializationModel="Studio.02.03.00">
<object class="ParameterPreset" id="{78b39a91-4363-470b-94f5-ebddc0e41885}">
<property name="name">
<value>CafeEQ</value>
</property>
<relationship name="folder">
<destination>{72821a40-1f9b-449e-9f29-45c4d8800c81}</destination>
</relationship>
<relationship name="parameter">
<destination>{f83835cd-446d-4f3c-9fc6-2c0e984edbad}</destination>
</relationship>
</object>
<object class="GameParameter" id="{f83835cd-446d-4f3c-9fc6-2c0e984edbad}">
<property name="initialValue">
<value>0</value>
</property>
</object>
</objects>

View File

@ -13,7 +13,7 @@
</object>
<object class="GameParameter" id="{fb894807-eb7f-48db-b3de-e2f5dd3322a2}">
<property name="initialValue">
<value>0</value>
<value>1</value>
</property>
<relationship name="modulators">
<destination>{a1523d7a-fecc-424f-8e27-bd2c5cb9a80f}</destination>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<objects serializationModel="Studio.02.03.00">
<object class="MixerVCA" id="{162960f4-09a2-4526-a61e-7ac7e219d27d}">
<property name="name">
<value>SFX</value>
</property>
<relationship name="mixer">
<destination>{a1197cab-76c8-4da4-a41f-969ff1afdca4}</destination>
</relationship>
</object>
</objects>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<objects serializationModel="Studio.02.03.00">
<object class="MixerVCA" id="{6a1a7123-bd44-49b1-9092-22ef5bb105ec}">
<property name="name">
<value>UI</value>
</property>
<relationship name="mixer">
<destination>{a1197cab-76c8-4da4-a41f-969ff1afdca4}</destination>
</relationship>
</object>
</objects>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<objects serializationModel="Studio.02.03.00">
<object class="MixerVCA" id="{7db632b8-c5c2-4e3e-ab97-f087b29d2976}">
<property name="name">
<value>Ambiences</value>
</property>
<relationship name="masters">
<destination>{abdd8187-ee40-4826-82f2-b919c3daf22c}</destination>
</relationship>
<relationship name="mixer">
<destination>{a1197cab-76c8-4da4-a41f-969ff1afdca4}</destination>
</relationship>
</object>
</objects>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<objects serializationModel="Studio.02.03.00">
<object class="MixerVCA" id="{abdd8187-ee40-4826-82f2-b919c3daf22c}">
<property name="name">
<value>Master</value>
</property>
<relationship name="mixer">
<destination>{a1197cab-76c8-4da4-a41f-969ff1afdca4}</destination>
</relationship>
</object>
</objects>

View File

@ -4,6 +4,10 @@
"name": "iopprnbb ,,p",
"score": 491.0
},
{
"name": "timmi",
"score": 469.0
},
{
"name": "jtimu",
"score": 465.0