2014-09-03 20:36:05 +02:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <malloc.h>
|
|
|
|
#include <3ds.h>
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
u8 *framebuf;
|
|
|
|
u32 *sharedmem = NULL, sharedmem_size = 0x30000;
|
|
|
|
u8 *audiobuf;
|
|
|
|
u32 audiobuf_size = 0x100000, audiobuf_pos = 0;
|
|
|
|
u8 control=0x40;
|
2014-11-25 05:42:47 +01:00
|
|
|
u32 audio_initialized = 0;
|
2014-09-03 20:36:05 +02:00
|
|
|
|
|
|
|
srvInit();
|
|
|
|
aptInit();
|
|
|
|
gfxInit();
|
|
|
|
hidInit(NULL);
|
|
|
|
|
2014-11-25 05:42:47 +01:00
|
|
|
if(CSND_initialize(NULL)==0)audio_initialized = 1;
|
2014-09-03 20:36:05 +02:00
|
|
|
|
|
|
|
sharedmem = (u32*)memalign(0x1000, sharedmem_size);
|
|
|
|
audiobuf = linearAlloc(audiobuf_size);
|
|
|
|
|
|
|
|
MIC_Initialize(sharedmem, sharedmem_size, control, 0, 3, 1, 1);//See mic.h.
|
|
|
|
|
2014-11-02 18:58:37 +01:00
|
|
|
while(aptMainLoop())
|
2014-09-03 20:36:05 +02:00
|
|
|
{
|
2014-11-02 18:58:37 +01:00
|
|
|
hidScanInput();
|
2014-11-25 05:42:47 +01:00
|
|
|
gspWaitForVBlank();
|
|
|
|
|
|
|
|
u32 kDown = hidKeysDown();
|
|
|
|
if (kDown & KEY_START)
|
|
|
|
break; // break in order to return to hbmenu
|
2014-09-03 20:36:05 +02:00
|
|
|
|
2014-11-25 05:42:47 +01:00
|
|
|
if(audio_initialized)
|
2014-11-02 18:58:37 +01:00
|
|
|
{
|
2014-11-25 05:42:47 +01:00
|
|
|
framebuf = gfxGetFramebuffer(GFX_TOP, GFX_LEFT, NULL, NULL);
|
2014-09-03 20:36:05 +02:00
|
|
|
|
2014-11-25 05:42:47 +01:00
|
|
|
if(kDown & KEY_A)
|
|
|
|
{
|
|
|
|
audiobuf_pos = 0;
|
2014-09-03 20:36:05 +02:00
|
|
|
|
2014-11-25 05:42:47 +01:00
|
|
|
CSND_setchannel_playbackstate(0x8, 0);//Stop audio playback.
|
|
|
|
CSND_sharedmemtype0_cmdupdatestate(0);
|
2014-09-03 20:36:05 +02:00
|
|
|
|
2014-11-25 05:42:47 +01:00
|
|
|
MIC_SetRecording(1);
|
2014-09-03 20:36:05 +02:00
|
|
|
|
2014-11-25 05:42:47 +01:00
|
|
|
memset(framebuf, 0x20, 0x46500);
|
|
|
|
}
|
2014-09-03 20:36:05 +02:00
|
|
|
|
2014-11-25 05:42:47 +01:00
|
|
|
if((hidKeysHeld() & KEY_A) && audiobuf_pos < audiobuf_size)
|
|
|
|
{
|
|
|
|
audiobuf_pos+= MIC_ReadAudioData(&audiobuf[audiobuf_pos], audiobuf_size-audiobuf_pos, 1);
|
|
|
|
if(audiobuf_pos > audiobuf_size)audiobuf_pos = audiobuf_size;
|
2014-09-03 20:36:05 +02:00
|
|
|
|
2014-11-25 05:42:47 +01:00
|
|
|
memset(framebuf, 0x60, 0x46500);
|
|
|
|
}
|
2014-09-03 20:36:05 +02:00
|
|
|
|
2014-11-25 05:42:47 +01:00
|
|
|
if(hidKeysUp() & KEY_A)
|
|
|
|
{
|
|
|
|
MIC_SetRecording(0);
|
|
|
|
GSPGPU_FlushDataCache(NULL, audiobuf, audiobuf_pos);
|
|
|
|
CSND_playsound(0x8, CSND_LOOP_DISABLE, CSND_ENCODING_PCM16, 16000, (u32*)audiobuf, NULL, audiobuf_pos, 2, 0);
|
2014-09-03 20:36:05 +02:00
|
|
|
|
2014-11-25 05:42:47 +01:00
|
|
|
memset(framebuf, 0xe0, 0x46500);
|
2014-11-02 18:58:37 +01:00
|
|
|
|
2014-11-25 05:42:47 +01:00
|
|
|
gfxFlushBuffers();
|
|
|
|
gfxSwapBuffers();
|
|
|
|
|
|
|
|
framebuf = gfxGetFramebuffer(GFX_TOP, GFX_LEFT, NULL, NULL);
|
|
|
|
memset(framebuf, 0xe0, 0x46500);
|
|
|
|
}
|
2014-09-03 20:36:05 +02:00
|
|
|
}
|
2014-11-02 18:58:37 +01:00
|
|
|
|
|
|
|
gfxFlushBuffers();
|
|
|
|
gfxSwapBuffers();
|
2014-09-03 20:36:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
MIC_Shutdown();
|
|
|
|
|
2014-11-25 05:42:47 +01:00
|
|
|
if(audio_initialized)CSND_shutdown();
|
|
|
|
|
|
|
|
free(sharedmem);
|
|
|
|
linearFree(audiobuf);
|
2014-09-03 20:36:05 +02:00
|
|
|
|
|
|
|
hidExit();
|
|
|
|
gfxExit();
|
|
|
|
aptExit();
|
|
|
|
srvExit();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|