diff --git a/tests/audio/atrac/Makefile b/tests/audio/atrac/Makefile index 95ed9174..86171324 100644 --- a/tests/audio/atrac/Makefile +++ b/tests/audio/atrac/Makefile @@ -1,4 +1,4 @@ -TARGETS = atractest decode ids resetting setdata +TARGETS = atractest decode ids resetting setdata replay EXTRA_OBJS = atrac-imports.o ../sascore/sascore-imports.o shared.o EXTRA_LIBS = -lpspaudio diff --git a/tests/audio/atrac/replay.c b/tests/audio/atrac/replay.c new file mode 100644 index 00000000..f243813c --- /dev/null +++ b/tests/audio/atrac/replay.c @@ -0,0 +1,167 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int sceAtracGetSecondBufferInfo(int atracID, u32 *puiPosition, u32 *puiDataByte); +int sceAtracGetNextDecodePosition(int atracID, u32 *puiSamplePosition); + +u32 min(u32 a, u32 b) { + u32 ret = a > b ? b : a; + return ret; +} + +int main(int argc, char *argv[]) { + char *at3_data; + int file_size; + int at3_size; + int blk_size = 0x30000; + int sampleCnt = 0; + + char *decode_data; + int decode_size; + int n; + + FILE *file; + + int atracID; + int maxSamples = 0; + int result; + int channel; + + u32 puiPosition; + u32 puiDataByte; + + u32 writePtr; + u32 availableBytes; + u32 readOffset; + + if ((file = fopen("sample.at3", "rb")) != NULL) { + fseek(file, 0, SEEK_SET); + u32 header[2]; + fread(&header, 4, 2, file); + file_size = header[1]; + printf("filesize = 0x%08x\n", file_size); + blk_size = file_size / 2; + + fseek(file, 0, SEEK_END); + at3_size = ftell(file); + printf("at3size = 0x%08x\n", at3_size); + + fseek(file, 0, SEEK_SET); + at3_data = malloc(blk_size); + decode_data = malloc(decode_size = 512 * 1024); + memset(at3_data, 0, blk_size); + memset(decode_data, 0, decode_size); + + fread(at3_data, blk_size, 1, file); + } + + int id = sceUtilityLoadModule(PSP_MODULE_AV_AVCODEC); + int id2 = sceUtilityLoadModule(PSP_MODULE_AV_ATRAC3PLUS); + + if ((id >= 0 || (u32) id == 0x80020139UL) && (id2 >= 0 || (u32) id2 == 0x80020139UL)) { + printf("Audio modules: OK\n"); + } else { + printf("Audio modules: Failed %08x %08x\n", id, id2); + } + + printf("at3: %08X-%08X\n", (u32)at3_data, (u32)at3_data + at3_size); + printf("Header: %s\n", (char *)at3_data); + + + // set first block of data + atracID = sceAtracSetDataAndGetID(at3_data, blk_size); + if (atracID < 0) { + printf("sceAtracSetDataAndGetID: Failed %08x\n", atracID); + return 1; + } else { + printf("sceAtracSetDataAndGetID: OK, size=%08x\n", blk_size); + at3_size -= blk_size; + } + + u32 bitrate; + result = sceAtracGetBitrate(atracID, &bitrate); + printf("%i=sceAtracGetBitrate: %i\n", result, bitrate); + + u32 channelNum; + result = sceAtracGetChannel(atracID, &channelNum); + printf("%i=sceAtracGetChannel: %i\n", result, channelNum); + + result = sceAtracSetLoopNum(atracID, 0); + printf("sceAtracSetLoopNum: %d\n", result); + + result = sceAtracGetMaxSample(atracID, &maxSamples); + printf("sceAtracGetMaxSample: %08X, %d\n", result, maxSamples); + + channel = sceAudioChReserve(0, maxSamples, PSP_AUDIO_FORMAT_STEREO); + printf("sceAudioChReserve: %08X\n", channel); + + result = sceAtracGetSecondBufferInfo(atracID, &puiPosition, &puiDataByte); + printf("sceAtracGetSecondBufferInfo: %08X, %u, %u\n", result, (unsigned int)puiPosition, (unsigned int)puiDataByte); + + int end = 0; + int steps = 0; + int remainFrame = -1; + int samples = 0; + + while (!end && steps < 65536) { + // get stream data info + result = sceAtracGetStreamDataInfo(atracID, (u8**)&writePtr, &availableBytes, &readOffset); + printf("%i=sceAtracGetStreamDataInfo: %08x, %08x, %08x\n", result, writePtr, availableBytes, readOffset); + + u32 nextSample; + sceAtracGetNextSample(atracID, &nextSample); + sampleCnt += nextSample; + + // decode + result = sceAtracDecodeData(atracID, (u16 *)decode_data, &samples, &end, &remainFrame); + if (result) { + printf("%i=sceAtracDecodeData error: samples: %08x, end: %08x, remainFrame: %d\n", + result, samples, end, remainFrame); + return -1; + } + printf("%i=sceAtracDecodeData: samples: %08x, end: %08x, remainFrame: %d\n", + result, samples, end, remainFrame); + + // output sound + sceAudioOutputBlocking(channel, 0x8000, decode_data); + printf("sceAudioOutputBlocking\n\n"); + result = sceAtracGetRemainFrame(atracID, &remainFrame); + + // Here 170 is a guess frame threshold + if (remainFrame < 170) { + u32 addtoBytes = min(at3_size, min(0xffc0, availableBytes)); + if (availableBytes >= addtoBytes) { + fread((u8*)writePtr, addtoBytes, 1, file); + result = sceAtracAddStreamData(atracID, addtoBytes); + if (result) { + printf("%i=sceAtracAddStreamData error: %08x\n", result, addtoBytes); + return 1; + } + printf("%i=sceAtracAddStreamData: %08x\n", result, addtoBytes); + + at3_size -= addtoBytes; + } + } + + steps++; + } + + free(at3_data); + fclose(file); + + result = sceAudioChRelease(channel); + printf("sceAudioChRelease: %08X\n", result); + result = sceAtracReleaseAtracID(atracID); + printf("sceAtracReleaseAtracID: %08X\n\n", result); + + return 0; +} diff --git a/tests/audio/atrac/replay.expected b/tests/audio/atrac/replay.expected new file mode 100644 index 00000000..34eb0874 --- /dev/null +++ b/tests/audio/atrac/replay.expected @@ -0,0 +1,625 @@ +filesize = 0x0000b500 +at3size = 0x0000b508 +Audio modules: OK +at3: 08835C40-08841148 +Header: RIFF +sceAtracSetDataAndGetID: OK, size=00005a80 +0=sceAtracGetBitrate: 64 +0=sceAtracGetChannel: 2 +sceAtracSetLoopNum: -2140995551 +sceAtracGetMaxSample: 00000000, 2048 +sceAudioChReserve: 00000000 +sceAtracGetSecondBufferInfo: 80630022, 0, 0 +0=sceAtracGetStreamDataInfo: 08835cc8, 00000150, 00005a80 +0=sceAtracDecodeData: samples: 00000690, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000150 +0=sceAtracGetStreamDataInfo: 08835e18, 00000178, 00005bd0 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08835f90, 00000178, 00005d48 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08836108, 00000178, 00005ec0 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08836280, 00000178, 00006038 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 088363f8, 00000178, 000061b0 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08836570, 00000178, 00006328 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 088366e8, 00000178, 000064a0 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08836860, 00000178, 00006618 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 088369d8, 00000178, 00006790 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08836b50, 00000178, 00006908 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08836cc8, 00000178, 00006a80 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08836e40, 00000178, 00006bf8 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08836fb8, 00000178, 00006d70 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08837130, 00000178, 00006ee8 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 088372a8, 00000178, 00007060 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08837420, 00000178, 000071d8 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08837598, 00000178, 00007350 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08837710, 00000178, 000074c8 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08837888, 00000178, 00007640 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08837a00, 00000178, 000077b8 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08837b78, 00000178, 00007930 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08837cf0, 00000178, 00007aa8 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08837e68, 00000178, 00007c20 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08837fe0, 00000178, 00007d98 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08838158, 00000178, 00007f10 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 088382d0, 00000178, 00008088 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08838448, 00000178, 00008200 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 088385c0, 00000178, 00008378 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08838738, 00000178, 000084f0 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 088388b0, 00000178, 00008668 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08838a28, 00000178, 000087e0 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08838ba0, 00000178, 00008958 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08838d18, 00000178, 00008ad0 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08838e90, 00000178, 00008c48 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08839008, 00000178, 00008dc0 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08839180, 00000178, 00008f38 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 088392f8, 00000178, 000090b0 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08839470, 00000178, 00009228 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 088395e8, 00000178, 000093a0 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08839760, 00000178, 00009518 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 088398d8, 00000178, 00009690 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08839a50, 00000178, 00009808 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08839bc8, 00000178, 00009980 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08839d40, 00000178, 00009af8 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08839eb8, 00000178, 00009c70 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883a030, 00000178, 00009de8 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883a1a8, 00000178, 00009f60 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883a320, 00000178, 0000a0d8 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883a498, 00000178, 0000a250 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883a610, 00000178, 0000a3c8 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883a788, 00000178, 0000a540 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883a900, 00000178, 0000a6b8 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883aa78, 00000178, 0000a830 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883abf0, 00000178, 0000a9a8 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883ad68, 00000178, 0000ab20 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883aee0, 00000178, 0000ac98 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883b058, 00000178, 0000ae10 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883b1d0, 00000178, 0000af88 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883b348, 00000178, 0000b100 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 0883b4c0, 00000118, 0000b278 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000118 +0=sceAtracGetStreamDataInfo: 08835c40, 00000178, 0000b390 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: 59 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000178 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 00000800, end: 00000000, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +0=sceAtracGetStreamDataInfo: 08835c40, 00000000, 00000000 +0=sceAtracDecodeData: samples: 0000003d, end: 00000001, remainFrame: -2 +sceAudioOutputBlocking + +0=sceAtracAddStreamData: 00000000 +sceAudioChRelease: 00000000 +sceAtracReleaseAtracID: 00000000 + diff --git a/tests/audio/atrac/replay.prx b/tests/audio/atrac/replay.prx new file mode 100644 index 00000000..4fdfcf1d Binary files /dev/null and b/tests/audio/atrac/replay.prx differ