示例#1
0
        public UmdBrowserSound(Memory mem, IVirtualFile vFile, int codecType, sceAtrac3plus.AtracFileInfo atracFileInfo)
        {
            initMemory(mem);

            sbyte[] audioData          = Utilities.readCompleteFile(vFile);
            int     atracBytesPerFrame = (((audioData[2] & 0x03) << 8) | ((audioData[3] & 0xFF) << 3)) + 8;
            int     headerLength       = 8;

            inputLength = 0;
            for (int i = 0; i < audioData.Length; i += headerLength + atracBytesPerFrame)
            {
                write(mem, inputAddr + inputLength, audioData, i + headerLength, atracBytesPerFrame);
                inputLength += atracBytesPerFrame;
            }
            atracFileInfo.atracBytesPerFrame = atracBytesPerFrame;

            if (read(codecType, atracFileInfo))
            {
                startThread();
            }
            else
            {
                threadExit = true;
            }
        }
示例#2
0
        private bool read(sbyte[] data)
        {
            if (data == null || data.Length == 0)
            {
                return(false);
            }

            inputLength = data.Length;
            IMemoryWriter memoryWriter = MemoryWriter.getMemoryWriter(inputAddr, inputLength, 1);

            for (int i = 0; i < data.Length; i++)
            {
                memoryWriter.writeNext(data[i] & 0xFF);
            }
            memoryWriter.flush();

            sceAtrac3plus.AtracFileInfo atracFileInfo = new sceAtrac3plus.AtracFileInfo();
            int codecType = sceAtrac3plus.analyzeRiffFile(mem, inputAddr, inputLength, atracFileInfo);

            if (codecType < 0)
            {
                return(false);
            }

            bool result = read(codecType, atracFileInfo);

            return(result);
        }
示例#3
0
        private bool read(int codecType, sceAtrac3plus.AtracFileInfo atracFileInfo)
        {
            codec = CodecFactory.getCodec(codecType);
            if (codec == null)
            {
                return(false);
            }

            int result = codec.init(atracFileInfo.atracBytesPerFrame, atracFileInfo.atracChannels, atracFileInfo.atracChannels, atracFileInfo.atracCodingMode);

            if (result < 0)
            {
                return(false);
            }

            AudioFormat audioFormat = new AudioFormat(44100, 16, atracFileInfo.atracChannels, true, false);

            DataLine.Info info = new DataLine.Info(typeof(SourceDataLine), audioFormat);
            try
            {
                mLine = (SourceDataLine)AudioSystem.getLine(info);
                mLine.open(audioFormat);
            }
            catch (LineUnavailableException)
            {
                return(false);
            }
            mLine.start();

            inputOffset        = atracFileInfo.inputFileDataOffset;
            inputPosition      = inputOffset;
            inputBytesPerFrame = atracFileInfo.atracBytesPerFrame;
            channels           = atracFileInfo.atracChannels;

            return(true);
        }