old demo that i want to try in mbed studio
Dependencies: mbed SDFileSystem_Copy_of_mbed_version I2S
Diff: NotchingDemo.cpp
- Revision:
- 54:606a83fff291
- Parent:
- 47:9334a8f54997
- Child:
- 55:5a441d3b0d57
--- a/NotchingDemo.cpp Sun Sep 08 20:33:59 2019 +0000 +++ b/NotchingDemo.cpp Mon Sep 23 20:23:20 2019 +0000 @@ -11,6 +11,7 @@ #include "SDFileSystem.h" #include "wm8731_Config_setup.h" #include "WOLFSON_config_consts.h" +//#include "BlockDevice.h" #include <string> #include <stdlib.h> #include <fstream> @@ -19,6 +20,10 @@ #include <string> #define sample_freq 11025 #pragma import __use_two_region_memory +//BlockDevice *bd = BlockDevice::get_default_instance(); +//#include "LittleFileSystem.h" +//LittleFileSystem fs("fs"); + DigitalOut myled(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); @@ -164,7 +169,7 @@ 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 OneOff = 0; int notch_flag = 0; int i = 0; int h = 0; @@ -210,6 +215,7 @@ int BellFlag = 0; int BellFlag2 = 0; int FadeFlag = 0; +int BlockFlag = 0; int FileSwitchFlag = 0; @@ -263,6 +269,7 @@ void isr() { + //timer_interrupt.start(); if(flag1 == 0) { value[0] = Buffer1[place_hold1]>>4; i2s.write(value,1);//Send next PWM value to amp @@ -287,6 +294,9 @@ FLAGBUFF2 = 0; } } + + //timer_interrupt.stop(); + } void horn_sound() @@ -316,8 +326,33 @@ void FadeOutIsr() { FadeFlag = 1; - fseek(wavfile2,44,SEEK_SET); - fseek(wavfile3,44,SEEK_SET); + OneOff = 1; + /* + wavfile2 = fopen("/sd/mydir/SoundDecoder_second/09.wav","rb"); + if(wavfile2 == NULL) { + printf("Cannot Open wavfile2\n\r"); + } + */ + + + + /* + wavfile3 = fopen("/sd/mydir/SoundDecoder_second/02.wav","rb"); + if(wavfile3 == NULL) { + printf("Cannot Open wavfile3\n\r"); + } + */ + /* + FILE* wavfile4 = fopen("/sd/mydir/SoundDecoder_second/04.wav","rb"); + if(wavfile4 == NULL) { + printf("Cannot Open wavfile3\n\r"); + } + */ + //fseek(wavfile2,44,SEEK_SET); + //fseek(wavfile3,44,SEEK_SET); + slice2 = 0; + slice3 = 0; + BlockFlag = 1; //printf("We are inside the FadeOut interrupt routine\n\r"); } @@ -402,40 +437,167 @@ sampletick.attach(&isr,1.0/sampling_freq); //1/16000 //fileswitch_tick.attach(&FileSwitch_isr,6.0);//So we can switch between playing file 1 and file 2, including opening and closing //not convinced we need this above line at the moment!! + /* +FILE* f1 = fopen("/sd/mydir/SoundDecoder_second/01.wav","rb"); + + + if(f1 == NULL) { + printf("Cannot Open f1\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f1)); +FILE* f2 = fopen("/sd/mydir/SoundDecoder_second/02.wav","rb"); + if(f2 == NULL) { + printf("Cannot Open f2\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f2)); +FILE* f3 = fopen("/sd/mydir/SoundDecoder_second/03.wav","rb"); + if(f3 == NULL) { + printf("Cannot Open f3\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f3)); + +FILE* f4 = fopen("/sd/mydir/SoundDecoder_second/04.wav","rb"); + if(f4 == NULL) { + printf("Cannot Open f4\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f4)); +FILE* f5 = fopen("/sd/mydir/SoundDecoder_second/05.wav","rb"); + if(f5 == NULL) { + printf("Cannot Open f5\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f5)); +FILE* f6 = fopen("/sd/mydir/SoundDecoder_second/06.wav","rb"); + if(f6 == NULL) { + printf("Cannot Open f6\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f6)); +FILE* f7 = fopen("/sd/mydir/SoundDecoder_second/07.wav","rb"); + if(f7 == NULL) { + printf("Cannot Open f7\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f7)); +FILE* f8 = fopen("/sd/mydir/SoundDecoder_second/08.wav","rb"); + if(f8 == NULL) { + printf("Cannot Open f8\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f8)); +FILE* f9 = fopen("/sd/mydir/SoundDecoder_second/09.wav","rb"); + if(f9 == NULL) { + printf("Cannot Open f9\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f9)); +FILE* f10 = fopen("/sd/mydir/SoundDecoder_second/10.wav","rb"); + if(f10 == NULL) { + printf("Cannot Open f10\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f10)); +FILE* f11 = fopen("/sd/mydir/SoundDecoder_second/11.wav","rb"); + if(f11 == NULL) { + printf("Cannot Open f11\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f11)); +FILE* f12 = fopen("/sd/mydir/SoundDecoder_second/12.wav","rb"); + if(f12 == NULL) { + printf("Cannot Open f12\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f12)); +FILE* f13 = fopen("/sd/mydir/SoundDecoder_second/13.wav","rb"); + if(f13 == NULL) { + printf("Cannot Open f13\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f13)); +FILE* f14 = fopen("/sd/mydir/SoundDecoder_second/14.wav","rb"); + if(f14 == NULL) { + printf("Cannot Open f14\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f14)); +FILE* f15 = fopen("/sd/mydir/SoundDecoder_second/15.wav","rb"); + if(f15 == NULL) { + printf("Cannot Open f15\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f15)); +FILE* f16 = fopen("/sd/mydir/SoundDecoder_second/16.wav","rb"); + if(f16 == NULL) { + printf("Cannot Open f16\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f16)); +FILE* f17 = fopen("/sd/mydir/SoundDecoder_second/17.wav","rb"); + if(f17 == NULL) { + printf("Cannot Open f17\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f17)); +FILE* f18 = fopen("/sd/mydir/SoundDecoder_second/18.wav","rb"); + if(f18 == NULL) { + printf("Cannot Open f18\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f18)); +FILE* f19 = fopen("/sd/mydir/SoundDecoder_second/19.wav","rb"); + if(f19 == NULL) { + printf("Cannot Open f19\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f19)); +FILE* f20 = fopen("/sd/mydir/SoundDecoder_second/20.wav","rb"); + if(f20 == NULL) { + printf("Cannot Open f20\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f20)); +FILE* f21 = fopen("/sd/mydir/SoundDecoder_second/21.wav","rb"); + if(f21 == NULL) { + printf("Cannot Open f21\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f21)); +FILE* f22 = fopen("/sd/mydir/SoundDecoder_second/22.wav","rb"); + if(f22 == NULL) { + printf("Cannot Open f22\n\r"); + } +printf("size of file pointer: %d\n\r",sizeof(f22)); +*/ timer_open.reset(); timer_open.start(); - wavfile1 = fopen("/sd/mydir/SoundDecoder_second/01.wav","rb"); - if(wavfile1 == NULL) { + wavfile1 = sd.open("/sd/mydir/SoundDecoder_second/01.wav","rb"); + if(wavfile1 == NULL) { printf("Cannot Open wavfile1\n\r"); } - - timer_open.reset(); + printf("size of wavfile1 %d\n\r",sizeof(wavfile1)); + timer_open.stop(); printf("It took %d useconds to open file\n\r",timer_open.read_us()); - - + timer_open.reset(); + + +printf("Size of wavfile 1: %d bytes\n\r",sizeof(wavfile1)); timer_open.start(); wavfile2 = fopen("/sd/mydir/SoundDecoder_second/09.wav","rb"); - if(wavfile2 == NULL) { + if(wavfile2 == NULL) { printf("Cannot Open wavfile2\n\r"); } - timer_open.reset(); + timer_open.stop(); printf("It took %d useconds to open file\n\r",timer_open.read_us()); - + timer_open.reset(); + timer_open.start(); wavfile3 = fopen("/sd/mydir/SoundDecoder_second/02.wav","rb"); - if(wavfile3 == NULL) { + if(wavfile3 == NULL) { printf("Cannot Open wavfile3\n\r"); } - timer_open.reset(); + timer_open.stop(); printf("It took %d useconds to open file\n\r",timer_open.read_us()); - - + timer_open.reset(); + + Sound1 = ReadFileInfo(Sound1,wavfile1); Sound2 = ReadFileInfo(Sound2,wavfile2); Sound3 = ReadFileInfo(Sound3,wavfile3); + /* + FILE* wavfile4 = fopen("/sd/mydir/SoundDecoder_second/04.wav","rb"); + if(wavfile4 == NULL) { + printf("Cannot Open wavfile4\n\r"); + } + Sound4 = ReadFileInfo(Sound4,wavfile4); + */ - + fclose(wavfile2); + fclose(wavfile3); NotchFadeIn.LengthSecs = 2; NotchFadeOut.LengthSecs = 2; NotchFadeIn = FadeDataInitialise(NotchFadeIn); @@ -445,33 +607,36 @@ TickFadeOut.attach(&FadeOutIsr,10.0); + +//timer_interrupt.reset(); + printf("about to play wav file\n\r"); Play_WaveFileLoop(Sound1,Sound2,Sound3,wavfile1,wavfile2,wavfile3); //Play_WaveFileDual(StartupWav,WavInfo_Startup); printf("finished playing Wav file\n\r"); - - + + timer_open.reset(); timer_open.start(); fclose(wavfile1); timer_open.stop(); printf("It took %d useconds to close file\n\r",timer_open.read_us()); - + timer_open.reset(); - timer_open.start(); + timer_open.start(); fclose(wavfile2); timer_open.stop(); - printf("It took %d useconds to close file\n\r",timer_open.read_us()); - - + printf("It took %d useconds to close file\n\r",timer_open.read_us()); + + timer_open.reset(); - timer_open.start(); + timer_open.start(); fclose(wavfile3); timer_open.stop(); printf("It took %d useconds to close file\n\r",timer_open.read_us()); - - - + + + /************************************PLAY WAV FILE LOOP*******************/ //Play_WaveFileLoop(Sound, NotchingSet); /************************************END OF PLAY WAV FILE LOOP*************/ @@ -494,7 +659,7 @@ //printf("wav_format.sample_rate: %d\n\r",FileInfo.FileFormat.sample_rate); fread(&Sound.FileInfo.FileData,sizeof(Sound.FileInfo.FileData),1,wav_file); - //printf("wav_data.subchunk2_size: %d\n\r",FileInfo.FileData.subchunk2_size); + printf("wav_data.subchunk2_size: %d\n\r",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,wav_file); //This isnt actually required, its just a test Sound.FileInfo.num_slices = Sound.FileInfo.FileData.subchunk2_size/Sound.FileInfo.FileFormat.block_align; @@ -676,10 +841,13 @@ - /*Block1*/ - /*Read in data for current sound files. We only have 3 active engine noises at a time. - When it becomes time to transition up again, we then flip to the opposite block, and perform - the opposite operation.*/ + /*Block1*/ + /*Read in data for current sound files. We only have 3 active engine noises at a time. + When it becomes time to transition up again, we then flip to the opposite block, and perform + the opposite operation.*/ + + + if(BlockFlag == 0) { //Sound1======================================================================================= if( slice1 == (Sound1.FileInfo.num_slices-1) ) { slice1 = 0; @@ -691,19 +859,10 @@ fread(Sound1.FileInfo.slice_buf,Sound1.FileInfo.FileFormat.block_align,1,wavfile1); Sound1.data_sptr=(short *)Sound1.FileInfo.slice_buf; // 16 bit samples //============================================================================================= - - -//Sound2======================================================================================= - fread(Sound2.FileInfo.slice_buf,Sound2.FileInfo.FileFormat.block_align,1,wavfile2); - Sound2.data_sptr=(short *)Sound2.FileInfo.slice_buf; // 16 bit samples -//============================================================================================= + } - + else if(BlockFlag == 1) { -//Sound3======================================================================================= - fread(Sound3.FileInfo.slice_buf,Sound3.FileInfo.FileFormat.block_align,1,wavfile3); - Sound3.data_sptr=(short *)Sound3.FileInfo.slice_buf; // 16 bit samples -//============================================================================================= @@ -716,56 +875,94 @@ //We are now performing this section above. - if(FadeFlag) { - if(feof(wavfile1)) { - fseek(wavfile1,44,SEEK_SET); - } + if(FadeFlag) { + if( slice1 == (Sound1.FileInfo.num_slices-1) ) { + slice1 = 0; + fseek(wavfile1,44,SEEK_SET); + } + if(OneOff == 1) { - //require this to get the fadeout coefficient for Sound1. - NotchFadeOut.FadeCoeff = NotchFadeOut.FadeOut();//compute new FadeOut Coeff value + wavfile2 = fopen("/sd/mydir/SoundDecoder_second/09.wav","rb"); + if(wavfile2 == NULL) { + printf("Cannot Open wavfile2\n\r"); + } + + wavfile3 = fopen("/sd/mydir/SoundDecoder_second/02.wav","rb"); + if(wavfile3 == NULL) { + printf("Cannot Open wavfile3\n\r"); + } + fseek(wavfile2,44,SEEK_SET); + fseek(wavfile3,44,SEEK_SET); + /* + FILE* wavfile4 = fopen("/sd/mydir/SoundDecoder_second/04.wav","rb"); + if(wavfile4 == NULL) { + printf("Cannot Open wavfile3\n\r"); + } + */ + OneOff = 0; + } + + fread(Sound1.FileInfo.slice_buf,Sound1.FileInfo.FileFormat.block_align,1,wavfile1); + Sound1.data_sptr=(short *)Sound1.FileInfo.slice_buf; // 16 bit samples + +//Sound2======================================================================================= + fread(Sound2.FileInfo.slice_buf,Sound2.FileInfo.FileFormat.block_align,1,wavfile2); + Sound2.data_sptr=(short *)Sound2.FileInfo.slice_buf; // 16 bit samples +//============================================================================================= - if( ((Sound2.FileInfo.FileData.subchunk2_size) - NotchFadeIn.Length - 2*11025) <= (ftell(wavfile2) + 44)) - { +//Sound3======================================================================================= + fread(Sound3.FileInfo.slice_buf,Sound3.FileInfo.FileFormat.block_align,1,wavfile3); + Sound3.data_sptr=(short *)Sound3.FileInfo.slice_buf; // 16 bit samples +//============================================================================================= + + //require this to get the fadeout coefficient for Sound1. + NotchFadeOut.FadeCoeff = NotchFadeOut.FadeOut();//compute new FadeOut Coeff value + + + + if( ((Sound2.FileInfo.FileData.subchunk2_size) - NotchFadeIn.Length - 2*11025) <= (ftell(wavfile2) + 44)) { - //required for calculating the fade In coefficient for Sound3 - NotchFadeIn.FadeCoeff = NotchFadeIn.FadeIn(); + //required for calculating the fade In coefficient for Sound3 + NotchFadeIn.FadeCoeff = NotchFadeIn.FadeIn(); - //Read In the next Notch + //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; - */ - //no longer require the above section as we are reading in data for Sound3 (above, at beginning of function). + /* + 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; + */ + //no longer require the above section as we are reading in data for Sound3 (above, at beginning of function). + + if( (ftell(wavfile2) + 44) >= Sound2.FileInfo.FileData.subchunk2_size ) { - if( (ftell(wavfile2) + 44) >= Sound2.FileInfo.FileData.subchunk2_size ) { + //need to explicitly test if this notation/syntax works for pointers.... + /*Was this ever tested?? no idea... + If not then we need to pass in the 3 different "data_sptr" variables in separately, and not tied to a specific class + or structure.*/ + *Sound1.data_sptr = *Sound3.data_sptr*NotchFadeIn.FadeCoeff;//Sound 3 by itself. + //fclose(wavfile2); + //fclose(wavfile1); + } else { + *Sound1.data_sptr = *Sound1.data_sptr*NotchFadeOut.FadeCoeff + *Sound2.data_sptr + *Sound3.data_sptr*NotchFadeIn.FadeCoeff;//Sounds 1, 2 and 3 Cross-fade. + //probably later on redesign this to work with flags - that way it may be a little easier to debug any issues. + } - //need to explicitly test if this notation/syntax works for pointers.... - /*Was this ever tested?? no idea... - If not then we need to pass in the 3 different "data_sptr" variables in separately, and not tied to a specific class - or structure.*/ - *Sound1.data_sptr = *Sound3.data_sptr*NotchFadeIn.FadeCoeff;//Sound 3 by itself. } else { - *Sound1.data_sptr = *Sound1.data_sptr*NotchFadeOut.FadeCoeff + *Sound2.data_sptr + *Sound3.data_sptr*NotchFadeIn.FadeCoeff;//Sounds 1, 2 and 3 Cross-fade. - //probably later on redesign this to work with flags - that way it may be a little easier to debug any issues. + *Sound1.data_sptr = *Sound1.data_sptr*NotchFadeOut.FadeCoeff + *Sound2.data_sptr;//Sound1 and Sound 2 cross fade } - } else { - *Sound1.data_sptr = *Sound1.data_sptr*NotchFadeOut.FadeCoeff + *Sound2.data_sptr;//Sound1 and Sound 2 cross fade } + + /********************END OF DATA ASSIGNMENT SECTION*************************************************/ + } - /********************END OF DATA ASSIGNMENT SECTION*************************************************/ - - - - /**********************************************************************************************************/ /****************************DATA OUTPUT SECTION***********************************************************/