コード例 #1
0
        private void buttonSave_Click(object sender, EventArgs e)
        {
            WriteToFile("my.wav", (Int16[])buffer.Read(
                            0,
                            Int16.MaxValue.GetType(),
                            LockFlag.None,
                            buffer.Caps.BufferBytes / 2
                            ));

            MessageBox.Show("Saved");
        }
コード例 #2
0
        /// <summary>
        ///     Retrieves the current data this buffer holds.
        /// </summary>
        byte[] ISampleBuffer.GetCurrentData()
        {
            if (_bufferLength == 0)
            {
                return(new byte[0]);
            }

            Stream stream = new MemoryStream(_bufferLength);

            _buffer.Read(0, stream, _bufferLength, LockFlag.EntireBuffer);
            byte[] data = new byte[_bufferLength];
            stream.Read(data, 0, _bufferLength);
            stream.Close();
            return(data);
        }
コード例 #3
0
ファイル: AudioPlayer.cs プロジェクト: daisy/obi
        void RefreshBuffer()
        {
            int ReadPosition;
            // variable to count byte difference in compressed and non compressed data of audio file
            int reduction = 0;

            while (m_lPlayed < m_lLength)
            {            //1
                if (SoundBuffer.Status.BufferLost)
                {
                    SoundBuffer.Restore();
                }

                reduction = 0;
                Thread.Sleep(50);
                ReadPosition = SoundBuffer.PlayPosition;

                if (ReadPosition < ((m_SizeBuffer) - m_UpdateVMArrayLength))
                {
                    Array.Copy(SoundBuffer.Read(ReadPosition, typeof(byte), LockFlag.None, m_UpdateVMArrayLength), arUpdateVM, m_UpdateVMArrayLength);
                    //if ( m_EventsEnabled == true)
                    //ob_UpdateVuMeter.NotifyUpdateVuMeter ( this, ob_UpdateVuMeter ) ;
                    UpdateVuMeter(this, new events.AudioPlayerEvents.UpdateVuMeter());                      // JQ
                }
                // check if play cursor is in second half , then refresh first half else second
                if ((m_BufferCheck % 2) == 1 && SoundBuffer.PlayPosition > m_RefreshLength)
                {                //2
                    // Checks if file is played or byteBuffer is played
                    if (m_PlayFile == true)
                    {                    //3
                        LoadStream(false);
                        // check for normal or fast play
                        if (m_FastPlay == false)
                        {                        //4
                            SoundBuffer.Write(0, m_MemoryStream, m_RefreshLength, 0);
                        }                        //-4
                        else
                        {                        //4
                            for (int i = 0; i < m_RefreshLength; i = i + (m_Step * m_FrameSize))
                            {
                                SoundBuffer.Write(i, m_MemoryStream, m_Step * m_FrameSize, 0);
                                i         = i - (2 * m_FrameSize);
                                reduction = reduction + (2 * m_FrameSize);
                            }            //-4
                        }                //-3
                    }                    //-2

                    m_lPlayed = m_lPlayed + m_RefreshLength + reduction + m_CompAddition;

                    m_BufferCheck++;
                }                //-1
                else if ((m_BufferCheck % 2 == 0) && SoundBuffer.PlayPosition < m_RefreshLength)
                {                //1
                    if (m_PlayFile == true)
                    {            //2
                        LoadStream(false);
                        if (m_FastPlay == false)
                        {                        //3
                            SoundBuffer.Write(m_RefreshLength, m_MemoryStream, m_RefreshLength, 0);
                        }                        //-3
                        else
                        {                        //3
                            for (int i = 0; i < m_RefreshLength; i = i + (m_Step * m_FrameSize))
                            {                    //4
                                SoundBuffer.Write(i + m_RefreshLength, m_MemoryStream, m_Step * m_FrameSize, 0);
                                i         = i - (2 * m_FrameSize);
                                reduction = reduction + (2 * m_FrameSize);
                            }                                                                           //-4

                            // end of FastPlay check
                        }                //-3
                    }                    //-2


                    m_lPlayed = m_lPlayed + m_RefreshLength + reduction + m_CompAddition;

                    m_BufferCheck++;

                    // end of even/ odd part of buffer;
                }                //-1


                // end of while
            }
            // calculate time to stop according to remaining data
            int    time;
            long   lRemaining = (m_lPlayed - m_lLength);
            double dTemp;

            dTemp = ((m_RefreshLength + m_RefreshLength - lRemaining) * 1000) / m_RefreshLength;
            time  = Convert.ToInt32(dTemp * 0.48);

            //if (m_FastPlay == true)
            //time = (time-250) * (1- (2/m_Step));

            Thread.Sleep(time);

            // Stopping process begins
            SoundBuffer.Stop();
            if (ob_VuMeter != null)
            {
                ob_VuMeter.Reset();
            }
            if (m_PlayFile == true)
            {
                m_br.Close();
                //ob_EndOfAudioAsset.NotifyEndOfAudioAsset ( this , ob_EndOfAudioAsset) ;
            }


            //Stop () ;
            // changes the state and trigger events
            //ob_StateChanged = new StateChanged (m_State) ;

            EndOfAudioAsset(this, new events.AudioPlayerEvents.EndOfAudioAsset());              // JQ


            events.AudioPlayerEvents.StateChanged e = new events.AudioPlayerEvents.StateChanged(m_State);
            m_State = AudioPlayerState.Stopped;
            TriggerStateChangedEvent(e);

            // RefreshBuffer ends
        }
コード例 #4
0
        void RefreshBuffer()
        {
            CalculationFunctions calc = new CalculationFunctions();
            int ReadPosition;
            // variable to count byte difference in compressed and non compressed data of audio file
            int reduction = 0;

            while (m_lPlayed < m_lLength)
            {            //1
                if (SoundBuffer.Status.BufferLost)
                {
                    SoundBuffer.Restore();
                }

                reduction = 0;
                Thread.Sleep(50);
                ReadPosition = SoundBuffer.PlayPosition;
                if (ReadPosition < ((m_SizeBuffer) - m_UpdateVMArrayLength))
                {
                    Array.Copy(SoundBuffer.Read(ReadPosition, typeof(byte), LockFlag.None, m_UpdateVMArrayLength), arUpdateVM, m_UpdateVMArrayLength);
                    ob_UpdateVuMeter.NotifyUpdateVuMeter(this, ob_UpdateVuMeter);
                }
                // check if play cursor is in second half , then refresh first half else second
                if ((m_BufferCheck % 2) == 1 && SoundBuffer.PlayPosition > m_RefreshLength)
                {                //2
                    // Checks if file is played or byteBuffer is played
                    if (m_PlayFile == true)
                    {                    //3
                        // check for normal or fast play
                        if (m_FastPlay == false)
                        {                        //4
                            SoundBuffer.Write(0, fs, m_RefreshLength, 0);
                        }                        //-4
                        else
                        {                        //4
                            for (int i = 0; i < m_RefreshLength; i = i + (m_Step * m_FrameSize))
                            {
                                SoundBuffer.Write(i, fs, m_Step * m_FrameSize, 0);
                                i         = i - (2 * m_FrameSize);
                                reduction = reduction + (2 * m_FrameSize);
                            }            //-4
                        }                //-3
                    }                    //-2
                    else
                    {                    //2
                        for (int i = 0; i < m_RefreshLength; i++)
                        {
                            RefreshArray[i] = ByteBuffer [m_lArrayPosition + i];
                        }

                        SoundBuffer.Write(0, RefreshArray, 0);
                        m_lArrayPosition = m_lArrayPosition + m_RefreshLength;
                    }                    //-2
                    m_lPlayed = m_lPlayed + m_RefreshLength + reduction;

                    m_BufferCheck++;
                }                //-1
                else if ((m_BufferCheck % 2 == 0) && SoundBuffer.PlayPosition < m_RefreshLength)
                {                //1
                    if (m_PlayFile == true)
                    {            //2
                        if (m_FastPlay == false)
                        {        //3
                            SoundBuffer.Write(m_RefreshLength, fs, m_RefreshLength, 0);
                        }        //-3
                        else
                        {        //3
                            for (int i = 0; i < m_RefreshLength; i = i + (m_Step * m_FrameSize))
                            {    //4
                                SoundBuffer.Write(i + m_RefreshLength, fs, m_Step * m_FrameSize, 0);
                                i         = i - (2 * m_FrameSize);
                                reduction = reduction + (2 * m_FrameSize);
                            }                                                                           //-4

                            // end of FastPlay check
                        }                //-3
                    }                    //-2
                    else
                    {                    //2
                        for (int i = 0; i < m_RefreshLength; i++)
                        {
                            RefreshArray[i] = ByteBuffer [m_lArrayPosition + i];
                        }

                        SoundBuffer.Write(m_RefreshLength, RefreshArray, 0);
                        m_lArrayPosition = m_lArrayPosition + m_RefreshLength;
                        // end of file check
                    }                    //-2

                    m_lPlayed = m_lPlayed + m_RefreshLength + reduction;

                    m_BufferCheck++;

                    // end of even/ odd part of buffer;
                }                //-1


                // end of while
            }
            // calculate time to stop according to remaining data
            int    time;
            long   lRemaining = (m_lPlayed - m_lLength);
            double dTemp;

            dTemp = ((m_RefreshLength + m_RefreshLength - lRemaining) * 1000) / m_RefreshLength;
            time  = Convert.ToInt32(dTemp * 0.48);

            //if (m_FastPlay == true)
            //time = (time-250) * (1- (2/m_Step));

            Thread.Sleep(time);

            // Stopping process begins
            SoundBuffer.Stop();
            if (m_PlayFile == true)
            {
                fs.Close();
                ob_EndOfAudioAsset.NotifyEndOfAudioAsset(this, ob_EndOfAudioAsset);
            }
            else
            {
                m_lArrayPosition = 0;
                ByteBuffer       = null;
                ob_EndOfAudioBuffer.NotifyEndOfAudioBuffer(this, ob_EndOfAudioBuffer);
            }
            //Stop () ;
            // changes the state and trigger events
            //ob_StateChanged = new StateChanged (m_State) ;

            //StateChanged ob_StateChanged = new StateChanged (m_State) ;
            StateChanged ob_StateChanged = StateChanged.From(m_State);

            m_State = AudioPlayerState.stopped;

            TriggerStateChangedEvent(ob_StateChanged);
            StateChangedEvent(this, ob_StateChanged);
            //ob_EndOfFile.TriggerEndOfFileEvent ( m_Asset.Path);

            // RefreshBuffer ends
        }