old demo that i want to try in mbed studio
Dependencies: mbed SDFileSystem_Copy_of_mbed_version I2S
NotchingDemo.cpp
- Committer:
- roryhand
- Date:
- 2019-02-28
- Revision:
- 2:957d3b2afff4
- Parent:
- 1:aac37edee302
- Child:
- 3:6169aeeaeeb4
File content as of revision 2:957d3b2afff4:
// 24/03/2018 update - I appear to be able to address the device and write something, as I am getting an ACK returned from the i2c write() function. //however if i use the write function with 4 arguments (as opposed to just 1 argument) then it doesnt work //only works with the 1 argument version!!! //THIS VERSION WORKED, CHANGED SOME THINGS, THEN CHANGED THEM BACK. NOW IT NO LONGER WORKS!!!! #include "mbed.h" #include "math.h" #include "I2S.h" #include "SDFileSystem.h" #include "wm8731_Config_setup.h" #include "WOLFSON_config_consts.h" #include <stdlib.h> #include <vector> #include <string> #define sample_freq 11025 #pragma import __use_two_region_memory DigitalOut myled(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalIn NotchUp(p16); InterruptIn Horn(p16); Ticker sampletick; Ticker BellTick; Ticker EdTick; Ticker TickFadeOut; Timer t; Timer t2; Serial pc(USBTX, USBRX); // tx, rx //FOR DEBUGGING PROGRAM USING GNU SCREEN DigitalOut cs(p8); I2S i2s(I2S_TRANSMIT, p5, p6, p7); SDFileSystem sd(p11, p12, p13, p8, "sd"); // the new pinout that i am using /*struct A { int data; B b; };*/ class classFade { public: float powerval; float FadeIteration; float DecayFactor; float Denom; float FadeCoeff; float Natural_Exp; int LengthSecs; int Length; //member Functions float FadeOut(void) { powerval = -FadeIteration/Denom; if (FadeIteration >=Length) { FadeCoeff = 0; } else { FadeCoeff = (Length - FadeIteration)/Length; } FadeIteration = FadeIteration + 1; return FadeCoeff; } float FadeIn(void) { powerval = FadeIteration/Denom; if (FadeIteration >=Length) { FadeCoeff = 1; } else { FadeCoeff = FadeIteration/Length; } FadeIteration = FadeIteration + 1; return FadeCoeff; } }; classFade IdleFadeOut; classFade N2FadeIn; classFade NotchFadeOut; classFade NotchFadeIn; typedef struct uFMT_STRUCT { short comp_code; short num_channels; unsigned sample_rate; unsigned avg_Bps; short block_align; short sig_bps; } FMT_STRUCT; typedef struct uNotch_STRUCT { short Notch; short NotchTransUp; short NotchTransDown; short NotchDirection; } Notch_STRUCT; typedef struct uDATA_STRUCT { unsigned subchunk2_ID; unsigned subchunk2_size; char * data_buf; } DATA_STRUCT; typedef struct uWAV_FILE_STRUCT { FILE *WavFile; int id_number; char *slice_buf; int num_slices; FMT_STRUCT FileFormat; DATA_STRUCT FileData; } WAV_FILE_STRUCT; /*typedef struct uWAV_FILE_STRUCT{ FILE* WavFile; }WAV_FILE_STRUCT;*/ class classSoundFile { public: //add a class constructor WAV_FILE_STRUCT FileInfo; short * data_sptr; //classSoundFile(string filename);//this is the constructor //string filename; }; //class constructor; /*classSoundFile::classSoundFile(string filename) { //Declare RootFolder and the directory for the appropriate file. //How we index into filename[] from the outside of this class is another //issue... FileInfo.WavFile = fopen("/sd/mydir/645Engine/Startup.wav","rb"); fseek(FileInfo.WavFile,20,SEEK_SET); fread(&FileInfo.FileFormat,sizeof(FileInfo.FileFormat),1,FileInfo.WavFile); printf("wav_format.sample_rate: %d\n\r",FileInfo.FileFormat.sample_rate); fread(&FileInfo.FileData,sizeof(FileInfo.FileData),1,FileInfo.WavFile); printf("wav_data.subchunk2_size: %d\n\r",FileInfo.FileData.subchunk2_size); FileInfo.slice_buf = ( char *)malloc(FileInfo.FileFormat.block_align); fread(FileInfo.slice_buf,FileInfo.FileFormat.block_align,1,FileInfo.WavFile); //This isnt actually required, its just a test FileInfo.num_slices = FileInfo.FileData.subchunk2_size/FileInfo.FileFormat.block_align; }*/ int i = 0; int h = 0; short bufflen = 1; int buffer[1]; int AudioFormat, NumChannels, SampleRate, BitsPerSample ; char *slice_buf; short *data_sptr; short *data_sptr_horn; short *data_sptr_IdleN2; short * data_sptr_bell; short * data_sptr_N2; short * data_sptr_Flange; unsigned char *data_bptr; int *data_wptr; unsigned channel; long slice, num_slices; int verbosity = 0; int verbosity2 = 0; int verbosity3 = 0; int verbosity4 = 0; int verbosity5 = 0; int interrupt_condition = 1; int sampling_freq = 11025; const int BufferLen = 2000; short Buffer1[BufferLen]; short Buffer2[BufferLen]; short place_hold1 = 0; short place_hold2 = 0; volatile int flag1 = 1; volatile int flag2 = 0; volatile int flag3 = 1; volatile int flag4 = 0; int FLAGBUFF1 = 0; int FLAGBUFF2 = 0; int BellFlag = 0; int BellFlag2 = 0; int FadeFlag = 0; int DualEngineFlag = 0; short value[1]; FILE *HornWav; FILE *edsheeran_wav; FILE *Startup_wav; FILE *IdleN2Wav; FILE *N2Wav; FILE *BellWav; FILE *FlangeWav; //long long slice_value; int slice_value[1]; WAV_FILE_STRUCT WavInfo_Horn; WAV_FILE_STRUCT WavInfo_IdleN2; WAV_FILE_STRUCT WavInfo_N2; WAV_FILE_STRUCT WavInfo_Bell; WAV_FILE_STRUCT WavInfo_Flange; Ticker flipper; char * slice_buf_bell; char * slice_buf_ed; char * slice_buf_startup; char * slice_buf_N2; Notch_STRUCT NotchingSet; //test //short *data_sptr_bell = 0; short *data_sptr_ed = 0; short *data_sptr_startup = 0; void flip() { led2 = !led2; } void isr() { if(flag1 == 0) { value[0] = Buffer1[place_hold1]>>4; i2s.write(value,1);//Send next PWM value to amp place_hold1 = place_hold1 + 1; if( (place_hold1 >= BufferLen)) { led2 = !led2; place_hold1 = 0; place_hold2 = 0; flag1 = 1; flag2 = 0; } } else if(flag2 == 0) { value[0] = Buffer2[place_hold2]>>4; i2s.write(value,1);//Send next PWM value to amp place_hold2 = place_hold2 + 1; if( (place_hold2 >= BufferLen) ) { led2 = !led2; place_hold1 = 0; place_hold2 = 0; flag1 = 0; flag2 = 1; FLAGBUFF2 = 0; } } } void horn_sound() { BellFlag = 1; fseek(HornWav,44,SEEK_SET); fseek(BellWav,44,SEEK_SET); fseek(FlangeWav,44,SEEK_SET); fseek(N2Wav,44,SEEK_SET); } void N2SoundIsr() { DualEngineFlag = 1; fseek(N2Wav,44,SEEK_SET); fseek(HornWav,44,SEEK_SET); //TickFadeOut.detach(&N2SoundIsr);//,5.0); } void FadeOutIsr() { FadeFlag = 1; fseek(IdleN2Wav,44,SEEK_SET); fseek(N2Wav,44,SEEK_SET); fseek(HornWav,44,SEEK_SET); fseek(FlangeWav,44,SEEK_SET); } void NotchUpIsr() { if(1 <= NotchingSet.Notch < 8) { NotchingSet.Notch = NotchingSet.Notch + 1; NotchingSet.NotchTransUp = NotchingSet.Notch + 7; NotchingSet.NotchDirection = 1; } } void NotchDownIsr() { if(1 < NotchingSet.Notch <= 8) { NotchingSet.Notch = NotchingSet.Notch - 1; NotchingSet.NotchTransDown = NotchingSet.Notch + 15;; NotchingSet.NotchDirection = 0; } } //function prototypes WAV_FILE_STRUCT ReadFileInfo(WAV_FILE_STRUCT FileInfo, FILE * wav_file); classSoundFile LoadFileStream(classSoundFile FileInfo, string filename); classFade FadeDataInitialise(classFade FadeData); float FadeOut(void); void Play_WaveFile(FILE * my_wav, WAV_FILE_STRUCT FileInfo); //void Play_WaveFileLoop(FILE * my_wav, WAV_FILE_STRUCT FileInfo); void Play_WaveFileLoop(classSoundFile Sounds, Notch_STRUCT NotchingSet); int main() { //LocalFileSystem local("local"); NotchUp.mode(PullUp); //classSoundFile Sounds[4]; /* for(int iii = 0; iii < 3; iii ++) { Sounds[iii].setX(iii); }*/ WAV_FILE_STRUCT WavInfo_Startup; WAV_FILE_STRUCT WavInfo_Idle; pc.printf("Beginning of program\n"); FILE *StartupWav; FILE *IdleWav; char * RootFolder = "/sd/mydir/SoundDecoder/"; DIR *dir; dirent *ent; int iterator = 0; string filename[10]; if ((dir = opendir ("/sd/mydir/SoundDecoder")) != NULL) { // print all the files and directories within directory while ((ent = readdir (dir)) != NULL) { printf("%s\r\n",string(ent->d_name)); filename[iterator] = string(ent->d_name); //printf("%s\r\n",filename[iterator]); iterator = iterator + 1; //printf("%s\r\n", ent->d_name); //filenames.push_back(string(dirp->d_name)); } closedir (dir); } for(iterator = 0; iterator < 10; iterator ++) { printf("All the Files: %s\r\n",filename[iterator]); //printf("All the Files: %s\r\n",ent[iterator]); } //strcat(RootFolder,qdfilename[0]); string folder = RootFolder + filename[9]; printf("Folder: %s\n\r",folder); //printf("Files and Folders contained here: %d\n\r",readdir(dp)); //StartupWav = fopen("/sd/mydir/Startup.wav","rb"); const char* folder2 = folder.c_str(); string FileName; //vector <classSoundFile> Sound (27); classSoundFile Sound[22]; for(int iii = 0; iii < 21; iii++) { //Sound[0].FileInfo; string folder = RootFolder + filename[3]; printf("Whole File Thing: %s\n\r",folder); Sound[iii].FileInfo.WavFile = fopen("/sd/mydir/645Engine/Startup.wav","rb"); printf("Size of FILE* %d\n\r ",sizeof(Sound[iii].FileInfo.WavFile)); fseek(Sound[iii].FileInfo.WavFile,20,SEEK_SET); fread(&Sound[iii].FileInfo.FileFormat,sizeof(Sound[iii].FileInfo.FileFormat),1,Sound[iii].FileInfo.WavFile); //printf("wav_format.sample_rate: %d\n\r",Sound[iii].FileInfo.FileFormat.sample_rate); fread(&Sound[iii].FileInfo.FileData,sizeof(Sound[iii].FileInfo.FileData),1,Sound[iii].FileInfo.WavFile); //printf("wav_data.subchunk2_size: %d\n\r",Sound[iii].FileInfo.FileData.subchunk2_size); Sound[iii].FileInfo.slice_buf = ( char *)malloc(Sound[iii].FileInfo.FileFormat.block_align); fread(Sound[iii].FileInfo.slice_buf,Sound[iii].FileInfo.FileFormat.block_align,1,Sound[iii].FileInfo.WavFile); //This isnt actually required, its just a test Sound[iii].FileInfo.num_slices = Sound[iii].FileInfo.FileData.subchunk2_size/Sound[iii].FileInfo.FileFormat.block_align; //printf("Number of Slices: %d\n\r",Sound[iii].FileInfo.num_slices); fread(Sound[iii].FileInfo.slice_buf,Sound[iii].FileInfo.FileFormat.block_align,1,Sound[iii].FileInfo.WavFile); Sound[iii].data_sptr = (short *)Sound[iii].FileInfo.slice_buf; printf("data_sptr: %d\n\r",*Sound[iii].data_sptr); printf("Iteration: %d\n\r",iii); printf("SizeOf Sound[iii] %d\n\r",sizeof(Sound[iii])); printf("SizeOf Sound[iii].FileInfo.FileFormat %d\n\r",sizeof(Sound[iii].FileInfo.FileFormat)); printf("SizeOf Sound[iii].FileInfo.FileFormat %d\n\r",sizeof(Sound[iii].FileInfo.FileData)); printf("SizeOf Sound[iii].FileInfo.FileFormat %d\n\r",sizeof(Sound[iii].FileInfo.WavFile)); printf("SizeOf Sound[iii].FileInfo.FileFormat %d\n\r",sizeof(Sound[iii].FileInfo.id_number)); printf("SizeOf Sound[iii].FileInfo.FileFormat %d\n\r",sizeof(Sound[iii].FileInfo.slice_buf)); printf("SizeOf Sound[iii].FileInfo.FileFormat %d\n\r",sizeof(Sound[iii].FileInfo.num_slices)); fclose(Sound[iii].FileInfo.WavFile);//close the file stream. We will only reopen the file when we need to do it. Hopefully this should also free the memory... /* FILE *WavFile; int id_number; char *slice_buf; int num_slices; */ //Sounds[iii] = LoadFileStream(Sounds[iii],FileName); } //We still experience the exact same memory issue //classSoundFile Sounds[10] = {classSoundFile(FileName),classSoundFile(FileName), classSoundFile(FileName),classSoundFile(FileName),classSoundFile(FileName),classSoundFile(FileName),classSoundFile(FileName), classSoundFile(FileName),classSoundFile(FileName),classSoundFile(FileName)}; //classSoundFile Sounds[27]; /* for(int iii = 0; iii < 6; iii++) { FileName = filename[0]; string teststring = "test string"; //printf("Before calling fnc: 2%s\n\r",FileName); classSoundFile Sound(FileName); Sounds[iii] = Sound; printf("HELLO!\n\r"); }*/ printf("DO WE GET PAST THE ALLOCATION POINT\n\r"); StartupWav = fopen("/sd/mydir/645Engine/Startup.wav","rb"); IdleWav = fopen("/sd/mydir/645Engine/N2_11k_minus10dB.wav","rb"); IdleN2Wav = fopen("/sd/mydir/645Engine/N2N3_11k_minus10dB.wav","rb"); HornWav = fopen("/sd/mydir/645Engine/K3H_1_A_short_quiet.wav","rb"); N2Wav = fopen("/sd/mydir/645Engine/N3_11k_minus11dB.wav","rb"); BellWav = fopen("/sd/mydir/645Engine/EMD_BRONZE_BELL_1_11k_minus10dB.wav","rb"); FlangeWav = fopen("/sd/mydir/645Engine/EX_FlangeJoint1_11k_minus12dB.wav","rb"); WavInfo_Startup = ReadFileInfo(WavInfo_Startup, StartupWav); printf("WavInfo_Startup Size: %d\n\r",sizeof(WavInfo_Startup)); WavInfo_Idle = ReadFileInfo(WavInfo_Idle, IdleWav); WavInfo_Horn = ReadFileInfo(WavInfo_Horn, HornWav); WavInfo_IdleN2 = ReadFileInfo(WavInfo_IdleN2, IdleN2Wav); WavInfo_N2 = ReadFileInfo(WavInfo_N2, N2Wav); WavInfo_Bell = ReadFileInfo(WavInfo_Bell, BellWav); WavInfo_Flange = ReadFileInfo(WavInfo_Flange, FlangeWav); //Populate our class instances with some data (is there an implicit way to do this?) N2FadeIn.LengthSecs = 4; IdleFadeOut.LengthSecs = 2; N2FadeIn = FadeDataInitialise(N2FadeIn); IdleFadeOut = FadeDataInitialise(IdleFadeOut); //Set up the wolfson Audio Codec board wm8731_Config_setup(); //i2s audio data transfer code?? i2s.stereomono(I2S_STEREO); i2s.masterslave(I2S_MASTER); led3 = 1; led2 = 1; sampletick.attach(&isr,1.0/sampling_freq); //1/16000 //TickFadeOut.attach(&FadeOutIsr,10.0); i2s.start(); Horn.rise(&FadeOutIsr); slice = 0; fseek(IdleN2Wav,44,SEEK_SET); //Play_WaveFile(IdleN2Wav,WavInfo_IdleN2); //Play_WaveFile(N2Wav,WavInfo_N2); t.reset(); t.start(); N2FadeIn.FadeCoeff = N2FadeIn.FadeOut(); t.stop(); printf("Time to Calcualte Fade Coeff: %d\n\r",t.read_us()); t.reset(); fseek(IdleN2Wav,44,SEEK_SET); t.start(); fread(WavInfo_IdleN2.slice_buf,WavInfo_IdleN2.FileFormat.block_align,1,IdleN2Wav); data_sptr_IdleN2 = (short *)WavInfo_IdleN2.slice_buf; t.stop(); printf("Time to Read in a slice: %dus\n\r",t.read_us()); t.reset(); printf("point to start sound: %d\n\r",((WavInfo_IdleN2.FileData.subchunk2_size) - N2FadeIn.Length)); printf("Size of Data: %d\n\r",WavInfo_IdleN2.FileData.subchunk2_size); fseek(FlangeWav,44,SEEK_SET); Play_WaveFile(StartupWav,WavInfo_Startup); fseek(IdleN2Wav,44,SEEK_SET);//reset for use in the Loop code slice = 0; fseek(IdleWav,44,SEEK_SET); //Play_WaveFileLoop(IdleWav, WavInfo_Idle); i2s.stop(); } WAV_FILE_STRUCT ReadFileInfo(WAV_FILE_STRUCT FileInfo, FILE * wav_file) { fseek(wav_file,20,SEEK_SET); fread(&FileInfo.FileFormat,sizeof(FileInfo.FileFormat),1,wav_file); //printf("wav_format.sample_rate: %d\n\r",FileInfo.FileFormat.sample_rate); fread(&FileInfo.FileData,sizeof(FileInfo.FileData),1,wav_file); //printf("wav_data.subchunk2_size: %d\n\r",FileInfo.FileData.subchunk2_size); FileInfo.slice_buf = ( char *)malloc(FileInfo.FileFormat.block_align); fread(FileInfo.slice_buf,FileInfo.FileFormat.block_align,1,wav_file); //This isnt actually required, its just a test FileInfo.num_slices = FileInfo.FileData.subchunk2_size/FileInfo.FileFormat.block_align; //printf("Number of Slices: %d\n\r",FileInfo.num_slices); return FileInfo; } classSoundFile LoadFileStream(classSoundFile Sound, string filename) { //Declare RootFolder and the directory for the appropriate file. //How we index into filename[] from the outside of this class is another //issue... //printf("FileName: %s\n\r",filename); //string RootFolder = "/sd/mydir/SoundDecoder/"; //string Directory = RootFolder + "01.wav";// + filename[0]; //printf("%s\n\r",Directory); //const char* DirectoryChar = Directory.c_str(); //Sound.FileInfo.WavFile = fopen(DirectoryChar,"rb"); Sound.FileInfo.WavFile = fopen("/sd/mydir/645Engine/Startup.wav","rb"); fseek(Sound.FileInfo.WavFile,20,SEEK_SET); fread(&Sound.FileInfo.FileFormat,sizeof(Sound.FileInfo.FileFormat),1,Sound.FileInfo.WavFile); printf("wav_format.sample_rate: %d\n\r",Sound.FileInfo.FileFormat.sample_rate); fread(&Sound.FileInfo.FileData,sizeof(Sound.FileInfo.FileData),1,Sound.FileInfo.WavFile); printf("wav_data.subchunk2_size: %d\n\r",Sound.FileInfo.FileData.subchunk2_size); Sound.FileInfo.slice_buf = ( char *)malloc(Sound.FileInfo.FileFormat.block_align); fread(Sound.FileInfo.slice_buf,Sound.FileInfo.FileFormat.block_align,1,Sound.FileInfo.WavFile); //This isnt actually required, its just a test Sound.FileInfo.num_slices = Sound.FileInfo.FileData.subchunk2_size/Sound.FileInfo.FileFormat.block_align; printf("Number of Slices: %d\n\r",Sound.FileInfo.num_slices); return Sound; } classFade FadeDataInitialise(classFade FadeData) { FadeData.DecayFactor = 1.3; FadeData.FadeIteration = 1; //FadeData.Denom = 11025*FadeData.DecayFactor; FadeData.Denom = 11025*FadeData.DecayFactor; FadeData.Natural_Exp = 2.7183; FadeData.Length = 11025*FadeData.LengthSecs; //FadeData.Natural_Exp = 2.7; return FadeData; } //Playing Files Code /*float FadeIn(void) { powervalFadeIn = FadeIterationIn/denom; FadeCoeffFadeIn }*/ /*float FadeOut(void) { powerval = -FadeIteration/denom; FadeCoeff = pow(natural_exp,powerval); FadeIteration = FadeIteration + 1; return FadeCoeff; }*/ void Play_WaveFile(FILE * my_wav, WAV_FILE_STRUCT FileInfo) { while(slice<FileInfo.num_slices) { fread(FileInfo.slice_buf,FileInfo.FileFormat.block_align,1,my_wav); data_sptr=(short *)FileInfo.slice_buf; // 16 bit samples for (channel=0; channel<FileInfo.FileFormat.num_channels; channel++) { if(flag1 == 1) { Buffer1[place_hold1] = data_sptr[channel]; place_hold1 = place_hold1 + 1; if(place_hold1 >= BufferLen) { while(1) { if(flag1 == 0) { break; } } } } else if(flag2 == 1) { Buffer2[place_hold2] = data_sptr[channel]; place_hold2 = place_hold2 + 1; if(place_hold2 >= BufferLen) { while(1) { if(flag2 == 0) { break; } } } } } slice = slice + 1; } } //void Play_WaveFileLoop(FILE * my_wav, WAV_FILE_STRUCT FileInfo)//(classSoundFile Sounds) void Play_WaveFileLoop(classSoundFile Sounds[27], Notch_STRUCT NotchingSet) { while(1) { //might have to change this to a while(1) loop? //New format!! This should be (roughly) the way that this is done, with the new structures and classes ////fread(Sound[Notch].FileData.slice_buf,Sound[Notch].FileFormat.block_align,1,Sound[notch].WavFile); //data_sptr=(short *)Sound[Notch].FileInfo.slice_buf; if( slice == (Sounds[NotchingSet.Notch].FileInfo.num_slices-1) ) { slice = 0; fseek(Sounds[NotchingSet.Notch].FileInfo.WavFile,44,SEEK_SET); } //fread(FileInfo.slice_buf,FileInfo.FileFormat.block_align,1,my_wav); data_sptr=(short *)Sounds[NotchingSet.Notch].FileInfo.slice_buf; // 16 bit samples //make sure we are reading in the correct "notch" here if(FadeFlag) { if(feof(Sounds[NotchingSet.Notch].FileInfo.WavFile)) { fseek(Sounds[NotchingSet.Notch].FileInfo.WavFile,44,SEEK_SET); } //Read in data for current (i.e. now the previous notch, according to the index!!) //We might not need this code here...as its probably done somewhere else?? fread(Sounds[NotchingSet.Notch-1].FileInfo.slice_buf,Sounds[NotchingSet.Notch-1].FileInfo.FileFormat.block_align,1,Sounds[NotchingSet.Notch-1].FileInfo.WavFile); Sounds[NotchingSet.Notch-1].data_sptr = (short *)Sounds[NotchingSet.Notch-1].FileInfo.slice_buf; NotchFadeOut.FadeCoeff = NotchFadeOut.FadeOut();//compute new FadeOut Coeff value //Read in the notch transition file for transitioning up fread(Sounds[NotchingSet.NotchTransUp].FileInfo.slice_buf,Sounds[NotchingSet.NotchTransUp].FileInfo.FileFormat.block_align,1,Sounds[NotchingSet.NotchTransUp].FileInfo.WavFile); Sounds[NotchingSet.NotchTransUp].data_sptr = (short*)Sounds[NotchingSet.NotchTransUp].FileInfo.slice_buf; if( ((Sounds[NotchingSet.NotchTransUp].FileInfo.FileData.subchunk2_size) - NotchFadeIn.Length - 2*11025) <= (ftell(Sounds[NotchingSet.NotchTransUp].FileInfo.WavFile) + 44)) //if( (WavInfo_IdleN2.FileData.subchunk2_size)/8 <=ftell(IdleN2Wav) ) { NotchFadeIn.FadeCoeff = NotchFadeIn.FadeIn(); //Read In the next Notch fread(Sounds[NotchingSet.Notch].FileInfo.slice_buf,Sounds[NotchingSet.Notch].FileInfo.FileFormat.block_align,1,Sounds[NotchingSet.Notch].FileInfo.WavFile); Sounds[NotchingSet.Notch].data_sptr = (short *)Sounds[NotchingSet.Notch].FileInfo.slice_buf; if( (ftell(Sounds[NotchingSet.NotchTransUp].FileInfo.WavFile) + 44) >= Sounds[NotchingSet.NotchTransUp].FileInfo.FileData.subchunk2_size ) { //need to explicitly test if this notation/syntax works for pointers.... *Sounds[NotchingSet.Notch].data_sptr = *Sounds[NotchingSet.Notch].data_sptr*NotchFadeIn.FadeCoeff; } else { *Sounds[NotchingSet.Notch-1].data_sptr = *Sounds[NotchingSet.Notch - 1].data_sptr*NotchFadeOut.FadeCoeff + *Sounds[NotchingSet.NotchTransUp].data_sptr + *Sounds[NotchingSet.Notch].data_sptr*NotchFadeIn.FadeCoeff;// + *data_sptr_N2; } } else { *Sounds[NotchingSet.Notch-1].data_sptr = *Sounds[NotchingSet.Notch-1].data_sptr*NotchFadeOut.FadeCoeff + *Sounds[NotchingSet.NotchTransUp].data_sptr; } } /********************END OF DATA ASSIGNMENT SECTION*************************************************/ for (channel=0; channel<Sounds[NotchingSet.Notch].FileInfo.FileFormat.num_channels; channel++) { switch (Sounds[NotchingSet.Notch].FileInfo.FileFormat.sig_bps) { case 16: if(flag1 == 1) { Buffer1[place_hold1] = Sounds[NotchingSet.Notch].data_sptr[channel]; place_hold1 = place_hold1 + 1; if(place_hold1 >= BufferLen) { while(1) { if(flag1 == 0) { break; }//if(flag1 == 0) }//while(1) }//if(place_hold1 > = BufferLen) } else if(flag2 == 1) { Buffer2[place_hold2] = Sounds[NotchingSet.Notch].data_sptr[channel]; place_hold2 = place_hold2 + 1; if(place_hold2 >= BufferLen) { while(1) { if(flag2 == 0) { break; } } } } } } slice = slice + 1; } }