Ejemplo n.º 1
0
        // S_LoadSound
        private SoundEffectCache_t LoadSound(SoundEffect_t s)
        {
            // see if still in memory
            var sc = ( SoundEffectCache_t )Host.Cache.Check(s.cache);

            if (sc != null)
            {
                return(sc);
            }

            // load it in
            var namebuffer = "sound/" + s.name;

            var data = FileSystem.LoadFile(namebuffer);

            if (data == null)
            {
                Host.Console.Print("Couldn't load {0}\n", namebuffer);
                return(null);
            }

            var info = GetWavInfo(s.name, data);

            if (info.channels != 1)
            {
                Host.Console.Print("{0} is a stereo sample\n", s.name);
                return(null);
            }

            var stepscale = info.rate / ( Single )_shm.speed;
            var len       = ( Int32 )(info.samples / stepscale);

            len *= info.width * info.channels;

            s.cache = Host.Cache.Alloc(len, s.name);
            if (s.cache == null)
            {
                return(null);
            }

            sc           = new SoundEffectCache_t( );
            sc.length    = info.samples;
            sc.loopstart = info.loopstart;
            sc.speed     = info.rate;
            sc.width     = info.width;
            sc.stereo    = info.channels;
            s.cache.data = sc;

            ResampleSfx(s, sc.speed, sc.width, new ByteArraySegment(data, info.dataofs));

            return(sc);
        }
Ejemplo n.º 2
0
        // SND_PaintChannelFrom16
        private void PaintChannelFrom16(Channel_t ch, SoundEffectCache_t sc, int count)
        {
            var leftvol  = ch.leftvol;
            var rightvol = ch.rightvol;
            var sfx      = sc.data;
            var offset   = ch.pos * 2; // sfx = (signed short *)sc->data + ch->pos;

            for (var i = 0; i < count; i++)
            {
                int data  = ( short )(( ushort )sfx[offset] + (( ushort )sfx[offset + 1] << 8));       // Uze: check is this is right!!!
                var left  = (data * leftvol) >> 8;
                var right = (data * rightvol) >> 8;
                this._PaintBuffer[i].left  += left;
                this._PaintBuffer[i].right += right;
                offset += 2;
            }

            ch.pos += count;
        }
Ejemplo n.º 3
0
        // SND_PaintChannelFrom8
        private void PaintChannelFrom8(Channel_t ch, SoundEffectCache_t sc, int count)
        {
            if (ch.leftvol > 255)
            {
                ch.leftvol = 255;
            }
            if (ch.rightvol > 255)
            {
                ch.rightvol = 255;
            }

            var lscale = ch.leftvol >> 3;
            var rscale = ch.rightvol >> 3;
            var sfx    = sc.data;
            var offset = ch.pos;

            for (var i = 0; i < count; i++)
            {
                int data = sfx[offset + i];
                this._PaintBuffer[i].left  += this._ScaleTable[lscale, data];
                this._PaintBuffer[i].right += this._ScaleTable[rscale, data];
            }
            ch.pos += count;
        }