public void Base() { using (var testing = new UnmanagedArray <float>(128)) { for (var i = 0; i < testing.Length; i++) { testing[i] = i; } for (var i = 0; i < testing.Length; i++) { Assert.Equal(i, testing[i]); testing[i] = -1.0f; } var managedArray = new float[128]; for (var i = 0; i < testing.Length; i++) { managedArray[i] = i; } testing.Write(managedArray); var managedArray2 = new float[128]; testing.Read(managedArray2); for (var i = 0; i < testing.Length; i++) { Assert.Equal(i, testing[i]); } } }
public void CopyTo <T>(UnmanagedArray <T> heightStickArray, int index) where T : struct { if (Heightmap == null) { throw new InvalidOperationException($"{ nameof(Heightmap) } is a null"); } if (heightStickArray == null) { throw new ArgumentNullException(nameof(heightStickArray)); } var heightStickArrayLength = heightStickArray.Length - index; if (heightStickArrayLength <= 0) { throw new IndexOutOfRangeException(nameof(index)); } var typeOfT = typeof(T); T[] heights; if (typeOfT == typeof(float)) { if (Heightmap.Floats == null) { throw new InvalidOperationException($"{ nameof(Heightmap.Floats) } is a null."); } heights = (T[])(object)Heightmap.Floats; } else if (typeOfT == typeof(short)) { if (Heightmap.Shorts == null) { throw new InvalidOperationException($"{ nameof(Heightmap.Shorts) } is a null."); } heights = (T[])(object)Heightmap.Shorts; } else if (typeOfT == typeof(byte)) { if (Heightmap.Bytes == null) { throw new InvalidOperationException($"{ nameof(Heightmap.Bytes) } is a null."); } heights = (T[])(object)Heightmap.Bytes; } else { throw new NotSupportedException($"{ typeof(UnmanagedArray<T>) } type is not supported."); } var heightsLength = heights.Length; if (heightStickArrayLength < heightsLength) { throw new ArgumentException($"{ nameof(heightStickArray) }.{ nameof(heightStickArray.Length) } is not enough to copy."); } heightStickArray.Write(heights, index * Utilities.SizeOf <T>(), 0, heightsLength); }
internal void LoadSoundInMemory() { if (PreloadedBuffer.Ptr != IntPtr.Zero) { return; } using (var soundStream = ContentManager.FileProvider.OpenStream(CompressedDataUrl, VirtualFileMode.Open, VirtualFileAccess.Read, VirtualFileShare.Read, StreamFlags.Seekable)) using (var decoder = new Celt(SampleRate, CompressedSoundSource.SamplesPerFrame, Channels, true)) { var reader = new BinarySerializationReader(soundStream); var samplesPerPacket = CompressedSoundSource.SamplesPerFrame * Channels; PreloadedBuffer = AudioLayer.BufferCreate(samplesPerPacket * NumberOfPackets * sizeof(short)); var memory = new UnmanagedArray <short>(samplesPerPacket * NumberOfPackets); var offset = 0; var outputBuffer = new short[samplesPerPacket]; for (var i = 0; i < NumberOfPackets; i++) { var len = reader.ReadInt16(); var compressedBuffer = reader.ReadBytes(len); var samplesDecoded = decoder.Decode(compressedBuffer, len, outputBuffer); memory.Write(outputBuffer, offset, 0, samplesDecoded * Channels); offset += samplesDecoded * Channels * sizeof(short); } AudioLayer.BufferFill(PreloadedBuffer, memory.Pointer, memory.Length * sizeof(short), SampleRate, Channels == 1); memory.Dispose(); } }
public void Base() { using (var testing = new UnmanagedArray<float>(128)) { for (var i = 0; i < testing.Length; i++) { testing[i] = i; } for (var i = 0; i < testing.Length; i++) { Assert.That(testing[i], Is.EqualTo(i)); testing[i] = -1.0f; } var managedArray = new float[128]; for (var i = 0; i < testing.Length; i++) { managedArray[i] = i; } testing.Write(managedArray); var managedArray2 = new float[128]; testing.Read(managedArray2); for (var i = 0; i < testing.Length; i++) { Assert.That(testing[i], Is.EqualTo(i)); } } }
public override void Serialize(ref Sound obj, ArchiveMode mode, SerializationStream stream) { if (mode == ArchiveMode.Deserialize) { var services = stream.Context.Tags.Get(ServiceRegistry.ServiceRegistryKey); var audioEngine = services.GetServiceAs <IAudioEngineProvider>()?.AudioEngine; obj.CompressedDataUrl = stream.ReadString(); obj.SampleRate = stream.ReadInt32(); obj.Channels = stream.ReadByte(); obj.StreamFromDisk = stream.ReadBoolean(); obj.Spatialized = stream.ReadBoolean(); obj.NumberOfPackets = stream.ReadInt16(); obj.MaxPacketLength = stream.ReadInt16(); if (!obj.StreamFromDisk && audioEngine != null && audioEngine.State != AudioEngineState.Invalidated && audioEngine.State != AudioEngineState.Disposed) //immediatelly preload all the data and decode { using (var soundStream = ContentManager.FileProvider.OpenStream(obj.CompressedDataUrl, VirtualFileMode.Open, VirtualFileAccess.Read, VirtualFileShare.Read, StreamFlags.Seekable)) using (var decoder = new Celt(obj.SampleRate, CompressedSoundSource.SamplesPerFrame, obj.Channels, true)) { var reader = new BinarySerializationReader(soundStream); var samplesPerPacket = CompressedSoundSource.SamplesPerFrame * obj.Channels; obj.PreloadedBuffer = AudioLayer.BufferCreate(samplesPerPacket * obj.NumberOfPackets * sizeof(short)); var memory = new UnmanagedArray <short>(samplesPerPacket * obj.NumberOfPackets); var offset = 0; var outputBuffer = new short[samplesPerPacket]; for (var i = 0; i < obj.NumberOfPackets; i++) { var len = reader.ReadInt16(); var compressedBuffer = reader.ReadBytes(len); var samplesDecoded = decoder.Decode(compressedBuffer, len, outputBuffer); memory.Write(outputBuffer, offset, 0, samplesDecoded * obj.Channels); offset += samplesDecoded * obj.Channels * sizeof(short); } AudioLayer.BufferFill(obj.PreloadedBuffer, memory.Pointer, memory.Length * sizeof(short), obj.SampleRate, obj.Channels == 1); memory.Dispose(); } } if (audioEngine != null) { obj.Attach(audioEngine); } } else { stream.Write(obj.CompressedDataUrl); stream.Write(obj.SampleRate); stream.Write((byte)obj.Channels); stream.Write(obj.StreamFromDisk); stream.Write(obj.Spatialized); stream.Write((short)obj.NumberOfPackets); stream.Write((short)obj.MaxPacketLength); } }
private static UnmanagedArray <T> CreateHeights <T>(int length, T[] initialHeights) where T : struct { var unmanagedArray = new UnmanagedArray <T>(length); if (initialHeights != null) { unmanagedArray.Write(initialHeights, 0, 0, Math.Min(unmanagedArray.Length, initialHeights.Length)); } else { FillHeights(unmanagedArray, default); } return(unmanagedArray); }
//Thanks to EternalTamago private HeightfieldColliderShape CreateHeightfield(int width, int length, float min, float max, float[] values, out UnmanagedArray <float> points) { points = new UnmanagedArray <float>(width * length); points.Write(values); return(new HeightfieldColliderShape(width, length, points, 1f, min, max, false)); }
internal void LoadSoundInMemory() { if (PreloadedBuffer.Ptr != IntPtr.Zero) return; using (var soundStream = ContentManager.FileProvider.OpenStream(CompressedDataUrl, VirtualFileMode.Open, VirtualFileAccess.Read, VirtualFileShare.Read, StreamFlags.Seekable)) using (var decoder = new Celt(SampleRate, CompressedSoundSource.SamplesPerFrame, Channels, true)) { var reader = new BinarySerializationReader(soundStream); var samplesPerPacket = CompressedSoundSource.SamplesPerFrame * Channels; PreloadedBuffer = AudioLayer.BufferCreate(samplesPerPacket * NumberOfPackets * sizeof(short)); var memory = new UnmanagedArray<short>(samplesPerPacket * NumberOfPackets); var offset = 0; var outputBuffer = new short[samplesPerPacket]; for (var i = 0; i < NumberOfPackets; i++) { var len = reader.ReadInt16(); var compressedBuffer = reader.ReadBytes(len); var samplesDecoded = decoder.Decode(compressedBuffer, len, outputBuffer); memory.Write(outputBuffer, offset, 0, samplesDecoded * Channels); offset += samplesDecoded * Channels * sizeof(short); } AudioLayer.BufferFill(PreloadedBuffer, memory.Pointer, memory.Length * sizeof(short), SampleRate, Channels == 1); memory.Dispose(); } }