CSPspEmu.Core.Audio.PspAudioChannel.Write C# (CSharp) Method

Write() public method

public Write ( short Samples, System.Action ActionCallbackOnReaded ) : void
Samples short
ActionCallbackOnReaded System.Action
return void
        public void Write(short[] Samples, Action ActionCallbackOnReaded)
        {
            if (Samples == null) throw (new InvalidOperationException("short[] Samples is null"));

            short[] StereoSamples;

            switch (Format)
            {
                case Audio.PspAudio.FormatEnum.Mono:
                    StereoSamples = MonoToStereo(Samples);
                    break;
                default:
                case Audio.PspAudio.FormatEnum.Stereo:
                    StereoSamples = Samples;
                    break;
            }

            lock (this)
            {
                if (Buffer.ConsumeRemaining < FillSamples)
                {
                    Task.Run(() =>
                    {
                        Thread.Sleep(1);
                        ActionCallbackOnReaded();
                    });
                }
                else
                {
                    BufferEvents.Add(new Tuple<long, Action>(Buffer.TotalConsumed + StereoSamples.Length, ActionCallbackOnReaded));
                }
                //Console.WriteLine(Format);
                Buffer.Produce(StereoSamples);
            }
        }

Same methods

PspAudioChannel::Write ( short SamplePointer, int VolumeLeft, int VolumeRight, System.Action ActionCallbackOnReaded ) : void

Usage Example

Example #1
0
 private int _sceAudioOutputPannedBlocking(PspAudioChannel Channel, int LeftVolume, int RightVolume, short* Buffer, bool Blocking)
 {
     ThreadManager.Current.SetWaitAndPrepareWakeUp(HleThread.WaitType.Audio, String.Format("_sceAudioOutputPannedBlocking({0}, Volume({1}, {2}), Blocking({3}))", Channel, LeftVolume, RightVolume, Blocking), Channel, WakeUpCallback =>
     {
         Channel.Write(Buffer, LeftVolume, RightVolume, () =>
         {
             if (Blocking) WakeUpCallback();
         });
         /*
         if (Blocking)
         {
             PspRtc.RegisterTimerInOnce(TimeSpan.FromMilliseconds(1), () =>
             {
                 WakeUpCallback();
             });
         }
         */
         if (!Blocking) WakeUpCallback();
     });
     return Channel.SampleCount;
 }