Beispiel #1
0
        public void Queue()
        {
            int length = random.Next(10, 100);

            CircleBuffer <char> buffer = new CircleBuffer <char>(length);

            StringBuilder tempString = new StringBuilder( );

            for (int i = 0; i < length; i++)
            {
                char temp = (char)random.Next(0x0410, 0x44F);
                tempString.Append(temp);
                buffer.Enqueue(temp);
            }

            string prototype = tempString.ToString( );

            tempString = new StringBuilder( );

            for (int i = 0; i < length; i++)
            {
                tempString.Append(buffer.Dequeue( ));
            }

            Assert.IsTrue(CheckString(prototype, tempString.ToString( )));
        }
Beispiel #2
0
        public void OverQueue()
        {
            int length = random.Next(10, 100);

            CircleBuffer <char> buffer = new CircleBuffer <char>(length);

            StringBuilder tempString = new StringBuilder( );

            int overLength = random.Next(1, 100);
            int cicleSize  = length + overLength;
            int remainder  = (cicleSize) % length;

            for (int i = 0; i < cicleSize; i++)
            {
                char temp = (char)random.Next(0x0410, 0x44F);
                if (i >= cicleSize - (remainder + (length - remainder)))
                {
                    tempString.Append(temp);
                }
                buffer.Enqueue(temp);
            }

            string prototype = tempString.ToString( );

            tempString = new StringBuilder( );

            for (int i = 0; i < length; i++)
            {
                tempString.Append(buffer.Dequeue( ));
            }

            Assert.IsTrue(CheckString(prototype, tempString.ToString( )));
        }
 /// <summary>
 /// 初始化
 /// </summary>
 public void Initialize(LuaEnv lua)
 {
     _eventDataCache    = new CircleBuffer <EventData>(100);
     _eventData         = new JWObjList <EventData>();
     _onUIEvent         = lua.Global.GetInPath <OnUIEventDelegate>("EventService.OnUIEvent");
     _onUIEventListener = lua.Global.GetInPath <OnUIEventListnerDelegate>("EventService.OnUIEventListener");
 }
        public void MoveWritePostionToTest()
        {
            var c = new CircleBuffer <byte>(1000);

            c.MoveWritePostionTo(100);
            Assert.AreEqual(c.WritePosition, 100);
        }
        public FilterSampleProvider(uint filterHalfLength)
        {
            InputSampleProvider = new DCSampleProvider();
            CornerFrequency     = 440d;

            filterCoefficients = new float[filterHalfLength];

            inputBuffer       = new float[0];
            inputCircleBuffer = new CircleBuffer(2 * filterHalfLength);

            // Generate filter coefficients
            //int center = filterLength / 2;
            for (int i = 0; i < filterCoefficients.Length; i++)
            {
                //filterCoefficients[i] = (float)Math.Pow(0.5d, i + 1d);  // Some BS

                // Approximate all-pass filter
                //filterCoefficients[i] = i == (filterCoefficients.Length - 1) ? 0.5f : 0f;

                // TODO Fix this half-remembered nonsense

                /*double phase = (i - center) / (double)SampleRate;
                 * double x = 2 * Math.PI * phase * cornerFrequency;
                 * filterCoefficients[i] = x != 0d ? (float)(Math.Sin(x) / x) : 1f;*/
                double phase = (i - (filterCoefficients.Length - 0.5d)) / 44100d;
                double x     = 2 * Math.PI * phase * cornerFrequency;
                filterCoefficients[i] = 0.5f * (x != 0d ? (float)(Math.Sin(x) / x) : 0f);

                // TODO Apply (real) window function
                filterCoefficients[i] *= Math.Min(1f, i * 10f / filterCoefficients.Length);
            }
        }
        public void ReadTest()
        {
            var c    = new CircleBuffer <byte>(10);
            var data = c.Read(20);

            Assert.AreEqual(data.Length, 20);
        }
        public void MoveReadPostionTest()
        {
            var c = new CircleBuffer <byte>(1000);

            c.Read(50);
            c.MoveReadPostion(50);
            Assert.AreEqual(c.ReadPosition, 100);
        }
Beispiel #8
0
 public void Add(CircleBuffer buffer)
 {
     if (loopbackBuffers.Count == 0)
     {
         Start();
     }
     loopbackBuffers.Add(buffer);
 }
Beispiel #9
0
 public void Remove(CircleBuffer buffer)
 {
     loopbackBuffers.Remove(buffer);
     if (loopbackBuffers.Count == 0)
     {
         Stop();
     }
 }
Beispiel #10
0
        public EchoSampleProvider()
        {
            inputBuffer      = new float[0];
            echoCircleBuffer = new CircleBuffer((uint)SampleRate);

            InputSampleProvider = new DCSampleProvider();

            Delay     = 0.5f;
            Amplitude = 0.5f;
        }
Beispiel #11
0
        public void TestMethod1()
        {
            CircleBuffer buffer = new CircleBuffer(2);

            buffer.Add('x');
            buffer.Add('y');
            char x = buffer.Get();

            Assert.AreEqual('x', x);
        }
        public ShoutcastMetadataEmbedder(int interval, CircleBuffer dataSource)
        {
            this.interval   = interval;
            this.dataSource = dataSource;
            this.readCount  = 0;

            metadata              = new byte[4080]; // max size = 16 * 255 (max byte value)
            metadata[0]           = 0;
            metadataLength        = 1;
            metadataWritePosition = 0;
        }
Beispiel #13
0
        public void TestMethod3()
        {
            CircleBuffer buffer = new CircleBuffer(1);

            buffer.Add('x');
            buffer.Add('y');
            buffer.Get();
            char y = buffer.Get();

            Assert.AreEqual('y', y);
        }
Beispiel #14
0
 private void Start()
 {
     anim            = GetComponentInChildren <Animation>();
     currentAccuracy = 0;
     heat            = 0;
     setLMG();
     m_RigidBody       = GetComponent <Rigidbody>();
     m_Capsule         = GetComponent <CapsuleCollider>();
     m_DoubleJumpReady = true;
     mouseLook.Init(transform, cam.transform);
     m_CircleBuffer = new CircleBuffer(advancedSettings.timeReverseSize);
 }
Beispiel #15
0
        public void Length()
        {
            CircleBuffer <int> buffer = new CircleBuffer <int>(random.Next(1, 50));

            int length = random.Next(1, 30);

            for (int i = 0; i < length; i++)
            {
                buffer.Enqueue(random.Next(1, 300));
            }

            Assert.IsTrue(buffer.Length == length);
        }
Beispiel #16
0
        public void TestMethod4()
        {
            CircleBuffer buffer = new CircleBuffer(3);

            buffer.Add('x');
            buffer.Add('y');
            buffer.Add('z');
            buffer.Add('a');
            buffer.Add('b');
            char tmp = buffer.Get();

            Assert.AreEqual('a', tmp);
        }
Beispiel #17
0
        public void WriteOver()
        {
            int length = random.Next(1, 50);

            CircleBuffer <int> buffer = new CircleBuffer <int>(length);

            int overLength = random.Next(50, 99);

            for (int i = 0; i < overLength; i++)
            {
                buffer.Enqueue(random.Next(1, 300));
            }

            Assert.IsTrue(buffer.Tail == overLength % length);
        }
 // Use this for initialization
 void Start()
 {
     m_hp    = 100;
     anim    = GetComponentInChildren <Animation>();
     weapon  = 1;
     pellets = 10;
     SetLMG();
     currentAccuracy = minimumAccuracy;
     heat            = 0;
     mouseLook.Init(transform, cam.transform);
     charController = GetComponent <CharacterController>();
     m_Capsule      = GetComponent <CapsuleCollider>();
     m_CircleBuffer = new CircleBuffer(1000);
     respawn        = GameObject.FindWithTag("Respawn");
 }
Beispiel #19
0
        public static CircleBuffer <TElement> BuildBuffer(int size)
        {
            var head = new CircleBuffer <TElement>();
            var hop  = head;

            for (int iteration = 1; iteration < size; iteration++)
            {
                hop.Next = new CircleBuffer <TElement>();
                hop      = hop.Next;
            }

            hop.Next = head;

            return(head);
        }
Beispiel #20
0
        private static void GetCircleBufferByRadius(float radius, out int segments, out CircleBuffer circle)
        {
#if DEBUG
            if (radius <= 0)
            {
                throw new Exception("Radius must be greater then zero.");
            }
#endif
            int guess = (int)Math.Max(12, Math.Log(radius) * (Math.Log(radius) * .75) * 12);
            segments = (int)Math.Pow(2, Math.Ceiling(Math.Log(guess) / Math.Log(2)));
            if (!Canvas.circles.ContainsKey(segments))
            {
                Canvas.circles[segments] = new CircleBuffer(segments);
                Debug.WriteLine("new CircleBuffer created for {0} segments.", segments);
            }
            circle = Canvas.circles[segments];
        }
Beispiel #21
0
        public void AllDequeue()
        {
            CircleBuffer <int> buffer = new CircleBuffer <int>(random.Next(1, 50));

            int length = random.Next(1, 30);

            for (int i = 0; i < length; i++)
            {
                buffer.Enqueue(random.Next(1, 300));
            }

            for (int i = 0; i < length; i++)
            {
                buffer.Dequeue( );
            }

            Assert.IsTrue(buffer.IsEmpty);
        }
 /// <summary>
 /// 反初始化
 /// </summary>
 public void UnInitialize()
 {
     if (_eventData != null)
     {
         for (int i = 0; i < _eventData.Count; i++)
         {
             if (_eventData[i].ID > 0)
             {
                 JW.Common.Log.LogE("LuaEvent.Uninitialize error : event data is not empty");
                 _eventData[i].Destroy(null);
             }
         }
         _eventData.Clear();
         _eventData = null;
     }
     if (_eventDataCache != null)
     {
         _eventDataCache.Clear();
         _eventDataCache = null;
     }
     _onUIEvent = null;
 }
        /// <summary>
        /// 调用接收器
        /// </summary>
        /// <param name="arg">事件参数</param>
        public void Invoke(ref EventArg arg)
        {
            if (_instance == null || _mi == null)
            {
                return;
            }

            if (_argObject == null)
            {
                _argObject = new CircleBuffer <object[]>(100);

                for (int i = 0; i < 100; i++)
                {
                    _argObject.Push(new object[1]);
                }
            }

            object[] argObjects;
            if (!_argObject.Pop(out argObjects))
            {
                JW.Common.Log.LogE("EventHandle - no enough arg objet");
                return;
            }

            argObjects[0] = arg;

            try
            {
                _mi.Invoke(_instance, argObjects);
            }
            catch (Exception e)
            {
                JW.Common.Log.LogE("EventHandler.Invoke : exception {0} at {1}:{2}:{3}", e, _id, _instance.GetType().Name, _mi.Name);
                throw;
            }

            argObjects[0] = null;
            _argObject.Push(argObjects);
        }
Beispiel #24
0
 private static void GetCircleBufferByRadius(float radius, out int segments, out CircleBuffer circle)
 {
     #if DEBUG
     if (radius <= 0)
         throw new Exception("Radius must be greater then zero.");
     #endif
     int guess = (int)Math.Max(12, Math.Log(radius) * (Math.Log(radius) * .75) * 12);
     segments = (int)Math.Pow(2, Math.Ceiling(Math.Log(guess) / Math.Log(2)));
     if (!Canvas.circles.ContainsKey(segments))
     {
         Canvas.circles[segments] = new CircleBuffer(segments);
         Debug.WriteLine("new CircleBuffer created for {0} segments.", segments);
     }
     circle = Canvas.circles[segments];
 }
 public ShoutcastMetadataEmbedder(CircleBuffer dataSource)
     : this(1024 * 512, dataSource)
 {
     // nothing to do here
 }
Beispiel #26
0
        public override bool Process(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session)
        {
            if (!request.Uri.AbsolutePath.StartsWith("/capture"))
            {
                return(false);
            }
            HttpServerUtil.DebugPrintRequest(request);

            HttpInputItem        deviceIdParam = request.Param["id"];
            CaptureDevice        device;
            CaptureDeviceHandler captureDevice;

            // First, get the specified lowlevel capture device
            if (deviceIdParam.Count == 1)
            {
                device = WasapiLoopbackCapture2.GetLoopbackCaptureDevices()[int.Parse(deviceIdParam.Value)];
            }
            else
            {
                device = WasapiLoopbackCapture2.GetDefaultLoopbackCaptureDevice();
            }

            // Then, get the capture device handler
            if (captureDevices.ContainsKey(device))
            {
                captureDevice = captureDevices[device];
            }
            else
            {
                captureDevice = new CaptureDeviceHandler(device);
                captureDevices.Add(device, captureDevice);
            }

            response.ContentLength = long.MaxValue;
            response.ContentType   = String.Format("audio/L16;rate={0};channels={1}",
                                                   captureDevice.WaveFormat.SampleRate,
                                                   captureDevice.WaveFormat.Channels);
            response.AddHeader("TransferMode.DLNA.ORG", "Streaming");
            response.AddHeader("Server", "UPnP/1.0 DLNADOC/1.50 LAB/1.0");
            response.AddHeader("icy-name", "Local Audio Broadcast");

            // create local output buffers
            CircleBuffer captureBuffer = new CircleBuffer(BUFFER_SIZE);

            byte[] buffer         = new byte[BUFFER_SIZE];
            byte[] emptiness100ms = new byte[captureDevice.WaveFormat.SampleRate / 10
                                             * captureDevice.WaveFormat.Channels
                                             * (captureDevice.WaveFormat.BitsPerSample / 8)];

            // register buffer for being filled with loopback samples
            captureDevice.Add(captureBuffer);

            IDataSource data = captureBuffer;

            EventHandler <TrackInfoChangedEventArgs> trackInfoHandler = null;

            if (request.Headers["Icy-MetaData"] == "1")
            {
                ShoutcastMetadataEmbedder me = new ShoutcastMetadataEmbedder(
                    captureDevice.WaveFormat.SampleRate * 2, // 1 second interval
                    captureBuffer);
                response.ProtocolVersion = "ICY";
                response.AddHeader("icy-metaint", me.Interval + "");
                data = me;
                me.SetTrackInfo(trackInfoProvider.TrackInfo);
                trackInfoHandler = new EventHandler <TrackInfoChangedEventArgs>(delegate(object sender, TrackInfoChangedEventArgs e) {
                    me.SetTrackInfo(e.TrackInfo);
                });
                trackInfoProvider.TrackInfoChanged += trackInfoHandler;
            }

            HttpServerUtil.DebugPrintResponse(response);
            Socket socket = HttpServerUtil.GetNetworkSocket(response);

            response.SendHeaders();

            int bytesRead = 0;

            while (socket.Connected)
            {
                Thread.Sleep(100);
                while (captureBuffer.Empty)
                {
                    //Thread.Sleep(200);
                    captureBuffer.Write(emptiness100ms, 0, emptiness100ms.Length);
                }
                lock (captureDevice.lockObject) {
                    bytesRead = data.Read(buffer, 0, buffer.Length);
                }
                //Console.WriteLine("buffer-{3} r {0} - {1} = {2}%", loopbackBuffer.FillLevel + bytesRead, bytesRead,
                //    (float)loopbackBuffer.FillLevel / loopbackBuffer.Length * 100, loopbackBuffer.GetHashCode());
                response.SendBody(buffer, 0, bytesRead);

                Console.WriteLine("sending {0} bytes = {1:0.00} secs", bytesRead, bytesRead /
                                  (double)captureDevice.loopbackCapture.WaveFormat.AverageBytesPerSecond);
            }

            if (trackInfoHandler != null)
            {
                trackInfoProvider.TrackInfoChanged -= trackInfoHandler;
            }

            // remove local output buffer
            captureDevice.Remove(captureBuffer);

            Console.WriteLine("request processing finished");

            return(true);
        }
        public override bool Process(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session)
        {
            if (!request.Uri.AbsolutePath.StartsWith("/capture"))
            {
                return(false);
            }
            HttpServerUtil.DebugPrintRequest(request);

            HttpInputItem        deviceIdParam = request.Param["id"];
            CaptureDevice        device;
            CaptureDeviceHandler captureDevice;

            // First, get the specified lowlevel capture device
            if (deviceIdParam.Count == 1)
            {
                device = WasapiLoopbackCapture2.GetLoopbackCaptureDevices()[int.Parse(deviceIdParam.Value)];
            }
            else
            {
                device = WasapiLoopbackCapture2.GetDefaultLoopbackCaptureDevice();
            }

            // Then, get the capture device handler
            if (captureDevices.ContainsKey(device))
            {
                captureDevice = captureDevices[device];
            }
            else
            {
                captureDevice = new CaptureDeviceHandler(device);
                captureDevices.Add(device, captureDevice);
            }

            HttpInputItem   formatParam = request.Param["format"];
            StreamingFormat format;

            if (formatParam.Count == 1)
            {
                format = StreamingFormat.GetFormat(formatParam.Value);
            }
            else
            {
                format = StreamingFormat.DefaultFormat;
            }

            response.ContentLength = long.MaxValue;
            response.ContentType   = format.GetFormatDescriptor(
                captureDevice.WaveFormat.SampleRate,
                captureDevice.WaveFormat.Channels);
            response.AddHeader("TransferMode.DLNA.ORG", "Streaming");
            response.AddHeader("Server", "UPnP/1.0 DLNADOC/1.50 LAB/1.0");
            response.AddHeader("icy-name", "Local Audio Broadcast");

            // create local output buffers
            CircleBuffer captureBuffer = new CircleBuffer(BUFFER_SIZE, new StreamingFormatTransform(format));

            byte[] buffer         = new byte[BUFFER_SIZE];
            byte[] emptiness100ms = new byte[captureDevice.WaveFormat.SampleRate / 10
                                             * captureDevice.WaveFormat.Channels
                                             * (captureDevice.WaveFormat.BitsPerSample / 8)];

            // register buffer for being filled with loopback samples
            captureDevice.Add(captureBuffer);

            IDataSource data = captureBuffer;

            EventHandler <TrackInfoChangedEventArgs> trackInfoHandler = null;

            if (request.Headers["Icy-MetaData"] == "1")
            {
                ShoutcastMetadataEmbedder me = new ShoutcastMetadataEmbedder(
                    captureDevice.WaveFormat.SampleRate * 2, // 1 second interval
                    captureBuffer);
                response.ProtocolVersion = "ICY";
                response.AddHeader("icy-metaint", me.Interval + "");
                data = me;
                me.SetTrackInfo(trackInfoProvider.TrackInfo);
                trackInfoHandler = new EventHandler <TrackInfoChangedEventArgs>(delegate(object sender, TrackInfoChangedEventArgs e) {
                    me.SetTrackInfo(e.TrackInfo);
                });
                trackInfoProvider.TrackInfoChanged += trackInfoHandler;
            }

            HttpServerUtil.DebugPrintResponse(response);
            Socket socket = HttpServerUtil.GetNetworkSocket(response);

            response.SendHeaders();

            if (format == StreamingFormat.WAV)
            {
                // build wav header
                byte[]       wavHeader = new byte[44];
                MemoryStream header    = new MemoryStream(wavHeader);
                using (BinaryWriter headerWriter = new BinaryWriter(header)) {
                    headerWriter.Write(Encoding.ASCII.GetBytes("RIFF"));
                    headerWriter.Write(uint.MaxValue - 8);
                    headerWriter.Write(Encoding.ASCII.GetBytes("WAVE"));
                    headerWriter.Write(Encoding.ASCII.GetBytes("fmt "));
                    headerWriter.Write(16);       // fmt chunk data size
                    headerWriter.Write((short)1); // format: 1 == PCM, 3 == PCM float
                    headerWriter.Write((short)captureDevice.WaveFormat.Channels);
                    headerWriter.Write(captureDevice.WaveFormat.SampleRate);
                    headerWriter.Write(captureDevice.WaveFormat.AverageBytesPerSecond);
                    headerWriter.Write((short)captureDevice.WaveFormat.BlockAlign);
                    headerWriter.Write((short)captureDevice.WaveFormat.BitsPerSample);
                    headerWriter.Write(Encoding.ASCII.GetBytes("data"));
                    headerWriter.Write(uint.MaxValue - 44);
                }

                // send header
                // To retain the correct Shoutcast metadata interval bytecount, the header must be written
                // to the intermediary captureBuffer instead of directly to the response.
                captureBuffer.Write(wavHeader, 0, wavHeader.Length);
            }

            // send audio data
            int bytesRead = 0;

            while (socket.Connected)
            {
                Thread.Sleep(100);
                while (captureBuffer.Empty)
                {
                    //Thread.Sleep(200);
                    captureBuffer.Write(emptiness100ms, 0, emptiness100ms.Length);
                }
                lock (captureDevice.lockObject) {
                    bytesRead = data.Read(buffer, 0, buffer.Length);
                }
                //Console.WriteLine("buffer-{3} r {0} - {1} = {2}%", loopbackBuffer.FillLevel + bytesRead, bytesRead,
                //    (float)loopbackBuffer.FillLevel / loopbackBuffer.Length * 100, loopbackBuffer.GetHashCode());
                response.SendBody(buffer, 0, bytesRead);

                Console.WriteLine("sending {0} bytes = {1:0.00} secs", bytesRead, bytesRead /
                                  (double)captureDevice.loopbackCapture.WaveFormat.AverageBytesPerSecond);
            }

            if (trackInfoHandler != null)
            {
                trackInfoProvider.TrackInfoChanged -= trackInfoHandler;
            }

            // remove local output buffer
            captureDevice.Remove(captureBuffer);

            Console.WriteLine("request processing finished");

            return(true);
        }
        public void DisposeTest()
        {
            var c = new CircleBuffer <byte>(10);

            c.Dispose();
        }