예제 #1
0
        byte[] processPacket(byte[] alacFrame)
        {
            if (alacFrame == null)
            {
                return(silence);
            }

            int[] outBuffer  = new int[(audioSession.FrameSize + 3) * 2];
            int   outputsize = AlacDecodeUtils.DecodeFrame(audioSession.AlacFile, alacFrame, outBuffer);

            if (outputsize != audioSession.FrameSize * 4)
            {
                Logger.Warn("Alac Decoder: Unexpected audio frame size. Expected: {0}, Actual: {1}", audioSession.FrameSize * 4, outputsize);
            }

            int actualDataLength;

            if (manageBuffer)
            {
                int[] output = new int[outBuffer.Length];
                actualDataLength = stuffBuffer(audioSession.Filter.PlaybackRate, outBuffer, output) * 2;
                outBuffer        = output;
            }
            else
            {
                actualDataLength = audioSession.FrameSize * 2;
            }

            byte[] pcmData = new byte[actualDataLength * 2];
            int    j       = 0;

            for (int i = 0; i < actualDataLength; i++)
            {
                //PCM data is received in big endian - we need little
                pcmData[j++] = (byte)(outBuffer[i]);
                pcmData[j++] = (byte)(outBuffer[i] >> 8);
            }
            return(pcmData);
        }
예제 #2
0
        AlacFile createAlac()
        {
            if (sampleSize != 16)
            {
                return(null);
            }

            AlacFile alac = AlacDecodeUtils.create_alac(sampleSize, 2);

            alac.setinfo_max_samples_per_frame = frameSize;
            alac.setinfo_7a                  = _7a;
            alac.setinfo_sample_size         = sampleSize;
            alac.setinfo_rice_historymult    = rice_historymult;
            alac.setinfo_rice_initialhistory = rice_initialhistory;
            alac.setinfo_rice_kmodifier      = rice_kmodifier;
            alac.setinfo_7f                  = channels;
            alac.setinfo_80                  = _80;
            alac.setinfo_82                  = _82;
            alac.setinfo_86                  = _86;
            alac.setinfo_8a_rate             = sampleRate;
            return(alac);
        }