Esempio n. 1
0
        public void push(double[] l, double[] r, int length)
        {
            int remain = length;
            int offset = 0;

            while (remain > 0)
            {
                int amount = (remain > BUFLEN) ? BUFLEN : remain;
                for (int i = 0; i < BUFLEN; i++)
                {
                    mBufferL[i] = l[i + offset];
                    mBufferR[i] = r[i + offset];
                }
                foreach (WaveSender s in mSenders)
                {
                    s.pull(mBuffer2L, mBuffer2R, amount);
                    for (int i = 0; i < BUFLEN; i++)
                    {
                        mBufferL[i] += mBuffer2L[i];
                        mBufferR[i] += mBuffer2R[i];
                    }
                }
                if (mReceiver != null)
                {
                    mReceiver.push(mBufferL, mBufferR, amount);
                }
                remain -= amount;
                offset += amount;
            }
        }
Esempio n. 2
0
        public void begin(long samples, WorkerState state)
        {
            if (mReceiver == null)
            {
                return;
            }
            mRunning      = true;
            mTotalSamples = samples;
            double[] l = new double[BUFLEN];
            double[] r = new double[BUFLEN];
            for (int i = 0; i < BUFLEN; i++)
            {
                l[i] = 0.0;
                r[i] = 0.0;
            }
            long remain = samples;

            while (remain > 0 && !mAbortRequested)
            {
                int amount = (remain > BUFLEN) ? BUFLEN : (int)remain;
                mReceiver.push(l, r, amount);
                remain       -= amount;
                mTotalAppend += amount;
            }
            mRunning = false;
            mReceiver.end();
        }
Esempio n. 3
0
 public void push(double[] l, double[] r, int length)
 {
     lock (mSyncRoot) {
         mAdapter.append(l, r, length);
         if (mReceiver != null)
         {
             mReceiver.push(l, r, length);
         }
     }
 }
 public void push(double[] l, double[] r, int length)
 {
     if (mFirstCall)
     {
         mSampleRate = mRoot.getSampleRate();
         PlaySound.init();
         PlaySound.prepare(mSampleRate);
         mFirstCall = false;
     }
     PlaySound.append(l, r, length);
     mPosition += length;
     if (mReceiver != null)
     {
         mReceiver.push(l, r, length);
     }
 }
        public void begin(long length, WorkerState state)
        {
            mRunning      = true;
            mTotalSamples = length;
            long remain = length;

            while (remain > 0 && !state.isCancelRequested())
            {
                int amount = (remain > BUFLEN) ? BUFLEN : (int)remain;
                mWaveSender.pull(mBufferL, mBufferR, amount);
                mReceiver.push(mBufferL, mBufferR, amount);
                remain       -= amount;
                mTotalAppend += amount;
            }
            mWaveSender.end();
            mReceiver.end();
            mRunning = false;
        }
        private void doSynthesis(long to_sample, double[] left, double[] right, WorkerState state)
        {
            int  buffer_length = left.Length;
            long remain        = to_sample - position_;

            while (0 < remain && !state.isCancelRequested())
            {
                int process = buffer_length < remain ? buffer_length : (int)remain;
                Array.Clear(left, 0, process);
                Array.Clear(right, 0, process);
                driver_.process(left, right, process);
                if (receiver_ != null)
                {
                    receiver_.push(left, right, process);
                }
                remain    -= process;
                position_ += process;
                state.reportProgress(position_);
            }
        }
        private void waveIncoming(double[] l, double[] r, int length)
        {
            //int length = l.Length;
            int offset = 0;

            if (mTrimRemain > 0)
            {
                if (length <= mTrimRemain)
                {
                    mTrimRemain -= length;
                    return;
                }
                else
                {
                    offset      = mTrimRemain;
                    mTrimRemain = 0;
                }
            }
            int remain = length - offset;

            while (remain > 0)
            {
                int amount = (remain > BUFLEN) ? BUFLEN : remain;
                for (int i = 0; i < amount; i++)
                {
                    mBufferL[i] = l[i + offset];
                    mBufferR[i] = r[i + offset];
                }
#if DEBUG
                log.WriteLine("waveIncoming; sending " + amount + " samples...");
#endif
                mReceiver.push(mBufferL, mBufferR, amount);
#if DEBUG
                log.WriteLine("waveIncoming; ...done.");
#endif
                remain       -= amount;
                offset       += amount;
                mTotalAppend += amount;
            }
        }
Esempio n. 8
0
        public void push(double[] l, double[] r, int length)
        {
            if (mReceiver == null)
            {
                mPosition += length;
                return;
            }

            int remain = length;

            while (remain > 0)
            {
                int amount = (remain > _BUFLEN) ? _BUFLEN : remain;
                for (int i = 0; i < amount; i++)
                {
                    mBufferL[i] = 0.0;
                    mBufferR[i] = 0.0;
                }
                int offset = length - remain;
                if (mView != null)
                {
                    mAmpL = mView.getAmplifyL();
                    mAmpR = mView.getAmplifyR();
                }

                // 左チャンネル
                if (mAmpL != 0.0)
                {
                    if (mAmpL == 1.0)
                    {
                        // 増幅率1の場合
                        for (int i = 0; i < amount; i++)
                        {
                            mBufferL[i] = l[i + offset];
                        }
                    }
                    else
                    {
                        for (int i = 0; i < amount; i++)
                        {
                            mBufferL[i] = l[i + offset] * mAmpL;
                        }
                    }
                    for (int i = 0; i < amount; i++)
                    {
                        if (mBufferL[i] > 1.0)
                        {
                            mBufferL[i] = 1.0;
                        }
                        else if (mBufferL[i] < -1.0)
                        {
                            mBufferL[i] = -1.0;
                        }
                    }
                }

                // 右チャンネル
                if (mAmpR != 0.0)
                {
                    if (mAmpR == 1.0)
                    {
                        // 増幅率1の場合
                        for (int i = 0; i < amount; i++)
                        {
                            mBufferR[i] = r[i + offset];
                        }
                    }
                    else
                    {
                        for (int i = 0; i < amount; i++)
                        {
                            mBufferR[i] = r[i + offset] * mAmpR;
                        }
                    }
                    for (int i = 0; i < amount; i++)
                    {
                        if (mBufferR[i] > 1.0)
                        {
                            mBufferR[i] = 1.0;
                        }
                        else if (mBufferR[i] < -1.0)
                        {
                            mBufferR[i] = -1.0;
                        }
                    }
                }

                remain    -= amount;
                mPosition += amount;
                mReceiver.push(mBufferL, mBufferR, amount);
            }
        }