DSPUtil.WaveReader.NextDouble C# (CSharp) Method

NextDouble() private method

private NextDouble ( BinaryReader rdr ) : double
rdr System.IO.BinaryReader
return double
        private double NextDouble(BinaryReader rdr)
        {
            double val = 0;
            if (_bigEndian)
            {
                // For now only handle 16-bit big-endian data
                if (_bitsPerSample == 16)
                {
                    short beword = rdr.ReadInt16();
                    beword = System.Net.IPAddress.NetworkToHostOrder(beword);
                    val = ((double)beword * _scale16);
                }
            }
            else
            {
                switch (_bitsPerSample)
                {
                    case 16:
                        val = ((double)rdr.ReadInt16() * _scale16);
                        break;
                    case 8:
                        val = ((double)rdr.ReadByte() - 128) * _scale8;        // 8-bit PCM uses unsigned bytes
                        break;
                    case 24:
                        // Little-endian, signed 24-bit
                        int a = (int)rdr.ReadUInt16();
                        int b = (int)rdr.ReadSByte();
                        int c = (b << 16) + a;
                        val = ((double)c) * _scale24;
                        break;
                    case 32:
                        if (_audioFormat == WaveFormat.IEEE_FLOAT)
                        {
                            val = (double)rdr.ReadSingle();
                        }
                        else
                        {
                            val = ((double)rdr.ReadInt32()) * _scale32;
                        }
                        break;
                    case 64:
                        if ((_audioFormat == WaveFormat.IEEE_FLOAT) || (_audioFormat == WaveFormat.INTERNAL_DOUBLE))
                        {
                            val = rdr.ReadDouble();
                        }
                        else
                        {
                            // throw new Exception("64-bit PCM not handled");
                            val = 0;
                        }
                        break;
                }
            }
            return val;
        }