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; } }
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); }
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); }