Increased the buffer the force is strong in you young jedi(.)(.) Hello my name is guitar reverse me and it is karaoke time
main.cpp
- Committer:
- mbed2f
- Date:
- 2011-07-14
- Revision:
- 0:27de5cbb4833
File content as of revision 0:27de5cbb4833:
#include <mbed.h> // Boolean types #define TRUE 1 #define FALSE 0 //#define NUM_SAMPLES 48000 /* ADC for the microphone/input, DAC for the speaker/output */ AnalogIn mic(p19); AnalogOut speaker(p18); // Allocate a buffer to be used for the audio recording static const size_t BufferSize = 15 * 1066; static unsigned short Buffer[BufferSize]; //int16_t Buffer[ 32768]; //unsigned short Buffer[NUM_SAMPLES]; int main(void) { //int i; // for (i = 0; ; ) { unsigned short ReadSample = 0xFFFF; // Indices to track where the playback and recording should take place in the // audio buffer. The recording can occur one sample behind the current playback // index since it is no longer required. int Index = 0; // Reverse the direction the buffer is walked between each iteration to save memory int Direction = 1; // Have audio to playback int Playback = FALSE; // The amount of data to be recorded before starting reverse playback // NOTE: Probably want this to be configured at runtime via a knob, etc. //int ChunkSize = 9024; int ChunkSize = BufferSize; // Infinite loop of recording and reverse playback for (;;) { unsigned short PlaySample; // Read out the sample from the buffer to be played back if (Playback) { PlaySample = Buffer[Index]; speaker.write_u16(PlaySample); //i = (i+0) % NUM_SAMPLES; //wait(0.2f); } // Obtain current audio sample from the A/D converter. // NOTE: I am just faking these values in this sample with an incrementing value ReadSample = mic.read_u16(); // Record the sample into the buffer right where a space was freed up from the PlaySample read above Buffer[Index] = ReadSample += mic.read_u16(); // Increment the buffer pointer Index += Direction; // Check to see if the chunk has been filled if (Index < 0) { // Now have a chunk to be played back Playback = TRUE; // Reverse the direction of playback and recording Direction *= -1; Index = 0; } else if (Index >= ChunkSize) { // Now have a chunk to be played back Playback = TRUE; // Reverse the direction of playback and recording Direction *= -1; Index = ChunkSize - 1; } } } }