Пример #1
0
        public THPStream(THPNode node)
        {
            byte *sPtr;
            short yn1 = 0, yn2 = 0;

            _numChannels = (int)node.Channels;
            _sampleRate  = (int)node.Frequency;
            _numSamples  = (int)node.NumSamples;
            _numBlocks   = (int)node.NumFrames;

            _blockStates   = new ADPCMState[_numChannels, _numBlocks];
            _currentStates = new ADPCMState[_numChannels];
            _audioBlocks   = new THPAudioBlock[_numBlocks];

            //Fill block states in a linear fashion
            for (int frame = 0; frame < node.NumFrames; frame++)
            {
                THPFrame             f      = node._frames[frame];
                ThpAudioFrameHeader *header = f.Audio;
                for (int channel = 0; channel < _numChannels; channel++)
                {
                    sPtr = header->GetAudioChannel(channel);

                    short[] coefs;
                    if (channel == 0)
                    {
                        yn1   = header->_c1yn1;
                        yn2   = header->_c1yn2;
                        coefs = header->Coefs1;
                    }
                    else
                    {
                        yn1   = header->_c2yn1;
                        yn2   = header->_c2yn2;
                        coefs = header->Coefs2;
                    }

                    //Get block state
                    _blockStates[channel, frame] =
                        new ADPCMState(sPtr, *sPtr, yn1, yn2, coefs); //Use ps from data stream
                }

                _audioBlocks[frame] = new THPAudioBlock(header->_blockSize, header->_numSamples);
            }
        }
Пример #2
0
 public THPFrame(VoidPtr addr, uint size, THPNode node)
 {
     _source = new DataSource(addr, (int)size);
     _node   = node;
 }
Пример #3
0
        public THPStream(THPNode node)
        {
            byte* sPtr;
            short yn1 = 0, yn2 = 0;

            _numChannels = (int)node.Channels;
            _sampleRate = (int)node.Frequency;
            _numSamples = (int)node.NumSamples;
            _numBlocks = (int)node.NumFrames;

            _blockStates = new ADPCMState[_numChannels, _numBlocks];
            _currentStates = new ADPCMState[_numChannels];
            _audioBlocks = new THPAudioBlock[_numBlocks];

            //Fill block states in a linear fashion
            for (int frame = 0; frame < node.NumFrames; frame++)
            {
                THPFrame f = node._frames[frame];
                ThpAudioFrameHeader* header = f.Audio;
                for (int channel = 0; channel < _numChannels; channel++)
                {
                    sPtr = header->GetAudioChannel(channel);

                    short[] coefs;
                    if (channel == 0)
                    {
                        yn1 = header->_c1yn1;
                        yn2 = header->_c1yn2;
                        coefs = header->Coefs1;
                    }
                    else
                    {
                        yn1 = header->_c2yn1;
                        yn2 = header->_c2yn2;
                        coefs = header->Coefs2;
                    }

                    //Get block state
                    _blockStates[channel, frame] = new ADPCMState(sPtr, *sPtr, yn1, yn2, coefs); //Use ps from data stream
                }
                _audioBlocks[frame] = new THPAudioBlock(header->_blockSize, header->_numSamples);
            }
        }
Пример #4
0
 public THPFrame(VoidPtr addr, uint size, THPNode node)
 {
     _source = new DataSource(addr, (int)size);
     _node = node;
 }
        private void TargetChanged(THPNode newTarget)
        {
            if (_targetSource == newTarget)
                return;

            Close();

            if ((_targetSource = newTarget) == null)
                return;

            previewPanel1.RenderingTarget = _targetSource;

            IAudioStream s = _targetSource._audio;

            //Create provider
            if (_provider == null && s != null)
            {
                _provider = AudioProvider.Create(null);
                _provider.Attach(this);
            }

            chkLoop.Checked = false;

            //Create buffer for stream
            if (s != null)
                _buffer = _provider.CreateBuffer(s);

            if (_targetSource.FrameRate > 0)
                _frameTime = new DateTime((long)((float)_targetSource.NumFrames * 10000000.0f / _targetSource.FrameRate));

            trackBar1.Value = 0;
            trackBar1.TickStyle = TickStyle.None;
            trackBar1.Maximum = (int)_targetSource.NumFrames;
            trackBar1.TickFrequency = (int)_targetSource.NumFrames;
            trackBar1.TickStyle = TickStyle.BottomRight;

            if (_targetSource.FrameRate > 0)
                UpdateTimeDisplay();

            Enabled = _targetSource.NumFrames > 0;
        }
        private void Close()
        {
            //Stop playback
            Stop();

            _targetSource = null;

            //Reset fields
            chkLoop.Checked = false;
        }