Skip to content

Instantly share code, notes, and snippets.

@jroweboy
Created March 2, 2019 03:53
Show Gist options
  • Save jroweboy/e7d6de6c565bb16ecbc07ccf0bd80ddf to your computer and use it in GitHub Desktop.
Save jroweboy/e7d6de6c565bb16ecbc07ccf0bd80ddf to your computer and use it in GitHub Desktop.
Hardware test for 3ds mic rate at which it writes to the shared mem buffer
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <3ds.h>
#include <time.h>
void sampleTest(MICU_SampleRate sampleRate) {
if(R_SUCCEEDED(MICU_StartSampling(MICU_ENCODING_PCM16_SIGNED, sampleRate, 0, micGetSampleDataSize(), true))) printf("Now recording.\n");
u64 start = svcGetSystemTick();
u32 last_offset = micGetLastSampleOffset();
u32 count = 0;
u32 lame_way_to_wait_some_time = 0;
while (lame_way_to_wait_some_time++ < 10000000) {
u32 this_offset = micGetLastSampleOffset();
if (last_offset != this_offset) {
last_offset = this_offset;
++count;
}
}
printf("Offset changed %lu times in %llu ticks\n\n", count, svcGetSystemTick() - start);
if(R_FAILED(MICU_StopSampling())) printf("Failed to stop sampling.\n");
}
int main()
{
gfxInitDefault();
consoleInit(GFX_BOTTOM, NULL);
u32 micbuf_size = 0x30000;
u8* micbuf = memalign(0x1000, micbuf_size);
printf("Initializing CSND...\n");
if(R_FAILED(csndInit()))
{
printf("Could not initialize CSND.\n");
} else printf("CSND initialized.\n");
printf("Initializing MIC...\n");
if(R_FAILED(micInit(micbuf, micbuf_size)))
{
printf("Could not initialize MIC.\n");
} else printf("MIC initialized.\n");
u32 audiobuf_size = 0x100000;
u8* audiobuf = linearAlloc(audiobuf_size);
printf("Starting sample rate testing. Please wait a second or so for each test\n");
printf("Sample Rate 8180\n");
sampleTest(MICU_SAMPLE_RATE_8180);
printf("Sample Rate 10910\n");
sampleTest(MICU_SAMPLE_RATE_10910);
printf("Sample Rate 16360\n");
sampleTest(MICU_SAMPLE_RATE_16360);
printf("Sample Rate 32730\n");
sampleTest(MICU_SAMPLE_RATE_32730);
printf("Press START to exit.\n");
while(aptMainLoop())
{
hidScanInput();
gspWaitForVBlank();
u32 kDown = hidKeysDown();
if (kDown & KEY_START)
break; // break in order to return to hbmenu
gfxFlushBuffers();
gfxSwapBuffers();
}
linearFree(audiobuf);
micExit();
free(micbuf);
csndExit();
gfxExit();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment