/// <summary> /// /// </summary> public void Update() { PspAudioImpl.Update((MixedSamples) => { var RequiredSamples = MixedSamples.Length; fixed(short *MixedSamplesPtr = MixedSamples) { var MixedSamplesDenormalized = stackalloc int[RequiredSamples]; foreach (var Channel in Channels) { var ChannelSamples = Channel.Read(RequiredSamples); fixed(short *ChannelSamplesPtr = ChannelSamples) { for (int n = 0; n < ChannelSamples.Length; n++) { MixedSamplesDenormalized[n] += ChannelSamplesPtr[n]; } } } for (int n = 0; n < RequiredSamples; n++) { MixedSamplesPtr[n] = StereoShortSoundSample.Clamp(MixedSamplesDenormalized[n]); } } }); }
/// <summary> /// /// </summary> public void Update() { PspAudioImpl.Update((RequiredSamples) => { short[] MixedSamples = new short[RequiredSamples]; int[] MixedSamplesDenormalized = new int[RequiredSamples]; int[] NumberOfChannels = new int[RequiredSamples]; foreach (var Channel in Channels) { var ChannelSamples = Channel.Read(RequiredSamples); for (int n = 0; n < ChannelSamples.Length; n++) { MixedSamplesDenormalized[n] += ChannelSamples[n]; NumberOfChannels[n]++; } } for (int n = 0; n < RequiredSamples; n++) { if (NumberOfChannels[n] != 0) { MixedSamples[n] = (short)(MixedSamplesDenormalized[n] / NumberOfChannels[n]); } } return(MixedSamples); }); }