示例#1
0
        public RIFFHeader(int format, int channels, int bitsPerSample, int sampleRate, int numSamples)
        {
            _tag      = RIFFTag;
            _waveTag  = WAVETag;
            _fmtChunk = new fmtChunk(format, channels, bitsPerSample, sampleRate);
            uint dataLen = (uint)(numSamples * _fmtChunk._blockAlign);

            _dataChunk = new dataChunk(dataLen);
            _length    = (dataLen + Size) - 8;
        }
示例#2
0
        public RIFFHeader(VoidPtr wav)
        {
            _tag = wav[0, 4];
            int format, channels, bitsPerSample, sampleRate, numSamples;

            _waveTag  = WAVETag;
            _fmtChunk = new fmtChunk(1, 1, 1, 1);
            uint dataLen = ( uint )(1 * _fmtChunk._blockAlign);

            _dataChunk = new dataChunk(dataLen);
            _length    = (dataLen + Size) - 8;
        }
示例#3
0
        internal PCMStream(FileMap map)
        {
            _sourceMap = map;

            RIFFHeader *header = (RIFFHeader *)_sourceMap.Address;
            //May be more subchunks between RIFF and data, so search for data.
            dataChunk realDataChunk = new dataChunk();
            VoidPtr   dataPtr       = 0;

            for (int i = 0; i < _sourceMap.Length; i++)
            {
                byte *dat = (byte *)_sourceMap.Address.address;
                dat += i;
                if (i == 0xa6)
                {
                    i = 0xa6;
                }
                if (*dat == 'd')
                {
                    if (*(++dat) == 'a' && *(++dat) == 't' && *(++dat) == 'a')
                    {
                        realDataChunk._chunkTag  = *( uint * )dat - 3;
                        realDataChunk._chunkSize = *( uint * )(dat + 1);
                        dataPtr = dat + 5;
                        break;
                    }
                }
            }
            _bps         = header->_fmtChunk._bitsPerSample;
            _numChannels = header->_fmtChunk._channels;
            _frequency   = (int)header->_fmtChunk._samplesSec;
            _numSamples  = (int)(realDataChunk._chunkSize / header->_fmtChunk._blockAlign);

            _source    = ( short * )(dataPtr);
            _samplePos = 0;
        }
示例#4
0
 public RIFFHeader(int format, int channels, int bitsPerSample, int sampleRate, int numSamples)
 {
     _tag = RIFFTag;
     _waveTag = WAVETag;
     _fmtChunk = new fmtChunk(format, channels, bitsPerSample, sampleRate);
     uint dataLen = (uint)(numSamples * _fmtChunk._blockAlign);
     _length = 0;
     _dataChunk = new dataChunk(dataLen);
     _length = (dataLen + GetSize()) - 8;
 }