diff --git a/package/CHANGELOG.md b/package/CHANGELOG.md index 99a0d8230..74d621c62 100755 --- a/package/CHANGELOG.md +++ b/package/CHANGELOG.md @@ -1,3 +1,8 @@ +## [0.0.1-preview.3] - 2019-03-15 +- Fixed issues on XBox +- Fixed music layering system not recovering position properly from LocalToWorld +- Fixed vehicle fade out time being determined from relative and not absolute speed + ## [0.0.1-preview.2] - 2019-03-14 - Added support for reinitialization of manager objects and ECS systems. diff --git a/package/Runtime/Components/VehicleSoundControllerComponent.cs b/package/Runtime/Components/VehicleSoundControllerComponent.cs index b94abaafa..903cdbfca 100755 --- a/package/Runtime/Components/VehicleSoundControllerComponent.cs +++ b/package/Runtime/Components/VehicleSoundControllerComponent.cs @@ -213,13 +213,14 @@ internal void OnUpdate(VehicleSoundController ctl, AudioManagerSystem audioManag { m_Speed = 1; } + // turn down the volume when the car is moving forward at max speed; // otherwise fade to full folume -- that's when volume is less than max, or the angles are non-zero if (m_MasterVolumeTarget != 1 - && (math.abs(m_Speed - 1) > 0.1 - || math.abs(m_YawAngle) > 0.2 - || math.abs(m_PitchAngle) > 0.2 - || math.abs(m_RollAngle) > 0.2 + && (math.abs(prev - m_Speed) > 0.0017 + || math.abs(m_YawAngle) > 0.4 + || math.abs(m_PitchAngle) > 0.4 + || math.abs(m_RollAngle) > 0.4 ) ) { diff --git a/package/Runtime/DSP/StereoTo7Point1Node.cs b/package/Runtime/DSP/StereoTo7Point1Node.cs new file mode 100755 index 000000000..65513d31d --- /dev/null +++ b/package/Runtime/DSP/StereoTo7Point1Node.cs @@ -0,0 +1,44 @@ +using Unity.Burst; +using Unity.Experimental.Audio; + +namespace Unity.Audio.Megacity +{ + [BurstCompile] + struct StereoTo7Point1NodeJob : IAudioJob + { + public enum Params + { + } + + public void Init(ParameterData parameters) + { + } + + public void Execute(ref ExecuteContext ctx) + { + var inputBuffer = ctx.Inputs.GetSampleBuffer(0); + var outputBuffer = ctx.Outputs.GetSampleBuffer(0); + + var numChannels = outputBuffer.Channels; + var sampleFrames = outputBuffer.Samples; + + var src = inputBuffer.Buffer; + var dst = outputBuffer.Buffer; + + int srcOffset = 0; + int dstOffset = 0; + + for (uint n = 0; n < sampleFrames; n++) + { + dst[dstOffset++] = src[srcOffset++]; + dst[dstOffset++] = src[srcOffset++]; + dst[dstOffset++] = 0.0f; + dst[dstOffset++] = 0.0f; + dst[dstOffset++] = 0.0f; + dst[dstOffset++] = 0.0f; + dst[dstOffset++] = 0.0f; + dst[dstOffset++] = 0.0f; + } + } + } +} diff --git a/package/Runtime/DSP/StereoTo7Point1Node.cs.meta b/package/Runtime/DSP/StereoTo7Point1Node.cs.meta new file mode 100755 index 000000000..85acf59db --- /dev/null +++ b/package/Runtime/DSP/StereoTo7Point1Node.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc03a737baa1cf7469fc48b89d210c03 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/package/Runtime/Systems/AudioManagerSystem.cs b/package/Runtime/Systems/AudioManagerSystem.cs index 24fe044ac..60169f326 100755 --- a/package/Runtime/Systems/AudioManagerSystem.cs +++ b/package/Runtime/Systems/AudioManagerSystem.cs @@ -61,13 +61,15 @@ internal DSPCommandBlockInterceptor FrameBlock { get { - if(!m_BlocksAlive) + if (!m_BlocksAlive) throw new InvalidOperationException("Audio manager frame blocks not available at this time"); return m_Block; } } + DSPConnection m_ConverterConnection; + DSPNode m_ConverterNode; DSPConnection m_MasterConnection; DSPNode m_MasterGainNode; DSPNode m_LimiterNode; @@ -86,7 +88,19 @@ protected override void OnCreateManager() m_Block.AddOutletPort(m_MasterGainNode, 2, SoundFormat.Stereo); m_Block.SetFloat(m_MasterGainNode, GainNodeJob.Params.Vol1, 0, 0); m_Block.SetFloat(m_MasterGainNode, GainNodeJob.Params.Vol2, 0, 0); - m_MasterConnection = m_Block.Connect(m_MasterGainNode, 0, WorldGraph.GetRootDSP(), 0); + + if (Application.platform == RuntimePlatform.XboxOne) + { + m_ConverterNode = m_Block.CreateDSPNode(); + m_Block.AddInletPort(m_ConverterNode, 2, SoundFormat.Stereo); + m_Block.AddOutletPort(m_ConverterNode, 8, SoundFormat.SevenDot1); + m_ConverterConnection = m_Block.Connect(m_MasterGainNode, 0, m_ConverterNode, 0); + m_MasterConnection = m_Block.Connect(m_ConverterNode, 0, WorldGraph.GetRootDSP(), 0); + } + else + { + m_MasterConnection = m_Block.Connect(m_MasterGainNode, 0, WorldGraph.GetRootDSP(), 0); + } m_LimiterNode = m_Block.CreateDSPNode(); m_Block.AddInletPort(m_LimiterNode, 2, SoundFormat.Stereo); @@ -114,8 +128,13 @@ internal void SwapBuffers() protected override void OnDestroyManager() { - if(m_BlocksAlive) + if (m_BlocksAlive) { + if (Application.platform == RuntimePlatform.XboxOne) + { + m_Block.ReleaseDSPNode(m_ConverterNode); + } + m_Block.ReleaseDSPNode(m_MasterGainNode); m_Block.ReleaseDSPNode(m_LimiterNode); m_Block.Complete(); @@ -159,11 +178,11 @@ internal void UpdateParameters(uint lerpLength = 1024) } } - public void SetActive (bool value) + public void SetActive(bool value) { var volume = value ? 1 : 0; - m_Block.SetFloat(m_MasterGainNode, GainNodeJob.Params.Vol1, volume, 5*44100); - m_Block.SetFloat(m_MasterGainNode, GainNodeJob.Params.Vol2, volume, 5*44100); + m_Block.SetFloat(m_MasterGainNode, GainNodeJob.Params.Vol1, volume, 5 * 44100); + m_Block.SetFloat(m_MasterGainNode, GainNodeJob.Params.Vol2, volume, 5 * 44100); } } diff --git a/package/Runtime/Systems/BoxTriggerSystem.cs b/package/Runtime/Systems/BoxTriggerSystem.cs index 4d050633c..c01114ec3 100755 --- a/package/Runtime/Systems/BoxTriggerSystem.cs +++ b/package/Runtime/Systems/BoxTriggerSystem.cs @@ -33,7 +33,7 @@ public struct TriggerJob : IJobChunk public ChunkEntityEnumerable m_BoundingBoxEnumerable; [ReadOnly] - public ComponentDataFromEntity m_PointPosition; + public ComponentDataFromEntity m_PointPosition; [ReadOnly] public ComponentDataFromEntity m_PointBoxIndex; @@ -45,7 +45,7 @@ public struct TriggerJob : IJobChunk public ArchetypeChunkEntityType m_PointEntityType; [ReadOnly] - public ArchetypeChunkComponentType m_PositionType; + public ArchetypeChunkComponentType m_PositionType; [ReadOnly] public ArchetypeChunkComponentType m_BoxIndexType; @@ -55,13 +55,13 @@ public struct TriggerJob : IJobChunk public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) { var pointEntities = chunk.GetNativeArray(m_PointEntityType); - var positionComponents = chunk.GetNativeArray(m_PositionType); + var positionComponents = chunk.GetNativeArray(m_PositionType); var boxIndexComponents = chunk.GetNativeArray(m_BoxIndexType); for (int p = 0; p < pointEntities.Length; p++) { var pointEntity = pointEntities[p]; - var position = positionComponents[p].Value; + var position = math.transform(positionComponents[p].Value, new float3()); Entity newBoundingBox = Entity.Null; foreach (var boundingBoxEntity in m_BoundingBoxEnumerable) @@ -103,11 +103,11 @@ protected override JobHandle OnUpdate(JobHandle inputDeps) var job = new TriggerJob { m_BoundingBoxEnumerable = m_BoundingBoxEnumerable, - m_PointPosition = GetComponentDataFromEntity(), + m_PointPosition = GetComponentDataFromEntity(), m_PointBoxIndex = GetComponentDataFromEntity(), m_BoundingBoxes = GetComponentDataFromEntity(), m_PointEntityType = GetArchetypeChunkEntityType(), - m_PositionType = GetArchetypeChunkComponentType(true), + m_PositionType = GetArchetypeChunkComponentType(true), m_BoxIndexType = GetArchetypeChunkComponentType(), m_EntityCommandBuffer = m_Barrier.CreateCommandBuffer().ToConcurrent() }; @@ -134,7 +134,7 @@ protected override void OnCreateManager() m_PointGroup = GetComponentGroup( new EntityArchetypeQuery { - All = new ComponentType[] { typeof(Translation), typeof(BoxIndex) }, + All = new ComponentType[] { typeof(LocalToWorld), typeof(BoxIndex) }, None = Array.Empty(), Any = Array.Empty(), }); diff --git a/package/package.json b/package/package.json index 2eae1d4a9..2a717a794 100755 --- a/package/package.json +++ b/package/package.json @@ -1,6 +1,6 @@ { "name": "com.unity.audio.megacityprototype", - "version": "0.0.1-preview.2", + "version": "0.0.1-preview.3", "unity": "2019.1", "description": "This package contains the prototype audio system for the megacity sample project. The contents of this package should not be considered as part of the standard audio system feature set of unity, as it was a prototype created for the megacity sample, that will serve as inspiration for audio features going forward.", "displayName": "Megacity Audio System", diff --git a/versions.txt b/versions.txt index cac7fec71..779338989 100755 --- a/versions.txt +++ b/versions.txt @@ -1,2 +1,3 @@ 0.0.1-preview.1 0.0.1-preview.2 +0.0.1-preview.3