mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-22 22:01:06 -06:00
hook up microphone shit.
I did my best.
This commit is contained in:
@ -17,6 +17,7 @@
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
@ -26,7 +27,6 @@
|
||||
#include "Platform.h"
|
||||
|
||||
#include "NDS.h"
|
||||
#include "GBACart.h"
|
||||
|
||||
|
||||
namespace Frontend
|
||||
@ -35,13 +35,22 @@ namespace Frontend
|
||||
int AudioOut_Freq;
|
||||
float AudioOut_SampleFrac;
|
||||
|
||||
s16* MicBuffer;
|
||||
u32 MicBufferLength;
|
||||
u32 MicBufferReadPos;
|
||||
|
||||
|
||||
void Init_Audio(int outputfreq)
|
||||
{
|
||||
AudioOut_Freq = outputfreq;
|
||||
AudioOut_SampleFrac = 0;
|
||||
|
||||
MicBuffer = nullptr;
|
||||
MicBufferLength = 0;
|
||||
MicBufferReadPos = 0;
|
||||
}
|
||||
|
||||
|
||||
int AudioOut_GetNumSamples(int outlen)
|
||||
{
|
||||
float f_len_in = (outlen * 32823.6328125) / (float)AudioOut_Freq;
|
||||
@ -74,4 +83,57 @@ void AudioOut_Resample(s16* inbuf, int inlen, s16* outbuf, int outlen)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Mic_FeedSilence()
|
||||
{
|
||||
MicBufferReadPos = 0;
|
||||
NDS::MicInputFrame(NULL, 0);
|
||||
}
|
||||
|
||||
void Mic_FeedNoise()
|
||||
{
|
||||
// note: DS games seem to expect very saturated 'blowing into mic' noise
|
||||
|
||||
s16 tmp[735];
|
||||
|
||||
for (int i = 0; i < 735; i++)
|
||||
{
|
||||
int val = rand() >> 8;
|
||||
if (val < -0x8000) val = -0x8000;
|
||||
else if (val > 0x7FFF) val = 0x7FFF;
|
||||
|
||||
tmp[i] = val;
|
||||
}
|
||||
|
||||
NDS::MicInputFrame(tmp, 735);
|
||||
}
|
||||
|
||||
void Mic_FeedExternalBuffer()
|
||||
{
|
||||
if (!MicBuffer) return Mic_FeedSilence();
|
||||
|
||||
if ((MicBufferReadPos + 735) > MicBufferLength)
|
||||
{
|
||||
s16 tmp[735];
|
||||
u32 len1 = MicBufferLength - MicBufferReadPos;
|
||||
memcpy(&tmp[0], &MicBuffer[MicBufferReadPos], len1*sizeof(s16));
|
||||
memcpy(&tmp[len1], &MicBuffer[0], (735 - len1)*sizeof(s16));
|
||||
|
||||
NDS::MicInputFrame(tmp, 735);
|
||||
MicBufferReadPos = 735 - len1;
|
||||
}
|
||||
else
|
||||
{
|
||||
NDS::MicInputFrame(&MicBuffer[MicBufferReadPos], 735);
|
||||
MicBufferReadPos += 735;
|
||||
}
|
||||
}
|
||||
|
||||
void Mic_SetExternalBuffer(s16* buffer, u32 len)
|
||||
{
|
||||
MicBuffer = buffer;
|
||||
MicBufferLength = len;
|
||||
MicBufferReadPos = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user