old demo that i want to try in mbed studio

Dependencies:   mbed SDFileSystem_Copy_of_mbed_version I2S

Committer:
roryhand
Date:
Sun Sep 08 20:53:06 2019 +0000
Revision:
48:01490448a05a
Parent:
47:9334a8f54997
Child:
49:ce6b36eb0d88
WIP - beginning to add in extra code to make Transitions between notches work.  Haven't figured out how to get passing in the names to work, but this will come later.  Need to check that opening and closing dynamically wont stop it sounding good!!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
roryhand 1:aac37edee302 1
roryhand 0:e89d7a0bfa3b 2 // 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.
roryhand 0:e89d7a0bfa3b 3 //however if i use the write function with 4 arguments (as opposed to just 1 argument) then it doesnt work
roryhand 0:e89d7a0bfa3b 4 //only works with the 1 argument version!!!
roryhand 0:e89d7a0bfa3b 5
roryhand 0:e89d7a0bfa3b 6
roryhand 0:e89d7a0bfa3b 7 //THIS VERSION WORKED, CHANGED SOME THINGS, THEN CHANGED THEM BACK. NOW IT NO LONGER WORKS!!!!
roryhand 0:e89d7a0bfa3b 8 #include "mbed.h"
roryhand 0:e89d7a0bfa3b 9 #include "math.h"
roryhand 1:aac37edee302 10 #include "I2S.h"
roryhand 1:aac37edee302 11 #include "SDFileSystem.h"
roryhand 0:e89d7a0bfa3b 12 #include "wm8731_Config_setup.h"
roryhand 0:e89d7a0bfa3b 13 #include "WOLFSON_config_consts.h"
roryhand 37:a563899ac0df 14 #include <string>
roryhand 0:e89d7a0bfa3b 15 #include <stdlib.h>
roryhand 27:a378f1f937ee 16 #include <fstream>
roryhand 27:a378f1f937ee 17 #include <iostream>
roryhand 0:e89d7a0bfa3b 18 #include <vector>
roryhand 0:e89d7a0bfa3b 19 #include <string>
roryhand 0:e89d7a0bfa3b 20 #define sample_freq 11025
roryhand 1:aac37edee302 21 #pragma import __use_two_region_memory
roryhand 0:e89d7a0bfa3b 22 DigitalOut myled(LED1);
roryhand 0:e89d7a0bfa3b 23 DigitalOut led2(LED2);
roryhand 0:e89d7a0bfa3b 24 DigitalOut led3(LED3);
roryhand 0:e89d7a0bfa3b 25 DigitalIn NotchUp(p16);
roryhand 38:3b4c05af5f36 26 DigitalIn NotchDown(p17);//check the pin!!! Dont know if this will actually work...
roryhand 0:e89d7a0bfa3b 27 InterruptIn Horn(p16);
roryhand 0:e89d7a0bfa3b 28 Ticker sampletick;
roryhand 45:0e8e1f2ec5d2 29
roryhand 0:e89d7a0bfa3b 30 Ticker TickFadeOut;
roryhand 0:e89d7a0bfa3b 31 Timer t;
roryhand 0:e89d7a0bfa3b 32 Timer t2;
roryhand 3:6169aeeaeeb4 33 Timer NotchTimer;
roryhand 27:a378f1f937ee 34 Timer timer_open;
roryhand 0:e89d7a0bfa3b 35
roryhand 48:01490448a05a 36 int BlockFlag = 0;
roryhand 48:01490448a05a 37
roryhand 0:e89d7a0bfa3b 38 Serial pc(USBTX, USBRX); // tx, rx //FOR DEBUGGING PROGRAM USING GNU SCREEN
roryhand 0:e89d7a0bfa3b 39 DigitalOut cs(p8);
roryhand 0:e89d7a0bfa3b 40 I2S i2s(I2S_TRANSMIT, p5, p6, p7);
roryhand 0:e89d7a0bfa3b 41 SDFileSystem sd(p11, p12, p13, p8, "sd"); // the new pinout that i am using
roryhand 0:e89d7a0bfa3b 42
roryhand 0:e89d7a0bfa3b 43
roryhand 0:e89d7a0bfa3b 44 /*struct A {
roryhand 0:e89d7a0bfa3b 45 int data;
roryhand 0:e89d7a0bfa3b 46 B b;
roryhand 0:e89d7a0bfa3b 47 };*/
roryhand 0:e89d7a0bfa3b 48
roryhand 0:e89d7a0bfa3b 49
roryhand 0:e89d7a0bfa3b 50
roryhand 0:e89d7a0bfa3b 51
roryhand 0:e89d7a0bfa3b 52 class classFade
roryhand 0:e89d7a0bfa3b 53 {
roryhand 1:aac37edee302 54 public:
roryhand 1:aac37edee302 55
roryhand 0:e89d7a0bfa3b 56 float powerval;
roryhand 0:e89d7a0bfa3b 57 float FadeIteration;
roryhand 0:e89d7a0bfa3b 58 float DecayFactor;
roryhand 0:e89d7a0bfa3b 59 float Denom;
roryhand 0:e89d7a0bfa3b 60 float FadeCoeff;
roryhand 0:e89d7a0bfa3b 61 float Natural_Exp;
roryhand 0:e89d7a0bfa3b 62 int LengthSecs;
roryhand 0:e89d7a0bfa3b 63 int Length;
roryhand 1:aac37edee302 64
roryhand 0:e89d7a0bfa3b 65 //member Functions
roryhand 0:e89d7a0bfa3b 66 float FadeOut(void)
roryhand 0:e89d7a0bfa3b 67 {
roryhand 0:e89d7a0bfa3b 68 powerval = -FadeIteration/Denom;
roryhand 1:aac37edee302 69 if (FadeIteration >=Length) {
roryhand 1:aac37edee302 70 FadeCoeff = 0;
roryhand 1:aac37edee302 71
roryhand 1:aac37edee302 72 } else {
roryhand 0:e89d7a0bfa3b 73 FadeCoeff = (Length - FadeIteration)/Length;
roryhand 0:e89d7a0bfa3b 74 }
roryhand 1:aac37edee302 75 FadeIteration = FadeIteration + 1;
roryhand 1:aac37edee302 76 return FadeCoeff;
roryhand 1:aac37edee302 77
roryhand 1:aac37edee302 78 }
roryhand 1:aac37edee302 79 float FadeIn(void)
roryhand 0:e89d7a0bfa3b 80 {
roryhand 0:e89d7a0bfa3b 81 powerval = FadeIteration/Denom;
roryhand 1:aac37edee302 82 if (FadeIteration >=Length) {
roryhand 1:aac37edee302 83 FadeCoeff = 1;
roryhand 1:aac37edee302 84
roryhand 1:aac37edee302 85 } else {
roryhand 0:e89d7a0bfa3b 86 FadeCoeff = FadeIteration/Length;
roryhand 0:e89d7a0bfa3b 87 }
roryhand 0:e89d7a0bfa3b 88
roryhand 1:aac37edee302 89 FadeIteration = FadeIteration + 1;
roryhand 1:aac37edee302 90 return FadeCoeff;
roryhand 1:aac37edee302 91
roryhand 1:aac37edee302 92 }
roryhand 0:e89d7a0bfa3b 93 };
roryhand 0:e89d7a0bfa3b 94
roryhand 0:e89d7a0bfa3b 95 classFade IdleFadeOut;
roryhand 0:e89d7a0bfa3b 96 classFade N2FadeIn;
roryhand 0:e89d7a0bfa3b 97
roryhand 2:957d3b2afff4 98 classFade NotchFadeOut;
roryhand 2:957d3b2afff4 99 classFade NotchFadeIn;
roryhand 2:957d3b2afff4 100
roryhand 0:e89d7a0bfa3b 101
roryhand 0:e89d7a0bfa3b 102
roryhand 0:e89d7a0bfa3b 103
roryhand 0:e89d7a0bfa3b 104
roryhand 1:aac37edee302 105 typedef struct uFMT_STRUCT {
roryhand 1:aac37edee302 106 short comp_code;
roryhand 1:aac37edee302 107 short num_channels;
roryhand 1:aac37edee302 108 unsigned sample_rate;
roryhand 1:aac37edee302 109 unsigned avg_Bps;
roryhand 1:aac37edee302 110 short block_align;
roryhand 1:aac37edee302 111 short sig_bps;
roryhand 0:e89d7a0bfa3b 112 } FMT_STRUCT;
roryhand 0:e89d7a0bfa3b 113
roryhand 1:aac37edee302 114 typedef struct uNotch_STRUCT {
roryhand 1:aac37edee302 115 short Notch;
roryhand 1:aac37edee302 116 short NotchTransUp;
roryhand 1:aac37edee302 117 short NotchTransDown;
roryhand 1:aac37edee302 118 short NotchDirection;
roryhand 1:aac37edee302 119 } Notch_STRUCT;
roryhand 1:aac37edee302 120
roryhand 0:e89d7a0bfa3b 121 typedef struct uDATA_STRUCT {
roryhand 1:aac37edee302 122 unsigned subchunk2_ID;
roryhand 1:aac37edee302 123 unsigned subchunk2_size;
roryhand 1:aac37edee302 124 char * data_buf;
roryhand 1:aac37edee302 125 } DATA_STRUCT;
roryhand 0:e89d7a0bfa3b 126
roryhand 1:aac37edee302 127 typedef struct uWAV_FILE_STRUCT {
roryhand 1:aac37edee302 128 FILE *WavFile;
roryhand 1:aac37edee302 129 int id_number;
roryhand 1:aac37edee302 130 char *slice_buf;
roryhand 1:aac37edee302 131 int num_slices;
roryhand 1:aac37edee302 132 FMT_STRUCT FileFormat;
roryhand 1:aac37edee302 133 DATA_STRUCT FileData;
roryhand 0:e89d7a0bfa3b 134 } WAV_FILE_STRUCT;
roryhand 0:e89d7a0bfa3b 135
roryhand 0:e89d7a0bfa3b 136 /*typedef struct uWAV_FILE_STRUCT{
roryhand 1:aac37edee302 137 FILE* WavFile;
roryhand 1:aac37edee302 138
roryhand 1:aac37edee302 139
roryhand 0:e89d7a0bfa3b 140 }WAV_FILE_STRUCT;*/
roryhand 0:e89d7a0bfa3b 141 class classSoundFile
roryhand 0:e89d7a0bfa3b 142 {
roryhand 1:aac37edee302 143 public:
roryhand 1:aac37edee302 144
roryhand 44:a9e84d333a6a 145 //add a class constructor at some point in the future (perform tests in visual studio)
roryhand 1:aac37edee302 146 WAV_FILE_STRUCT FileInfo;
roryhand 2:957d3b2afff4 147 short * data_sptr;
roryhand 36:569ec4335f92 148 string file_location;
roryhand 1:aac37edee302 149 //classSoundFile(string filename);//this is the constructor
roryhand 1:aac37edee302 150 //string filename;
roryhand 0:e89d7a0bfa3b 151 };
roryhand 0:e89d7a0bfa3b 152
roryhand 1:aac37edee302 153 //class constructor;
roryhand 1:aac37edee302 154 /*classSoundFile::classSoundFile(string filename)
roryhand 1:aac37edee302 155 {
roryhand 1:aac37edee302 156 //Declare RootFolder and the directory for the appropriate file.
roryhand 1:aac37edee302 157 //How we index into filename[] from the outside of this class is another
roryhand 1:aac37edee302 158 //issue...
roryhand 1:aac37edee302 159 FileInfo.WavFile = fopen("/sd/mydir/645Engine/Startup.wav","rb");
roryhand 1:aac37edee302 160 fseek(FileInfo.WavFile,20,SEEK_SET);
roryhand 1:aac37edee302 161 fread(&FileInfo.FileFormat,sizeof(FileInfo.FileFormat),1,FileInfo.WavFile);
roryhand 1:aac37edee302 162 printf("wav_format.sample_rate: %d\n\r",FileInfo.FileFormat.sample_rate);
roryhand 1:aac37edee302 163 fread(&FileInfo.FileData,sizeof(FileInfo.FileData),1,FileInfo.WavFile);
roryhand 1:aac37edee302 164 printf("wav_data.subchunk2_size: %d\n\r",FileInfo.FileData.subchunk2_size);
roryhand 1:aac37edee302 165 FileInfo.slice_buf = ( char *)malloc(FileInfo.FileFormat.block_align);
roryhand 1:aac37edee302 166 fread(FileInfo.slice_buf,FileInfo.FileFormat.block_align,1,FileInfo.WavFile); //This isnt actually required, its just a test
roryhand 1:aac37edee302 167 FileInfo.num_slices = FileInfo.FileData.subchunk2_size/FileInfo.FileFormat.block_align;
roryhand 1:aac37edee302 168 }*/
roryhand 1:aac37edee302 169
roryhand 38:3b4c05af5f36 170 int notch_flag = 0;
roryhand 0:e89d7a0bfa3b 171 int i = 0;
roryhand 0:e89d7a0bfa3b 172 int h = 0;
roryhand 0:e89d7a0bfa3b 173 short bufflen = 1;
roryhand 0:e89d7a0bfa3b 174 int buffer[1];
roryhand 1:aac37edee302 175 int AudioFormat, NumChannels, SampleRate, BitsPerSample ;
roryhand 0:e89d7a0bfa3b 176 char *slice_buf;
roryhand 0:e89d7a0bfa3b 177 short *data_sptr;
roryhand 0:e89d7a0bfa3b 178 short *data_sptr_horn;
roryhand 0:e89d7a0bfa3b 179 short *data_sptr_IdleN2;
roryhand 0:e89d7a0bfa3b 180 short * data_sptr_bell;
roryhand 0:e89d7a0bfa3b 181 short * data_sptr_N2;
roryhand 0:e89d7a0bfa3b 182 short * data_sptr_Flange;
roryhand 0:e89d7a0bfa3b 183 unsigned char *data_bptr;
roryhand 0:e89d7a0bfa3b 184 int *data_wptr;
roryhand 0:e89d7a0bfa3b 185 unsigned channel;
roryhand 45:0e8e1f2ec5d2 186 long slice, slice1, slice2, slice3, num_slices;
roryhand 0:e89d7a0bfa3b 187 int verbosity = 0;
roryhand 0:e89d7a0bfa3b 188 int verbosity2 = 0;
roryhand 0:e89d7a0bfa3b 189 int verbosity3 = 0;
roryhand 0:e89d7a0bfa3b 190 int verbosity4 = 0;
roryhand 0:e89d7a0bfa3b 191 int verbosity5 = 0;
roryhand 0:e89d7a0bfa3b 192 int interrupt_condition = 1;
roryhand 0:e89d7a0bfa3b 193 int sampling_freq = 11025;
roryhand 0:e89d7a0bfa3b 194 const int BufferLen = 2000;
roryhand 0:e89d7a0bfa3b 195 short Buffer1[BufferLen];
roryhand 0:e89d7a0bfa3b 196 short Buffer2[BufferLen];
roryhand 0:e89d7a0bfa3b 197 short place_hold1 = 0;
roryhand 0:e89d7a0bfa3b 198 short place_hold2 = 0;
roryhand 0:e89d7a0bfa3b 199
roryhand 3:6169aeeaeeb4 200
roryhand 3:6169aeeaeeb4 201 string FOLDER;
roryhand 3:6169aeeaeeb4 202 string RootFolder = "/sd/mydir/SoundDecoder/";
roryhand 3:6169aeeaeeb4 203 string filename[25];
roryhand 3:6169aeeaeeb4 204 classSoundFile Sound[22];
roryhand 3:6169aeeaeeb4 205
roryhand 0:e89d7a0bfa3b 206 volatile int flag1 = 1;
roryhand 0:e89d7a0bfa3b 207 volatile int flag2 = 0;
roryhand 0:e89d7a0bfa3b 208 volatile int flag3 = 1;
roryhand 0:e89d7a0bfa3b 209 volatile int flag4 = 0;
roryhand 0:e89d7a0bfa3b 210 int FLAGBUFF1 = 0;
roryhand 0:e89d7a0bfa3b 211 int FLAGBUFF2 = 0;
roryhand 0:e89d7a0bfa3b 212 int BellFlag = 0;
roryhand 0:e89d7a0bfa3b 213 int BellFlag2 = 0;
roryhand 0:e89d7a0bfa3b 214 int FadeFlag = 0;
roryhand 32:6ee488c97dcc 215 int FileSwitchFlag = 0;
roryhand 0:e89d7a0bfa3b 216
roryhand 0:e89d7a0bfa3b 217
roryhand 0:e89d7a0bfa3b 218 short value[1];
roryhand 0:e89d7a0bfa3b 219 FILE *HornWav;
roryhand 0:e89d7a0bfa3b 220 FILE *edsheeran_wav;
roryhand 0:e89d7a0bfa3b 221 FILE *Startup_wav;
roryhand 0:e89d7a0bfa3b 222 FILE *IdleN2Wav;
roryhand 0:e89d7a0bfa3b 223 FILE *N2Wav;
roryhand 0:e89d7a0bfa3b 224 FILE *BellWav;
roryhand 0:e89d7a0bfa3b 225 FILE *FlangeWav;
roryhand 16:5e3420d0509b 226 FILE *HeyWav;
roryhand 0:e89d7a0bfa3b 227 //long long slice_value;
roryhand 0:e89d7a0bfa3b 228 int slice_value[1];
roryhand 0:e89d7a0bfa3b 229
roryhand 0:e89d7a0bfa3b 230
roryhand 45:0e8e1f2ec5d2 231 FILE *wavfile1;
roryhand 45:0e8e1f2ec5d2 232 FILE *wavfile2;
roryhand 45:0e8e1f2ec5d2 233 FILE *wavfile3;
roryhand 45:0e8e1f2ec5d2 234
roryhand 45:0e8e1f2ec5d2 235 classSoundFile Sound1;
roryhand 45:0e8e1f2ec5d2 236 classSoundFile Sound2;
roryhand 45:0e8e1f2ec5d2 237 classSoundFile Sound3;
roryhand 45:0e8e1f2ec5d2 238
roryhand 0:e89d7a0bfa3b 239 WAV_FILE_STRUCT WavInfo_Horn;
roryhand 0:e89d7a0bfa3b 240 WAV_FILE_STRUCT WavInfo_IdleN2;
roryhand 0:e89d7a0bfa3b 241 WAV_FILE_STRUCT WavInfo_N2;
roryhand 0:e89d7a0bfa3b 242 WAV_FILE_STRUCT WavInfo_Bell;
roryhand 0:e89d7a0bfa3b 243 WAV_FILE_STRUCT WavInfo_Flange;
roryhand 20:9cc7d825c07b 244 WAV_FILE_STRUCT WavInfo_Hey;
roryhand 32:6ee488c97dcc 245 WAV_FILE_STRUCT WavInfo_N3;
roryhand 16:5e3420d0509b 246 WAV_FILE_STRUCT WavInfo_Frustration;
roryhand 0:e89d7a0bfa3b 247 Ticker flipper;
roryhand 0:e89d7a0bfa3b 248 char * slice_buf_bell;
roryhand 0:e89d7a0bfa3b 249 char * slice_buf_ed;
roryhand 0:e89d7a0bfa3b 250 char * slice_buf_startup;
roryhand 0:e89d7a0bfa3b 251 char * slice_buf_N2;
roryhand 1:aac37edee302 252 Notch_STRUCT NotchingSet;
roryhand 0:e89d7a0bfa3b 253 //test
roryhand 0:e89d7a0bfa3b 254 //short *data_sptr_bell = 0;
roryhand 0:e89d7a0bfa3b 255 short *data_sptr_ed = 0;
roryhand 0:e89d7a0bfa3b 256 short *data_sptr_startup = 0;
roryhand 32:6ee488c97dcc 257 FILE *StartupWav;
roryhand 32:6ee488c97dcc 258 FILE *N3Wav;
roryhand 33:a75f0a30fbdc 259 int temp = 0;
roryhand 1:aac37edee302 260 void flip()
roryhand 1:aac37edee302 261 {
roryhand 0:e89d7a0bfa3b 262 led2 = !led2;
roryhand 0:e89d7a0bfa3b 263 }
roryhand 0:e89d7a0bfa3b 264
roryhand 0:e89d7a0bfa3b 265
roryhand 0:e89d7a0bfa3b 266 void isr()
roryhand 0:e89d7a0bfa3b 267 {
roryhand 1:aac37edee302 268 if(flag1 == 0) {
roryhand 0:e89d7a0bfa3b 269 value[0] = Buffer1[place_hold1]>>4;
roryhand 0:e89d7a0bfa3b 270 i2s.write(value,1);//Send next PWM value to amp
roryhand 0:e89d7a0bfa3b 271 place_hold1 = place_hold1 + 1;
roryhand 1:aac37edee302 272 if( (place_hold1 >= BufferLen)) {
roryhand 0:e89d7a0bfa3b 273 led2 = !led2;
roryhand 0:e89d7a0bfa3b 274 place_hold1 = 0;
roryhand 0:e89d7a0bfa3b 275 place_hold2 = 0;
roryhand 0:e89d7a0bfa3b 276 flag1 = 1;
roryhand 0:e89d7a0bfa3b 277 flag2 = 0;
roryhand 1:aac37edee302 278 }
roryhand 1:aac37edee302 279 } else if(flag2 == 0) {
roryhand 0:e89d7a0bfa3b 280 value[0] = Buffer2[place_hold2]>>4;
roryhand 0:e89d7a0bfa3b 281 i2s.write(value,1);//Send next PWM value to amp
roryhand 0:e89d7a0bfa3b 282 place_hold2 = place_hold2 + 1;
roryhand 1:aac37edee302 283 if( (place_hold2 >= BufferLen) ) {
roryhand 0:e89d7a0bfa3b 284 led2 = !led2;
roryhand 0:e89d7a0bfa3b 285 place_hold1 = 0;
roryhand 0:e89d7a0bfa3b 286 place_hold2 = 0;
roryhand 0:e89d7a0bfa3b 287 flag1 = 0;
roryhand 1:aac37edee302 288 flag2 = 1;
roryhand 0:e89d7a0bfa3b 289 FLAGBUFF2 = 0;
roryhand 1:aac37edee302 290 }
roryhand 0:e89d7a0bfa3b 291 }
roryhand 0:e89d7a0bfa3b 292 }
roryhand 1:aac37edee302 293
roryhand 0:e89d7a0bfa3b 294 void horn_sound()
roryhand 0:e89d7a0bfa3b 295 {
roryhand 0:e89d7a0bfa3b 296 BellFlag = 1;
roryhand 0:e89d7a0bfa3b 297 fseek(HornWav,44,SEEK_SET);
roryhand 0:e89d7a0bfa3b 298 fseek(BellWav,44,SEEK_SET);
roryhand 0:e89d7a0bfa3b 299 fseek(FlangeWav,44,SEEK_SET);
roryhand 0:e89d7a0bfa3b 300 fseek(N2Wav,44,SEEK_SET);
roryhand 0:e89d7a0bfa3b 301 }
roryhand 0:e89d7a0bfa3b 302
roryhand 0:e89d7a0bfa3b 303
roryhand 32:6ee488c97dcc 304 void FileSwitch_isr()
roryhand 0:e89d7a0bfa3b 305 {
roryhand 32:6ee488c97dcc 306 FileSwitchFlag = 1;
roryhand 33:a75f0a30fbdc 307 temp = 1;
roryhand 33:a75f0a30fbdc 308 /*FILE* testwav = fopen("/sd/mydir/SoundDecoder_second/05.wav","rb");
roryhand 33:a75f0a30fbdc 309 if(N3Wav == NULL) {
roryhand 33:a75f0a30fbdc 310 printf("Cannot Open testwav\n\r");
roryhand 33:a75f0a30fbdc 311 }
roryhand 33:a75f0a30fbdc 312 */
roryhand 32:6ee488c97dcc 313 fseek(N3Wav,44,SEEK_SET);
roryhand 32:6ee488c97dcc 314 // fclose(StartupWav);
roryhand 0:e89d7a0bfa3b 315 }
roryhand 0:e89d7a0bfa3b 316
roryhand 0:e89d7a0bfa3b 317
roryhand 0:e89d7a0bfa3b 318 void FadeOutIsr()
roryhand 0:e89d7a0bfa3b 319 {
roryhand 48:01490448a05a 320 if (BlockFlag == 0) {
roryhand 48:01490448a05a 321 BlockFlag = 1;
roryhand 48:01490448a05a 322 fseek(wavfile2,44,SEEK_SET);
roryhand 48:01490448a05a 323 fseek(wavfile3,44,SEEK_SET);
roryhand 48:01490448a05a 324
roryhand 48:01490448a05a 325 } else if(BlockFlag == 1) {
roryhand 48:01490448a05a 326 BlockFlag = 2;
roryhand 48:01490448a05a 327 fclose(wavfile1);
roryhand 48:01490448a05a 328 fclose(wavfile2);
roryhand 48:01490448a05a 329 wavfile1 = fopen("/sd/mydir/SoundDecoder_second/03.wav","rb");
roryhand 48:01490448a05a 330 if(wavfile1 == NULL) {
roryhand 48:01490448a05a 331 printf("Cannot Open wavfile1\n\r");
roryhand 48:01490448a05a 332 }
roryhand 48:01490448a05a 333 wavfile2 = fopen("/sd/mydir/SoundDecoder_second/10.wav","rb");
roryhand 48:01490448a05a 334 if(wavfile2 == NULL) {
roryhand 48:01490448a05a 335 printf("Cannot Open wavfile2\n\r");
roryhand 48:01490448a05a 336 }
roryhand 48:01490448a05a 337
roryhand 48:01490448a05a 338 } else {
roryhand 48:01490448a05a 339
roryhand 48:01490448a05a 340 BlockFlag = 1;
roryhand 48:01490448a05a 341 fclose(wavfile2);
roryhand 48:01490448a05a 342 fclose(wavfile3);
roryhand 48:01490448a05a 343 wavfile2 = fopen("/sd/mydir/SoundDecoder_second/09.wav","rb");
roryhand 48:01490448a05a 344 if(wavfile2 == NULL) {
roryhand 48:01490448a05a 345 printf("Cannot Open wavfile2\n\r");
roryhand 48:01490448a05a 346 }
roryhand 48:01490448a05a 347 wavfile3 = fopen("/sd/mydir/SoundDecoder_second/02.wav","rb");
roryhand 48:01490448a05a 348 if(wavfile3 == NULL) {
roryhand 48:01490448a05a 349 printf("Cannot Open wavfile3\n\r");
roryhand 48:01490448a05a 350 }
roryhand 48:01490448a05a 351 }
roryhand 1:aac37edee302 352 FadeFlag = 1;
roryhand 47:9334a8f54997 353 //printf("We are inside the FadeOut interrupt routine\n\r");
roryhand 1:aac37edee302 354
roryhand 0:e89d7a0bfa3b 355 }
roryhand 38:3b4c05af5f36 356
roryhand 38:3b4c05af5f36 357
roryhand 38:3b4c05af5f36 358
roryhand 38:3b4c05af5f36 359
roryhand 0:e89d7a0bfa3b 360
roryhand 3:6169aeeaeeb4 361 classFade FadeDataInitialise(classFade FadeData);
roryhand 3:6169aeeaeeb4 362
roryhand 3:6169aeeaeeb4 363
roryhand 3:6169aeeaeeb4 364
roryhand 3:6169aeeaeeb4 365
roryhand 3:6169aeeaeeb4 366
roryhand 3:6169aeeaeeb4 367 //function prototypes
roryhand 45:0e8e1f2ec5d2 368 classSoundFile ReadFileInfo(classSoundFile Sound, FILE * wav_file);
roryhand 3:6169aeeaeeb4 369 classSoundFile LoadFileStream(classSoundFile FileInfo, string filename);
roryhand 3:6169aeeaeeb4 370
roryhand 3:6169aeeaeeb4 371 float FadeOut(void);
roryhand 3:6169aeeaeeb4 372 void Play_WaveFile(FILE * my_wav, WAV_FILE_STRUCT FileInfo);
roryhand 32:6ee488c97dcc 373 void Play_WaveFileDual(FILE * my_wav, WAV_FILE_STRUCT FileInfo);
roryhand 3:6169aeeaeeb4 374 //void Play_WaveFileLoop(FILE * my_wav, WAV_FILE_STRUCT FileInfo);
roryhand 3:6169aeeaeeb4 375 //*********************INTERRUPT ROUTINE FOR NOTCHING***************************
roryhand 0:e89d7a0bfa3b 376
roryhand 1:aac37edee302 377 void NotchUpIsr()
roryhand 0:e89d7a0bfa3b 378 {
roryhand 1:aac37edee302 379 if(1 <= NotchingSet.Notch < 8) {
roryhand 1:aac37edee302 380
roryhand 1:aac37edee302 381 NotchingSet.Notch = NotchingSet.Notch + 1;
roryhand 1:aac37edee302 382 NotchingSet.NotchTransUp = NotchingSet.Notch + 7;
roryhand 1:aac37edee302 383 NotchingSet.NotchDirection = 1;
roryhand 3:6169aeeaeeb4 384 FadeDataInitialise(NotchFadeIn);
roryhand 3:6169aeeaeeb4 385 FadeDataInitialise(NotchFadeOut);
roryhand 1:aac37edee302 386 }
roryhand 0:e89d7a0bfa3b 387 }
roryhand 0:e89d7a0bfa3b 388
roryhand 0:e89d7a0bfa3b 389 void NotchDownIsr()
roryhand 0:e89d7a0bfa3b 390 {
roryhand 1:aac37edee302 391 if(1 < NotchingSet.Notch <= 8) {
roryhand 1:aac37edee302 392 NotchingSet.Notch = NotchingSet.Notch - 1;
roryhand 1:aac37edee302 393 NotchingSet.NotchTransDown = NotchingSet.Notch + 15;;
roryhand 1:aac37edee302 394 NotchingSet.NotchDirection = 0;
roryhand 3:6169aeeaeeb4 395 FadeDataInitialise(NotchFadeIn);
roryhand 3:6169aeeaeeb4 396 FadeDataInitialise(NotchFadeOut);
roryhand 1:aac37edee302 397 }
roryhand 1:aac37edee302 398 }
roryhand 0:e89d7a0bfa3b 399
roryhand 0:e89d7a0bfa3b 400
roryhand 3:6169aeeaeeb4 401 /**********************END OF INTERRUPT ROUTINE FOR NOTCHING*******************/
roryhand 3:6169aeeaeeb4 402
roryhand 3:6169aeeaeeb4 403
roryhand 1:aac37edee302 404
roryhand 0:e89d7a0bfa3b 405
roryhand 3:6169aeeaeeb4 406
roryhand 3:6169aeeaeeb4 407
roryhand 44:a9e84d333a6a 408 void Play_WaveFileLoop(classSoundFile Sound1, classSoundFile Sound2, classSoundFile Sound3, FILE* wavfile1,FILE* wavfile2, FILE* wavfile3);
roryhand 1:aac37edee302 409 int main()
roryhand 1:aac37edee302 410 {
roryhand 44:a9e84d333a6a 411
roryhand 0:e89d7a0bfa3b 412 NotchUp.mode(PullUp);
roryhand 38:3b4c05af5f36 413 NotchDown.mode(PullUp);
roryhand 0:e89d7a0bfa3b 414
roryhand 0:e89d7a0bfa3b 415 pc.printf("Beginning of program\n");
roryhand 32:6ee488c97dcc 416
roryhand 13:8e93396a27c5 417
roryhand 13:8e93396a27c5 418
roryhand 4:55fbbb049bae 419
roryhand 25:5336e1cf38d6 420 printf("Do we even get to this stupid bloody point\n\r");
roryhand 0:e89d7a0bfa3b 421 //Populate our class instances with some data (is there an implicit way to do this?)
roryhand 28:6b2353fad12d 422
roryhand 1:aac37edee302 423
roryhand 3:6169aeeaeeb4 424 printf("hello\n\r");
roryhand 0:e89d7a0bfa3b 425 //Set up the wolfson Audio Codec board
roryhand 0:e89d7a0bfa3b 426 wm8731_Config_setup();
roryhand 0:e89d7a0bfa3b 427 //i2s audio data transfer code??
roryhand 0:e89d7a0bfa3b 428 i2s.stereomono(I2S_STEREO);
roryhand 0:e89d7a0bfa3b 429 i2s.masterslave(I2S_MASTER);
roryhand 0:e89d7a0bfa3b 430 led3 = 1;
roryhand 0:e89d7a0bfa3b 431 led2 = 1;
roryhand 45:0e8e1f2ec5d2 432 printf("Hello i2s has started!");
roryhand 30:4a8e80b243c4 433 i2s.start();
roryhand 0:e89d7a0bfa3b 434 sampletick.attach(&isr,1.0/sampling_freq); //1/16000
roryhand 45:0e8e1f2ec5d2 435 //fileswitch_tick.attach(&FileSwitch_isr,6.0);//So we can switch between playing file 1 and file 2, including opening and closing
roryhand 45:0e8e1f2ec5d2 436 //not convinced we need this above line at the moment!!
roryhand 31:0f8c3adf09c3 437
roryhand 31:0f8c3adf09c3 438 timer_open.reset();
roryhand 32:6ee488c97dcc 439 timer_open.start();
roryhand 45:0e8e1f2ec5d2 440 wavfile1 = fopen("/sd/mydir/SoundDecoder_second/01.wav","rb");
roryhand 48:01490448a05a 441 if(wavfile1 == NULL) {
roryhand 45:0e8e1f2ec5d2 442 printf("Cannot Open wavfile1\n\r");
roryhand 32:6ee488c97dcc 443 }
roryhand 48:01490448a05a 444
roryhand 31:0f8c3adf09c3 445 timer_open.reset();
roryhand 31:0f8c3adf09c3 446 printf("It took %d useconds to open file\n\r",timer_open.read_us());
roryhand 48:01490448a05a 447
roryhand 48:01490448a05a 448
roryhand 45:0e8e1f2ec5d2 449 timer_open.start();
roryhand 47:9334a8f54997 450 wavfile2 = fopen("/sd/mydir/SoundDecoder_second/09.wav","rb");
roryhand 48:01490448a05a 451 if(wavfile2 == NULL) {
roryhand 45:0e8e1f2ec5d2 452 printf("Cannot Open wavfile2\n\r");
roryhand 45:0e8e1f2ec5d2 453 }
roryhand 32:6ee488c97dcc 454 timer_open.reset();
roryhand 45:0e8e1f2ec5d2 455 printf("It took %d useconds to open file\n\r",timer_open.read_us());
roryhand 48:01490448a05a 456
roryhand 32:6ee488c97dcc 457 timer_open.start();
roryhand 47:9334a8f54997 458 wavfile3 = fopen("/sd/mydir/SoundDecoder_second/02.wav","rb");
roryhand 48:01490448a05a 459 if(wavfile3 == NULL) {
roryhand 45:0e8e1f2ec5d2 460 printf("Cannot Open wavfile3\n\r");
roryhand 45:0e8e1f2ec5d2 461 }
roryhand 45:0e8e1f2ec5d2 462 timer_open.reset();
roryhand 45:0e8e1f2ec5d2 463 printf("It took %d useconds to open file\n\r",timer_open.read_us());
roryhand 48:01490448a05a 464
roryhand 48:01490448a05a 465
roryhand 45:0e8e1f2ec5d2 466 Sound1 = ReadFileInfo(Sound1,wavfile1);
roryhand 45:0e8e1f2ec5d2 467 Sound2 = ReadFileInfo(Sound2,wavfile2);
roryhand 45:0e8e1f2ec5d2 468 Sound3 = ReadFileInfo(Sound3,wavfile3);
roryhand 13:8e93396a27c5 469
roryhand 32:6ee488c97dcc 470
roryhand 47:9334a8f54997 471 NotchFadeIn.LengthSecs = 2;
roryhand 46:de390e45c2af 472 NotchFadeOut.LengthSecs = 2;
roryhand 46:de390e45c2af 473 NotchFadeIn = FadeDataInitialise(NotchFadeIn);
roryhand 46:de390e45c2af 474 NotchFadeOut = FadeDataInitialise(NotchFadeOut);
roryhand 45:0e8e1f2ec5d2 475
roryhand 45:0e8e1f2ec5d2 476
roryhand 45:0e8e1f2ec5d2 477
roryhand 45:0e8e1f2ec5d2 478 TickFadeOut.attach(&FadeOutIsr,10.0);
roryhand 45:0e8e1f2ec5d2 479
roryhand 20:9cc7d825c07b 480 printf("about to play wav file\n\r");
roryhand 45:0e8e1f2ec5d2 481 Play_WaveFileLoop(Sound1,Sound2,Sound3,wavfile1,wavfile2,wavfile3);
roryhand 45:0e8e1f2ec5d2 482 //Play_WaveFileDual(StartupWav,WavInfo_Startup);
roryhand 20:9cc7d825c07b 483 printf("finished playing Wav file\n\r");
roryhand 48:01490448a05a 484
roryhand 48:01490448a05a 485
roryhand 31:0f8c3adf09c3 486 timer_open.reset();
roryhand 31:0f8c3adf09c3 487 timer_open.start();
roryhand 45:0e8e1f2ec5d2 488 fclose(wavfile1);
roryhand 31:0f8c3adf09c3 489 timer_open.stop();
roryhand 31:0f8c3adf09c3 490 printf("It took %d useconds to close file\n\r",timer_open.read_us());
roryhand 48:01490448a05a 491
roryhand 45:0e8e1f2ec5d2 492 timer_open.reset();
roryhand 48:01490448a05a 493 timer_open.start();
roryhand 45:0e8e1f2ec5d2 494 fclose(wavfile2);
roryhand 45:0e8e1f2ec5d2 495 timer_open.stop();
roryhand 48:01490448a05a 496 printf("It took %d useconds to close file\n\r",timer_open.read_us());
roryhand 48:01490448a05a 497
roryhand 48:01490448a05a 498
roryhand 45:0e8e1f2ec5d2 499 timer_open.reset();
roryhand 48:01490448a05a 500 timer_open.start();
roryhand 45:0e8e1f2ec5d2 501 fclose(wavfile3);
roryhand 45:0e8e1f2ec5d2 502 timer_open.stop();
roryhand 45:0e8e1f2ec5d2 503 printf("It took %d useconds to close file\n\r",timer_open.read_us());
roryhand 48:01490448a05a 504
roryhand 48:01490448a05a 505
roryhand 48:01490448a05a 506
roryhand 9:dd9cae06b202 507 /************************************PLAY WAV FILE LOOP*******************/
roryhand 20:9cc7d825c07b 508 //Play_WaveFileLoop(Sound, NotchingSet);
roryhand 9:dd9cae06b202 509 /************************************END OF PLAY WAV FILE LOOP*************/
roryhand 13:8e93396a27c5 510
roryhand 13:8e93396a27c5 511
roryhand 1:aac37edee302 512 i2s.stop();
roryhand 0:e89d7a0bfa3b 513
roryhand 0:e89d7a0bfa3b 514 }
roryhand 0:e89d7a0bfa3b 515
roryhand 0:e89d7a0bfa3b 516
roryhand 3:6169aeeaeeb4 517
roryhand 3:6169aeeaeeb4 518
roryhand 3:6169aeeaeeb4 519
roryhand 3:6169aeeaeeb4 520
roryhand 45:0e8e1f2ec5d2 521 classSoundFile ReadFileInfo(classSoundFile Sound, FILE * wav_file)
roryhand 0:e89d7a0bfa3b 522 {
roryhand 0:e89d7a0bfa3b 523 fseek(wav_file,20,SEEK_SET);
roryhand 22:706e86dc0d45 524 printf("We have just seeked through this file\n\r");
roryhand 45:0e8e1f2ec5d2 525 fread(&Sound.FileInfo.FileFormat,sizeof(Sound.FileInfo.FileFormat),1,wav_file);
roryhand 1:aac37edee302 526 //printf("wav_format.sample_rate: %d\n\r",FileInfo.FileFormat.sample_rate);
roryhand 1:aac37edee302 527
roryhand 45:0e8e1f2ec5d2 528 fread(&Sound.FileInfo.FileData,sizeof(Sound.FileInfo.FileData),1,wav_file);
roryhand 1:aac37edee302 529 //printf("wav_data.subchunk2_size: %d\n\r",FileInfo.FileData.subchunk2_size);
roryhand 45:0e8e1f2ec5d2 530 Sound.FileInfo.slice_buf = ( char *)malloc(Sound.FileInfo.FileFormat.block_align);
roryhand 45:0e8e1f2ec5d2 531 fread(Sound.FileInfo.slice_buf,Sound.FileInfo.FileFormat.block_align,1,wav_file); //This isnt actually required, its just a test
roryhand 45:0e8e1f2ec5d2 532 Sound.FileInfo.num_slices = Sound.FileInfo.FileData.subchunk2_size/Sound.FileInfo.FileFormat.block_align;
roryhand 1:aac37edee302 533 //printf("Number of Slices: %d\n\r",FileInfo.num_slices);
roryhand 45:0e8e1f2ec5d2 534 return Sound;
roryhand 0:e89d7a0bfa3b 535 }
roryhand 1:aac37edee302 536
roryhand 1:aac37edee302 537 classSoundFile LoadFileStream(classSoundFile Sound, string filename)
roryhand 1:aac37edee302 538 {
roryhand 1:aac37edee302 539 //Declare RootFolder and the directory for the appropriate file.
roryhand 1:aac37edee302 540 //How we index into filename[] from the outside of this class is another
roryhand 1:aac37edee302 541 //issue...
roryhand 1:aac37edee302 542 //printf("FileName: %s\n\r",filename);
roryhand 1:aac37edee302 543 //string RootFolder = "/sd/mydir/SoundDecoder/";
roryhand 1:aac37edee302 544 //string Directory = RootFolder + "01.wav";// + filename[0];
roryhand 1:aac37edee302 545 //printf("%s\n\r",Directory);
roryhand 1:aac37edee302 546 //const char* DirectoryChar = Directory.c_str();
roryhand 1:aac37edee302 547 //Sound.FileInfo.WavFile = fopen(DirectoryChar,"rb");
roryhand 1:aac37edee302 548 Sound.FileInfo.WavFile = fopen("/sd/mydir/645Engine/Startup.wav","rb");
roryhand 1:aac37edee302 549 fseek(Sound.FileInfo.WavFile,20,SEEK_SET);
roryhand 1:aac37edee302 550 fread(&Sound.FileInfo.FileFormat,sizeof(Sound.FileInfo.FileFormat),1,Sound.FileInfo.WavFile);
roryhand 1:aac37edee302 551 printf("wav_format.sample_rate: %d\n\r",Sound.FileInfo.FileFormat.sample_rate);
roryhand 1:aac37edee302 552 fread(&Sound.FileInfo.FileData,sizeof(Sound.FileInfo.FileData),1,Sound.FileInfo.WavFile);
roryhand 1:aac37edee302 553 printf("wav_data.subchunk2_size: %d\n\r",Sound.FileInfo.FileData.subchunk2_size);
roryhand 1:aac37edee302 554 Sound.FileInfo.slice_buf = ( char *)malloc(Sound.FileInfo.FileFormat.block_align);
roryhand 1:aac37edee302 555 fread(Sound.FileInfo.slice_buf,Sound.FileInfo.FileFormat.block_align,1,Sound.FileInfo.WavFile); //This isnt actually required, its just a test
roryhand 1:aac37edee302 556 Sound.FileInfo.num_slices = Sound.FileInfo.FileData.subchunk2_size/Sound.FileInfo.FileFormat.block_align;
roryhand 1:aac37edee302 557 printf("Number of Slices: %d\n\r",Sound.FileInfo.num_slices);
roryhand 1:aac37edee302 558 return Sound;
roryhand 1:aac37edee302 559 }
roryhand 1:aac37edee302 560
roryhand 1:aac37edee302 561
roryhand 0:e89d7a0bfa3b 562 classFade FadeDataInitialise(classFade FadeData)
roryhand 0:e89d7a0bfa3b 563 {
roryhand 1:aac37edee302 564 FadeData.DecayFactor = 1.3;
roryhand 0:e89d7a0bfa3b 565 FadeData.FadeIteration = 1;
roryhand 0:e89d7a0bfa3b 566 //FadeData.Denom = 11025*FadeData.DecayFactor;
roryhand 0:e89d7a0bfa3b 567 FadeData.Denom = 11025*FadeData.DecayFactor;
roryhand 0:e89d7a0bfa3b 568 FadeData.Natural_Exp = 2.7183;
roryhand 0:e89d7a0bfa3b 569 FadeData.Length = 11025*FadeData.LengthSecs;
roryhand 0:e89d7a0bfa3b 570 //FadeData.Natural_Exp = 2.7;
roryhand 0:e89d7a0bfa3b 571 return FadeData;
roryhand 0:e89d7a0bfa3b 572 }
roryhand 0:e89d7a0bfa3b 573
roryhand 0:e89d7a0bfa3b 574 //Playing Files Code
roryhand 46:de390e45c2af 575 /*
roryhand 45:0e8e1f2ec5d2 576 float FadeIn(void)
roryhand 0:e89d7a0bfa3b 577 {
roryhand 0:e89d7a0bfa3b 578 powervalFadeIn = FadeIterationIn/denom;
roryhand 0:e89d7a0bfa3b 579 FadeCoeffFadeIn
roryhand 1:aac37edee302 580
roryhand 1:aac37edee302 581
roryhand 45:0e8e1f2ec5d2 582 }
roryhand 45:0e8e1f2ec5d2 583 float FadeOut(void)
roryhand 0:e89d7a0bfa3b 584 {
roryhand 0:e89d7a0bfa3b 585 powerval = -FadeIteration/denom;
roryhand 0:e89d7a0bfa3b 586 FadeCoeff = pow(natural_exp,powerval);
roryhand 1:aac37edee302 587 FadeIteration = FadeIteration + 1;
roryhand 1:aac37edee302 588 return FadeCoeff;
roryhand 1:aac37edee302 589
roryhand 45:0e8e1f2ec5d2 590 }
roryhand 46:de390e45c2af 591 */
roryhand 0:e89d7a0bfa3b 592
roryhand 0:e89d7a0bfa3b 593 void Play_WaveFile(FILE * my_wav, WAV_FILE_STRUCT FileInfo)
roryhand 0:e89d7a0bfa3b 594 {
roryhand 1:aac37edee302 595 while(slice<FileInfo.num_slices) {
roryhand 1:aac37edee302 596 fread(FileInfo.slice_buf,FileInfo.FileFormat.block_align,1,my_wav);
roryhand 1:aac37edee302 597 data_sptr=(short *)FileInfo.slice_buf; // 16 bit samples
roryhand 1:aac37edee302 598 for (channel=0; channel<FileInfo.FileFormat.num_channels; channel++) {
roryhand 1:aac37edee302 599 if(flag1 == 1) {
roryhand 1:aac37edee302 600 Buffer1[place_hold1] = data_sptr[channel];
roryhand 1:aac37edee302 601 place_hold1 = place_hold1 + 1;
roryhand 1:aac37edee302 602 if(place_hold1 >= BufferLen) {
roryhand 1:aac37edee302 603 while(1) {
roryhand 1:aac37edee302 604 if(flag1 == 0) {
roryhand 0:e89d7a0bfa3b 605
roryhand 1:aac37edee302 606 break;
roryhand 0:e89d7a0bfa3b 607 }
roryhand 1:aac37edee302 608
roryhand 0:e89d7a0bfa3b 609 }
roryhand 1:aac37edee302 610 }
roryhand 1:aac37edee302 611
roryhand 1:aac37edee302 612 } else if(flag2 == 1) {
roryhand 1:aac37edee302 613 Buffer2[place_hold2] = data_sptr[channel];
roryhand 1:aac37edee302 614 place_hold2 = place_hold2 + 1;
roryhand 1:aac37edee302 615 if(place_hold2 >= BufferLen) {
roryhand 1:aac37edee302 616
roryhand 1:aac37edee302 617 while(1) {
roryhand 1:aac37edee302 618 if(flag2 == 0) {
roryhand 1:aac37edee302 619
roryhand 1:aac37edee302 620 break;
roryhand 1:aac37edee302 621 }
roryhand 0:e89d7a0bfa3b 622 }
roryhand 1:aac37edee302 623 }
roryhand 0:e89d7a0bfa3b 624 }
roryhand 1:aac37edee302 625
roryhand 1:aac37edee302 626 }
roryhand 1:aac37edee302 627 slice = slice + 1;
roryhand 0:e89d7a0bfa3b 628 }
roryhand 0:e89d7a0bfa3b 629 }
roryhand 0:e89d7a0bfa3b 630
roryhand 0:e89d7a0bfa3b 631
roryhand 0:e89d7a0bfa3b 632
roryhand 0:e89d7a0bfa3b 633
roryhand 32:6ee488c97dcc 634 void Play_WaveFileDual(FILE * my_wav, WAV_FILE_STRUCT FileInfo)
roryhand 32:6ee488c97dcc 635 {
roryhand 32:6ee488c97dcc 636 while(slice<FileInfo.num_slices) {
roryhand 32:6ee488c97dcc 637 if(FileSwitchFlag == 1) {
roryhand 35:4469b508dda3 638
roryhand 33:a75f0a30fbdc 639 if(temp == 1) {
roryhand 34:26118c8f2e48 640 printf("Does it go to this point\n\r");
roryhand 35:4469b508dda3 641 N3Wav = fopen("/sd/mydir/SoundDecoder_second/03.wav","rb");
roryhand 33:a75f0a30fbdc 642 if(N3Wav == NULL) {
roryhand 33:a75f0a30fbdc 643 printf("Cannot Open testwav\n\r");
roryhand 33:a75f0a30fbdc 644 }
roryhand 33:a75f0a30fbdc 645 fclose(StartupWav);
roryhand 33:a75f0a30fbdc 646 temp = 0;
roryhand 33:a75f0a30fbdc 647 }
roryhand 35:4469b508dda3 648 fread(WavInfo_N3.slice_buf,WavInfo_N3.FileFormat.block_align,1,N3Wav);
roryhand 35:4469b508dda3 649 data_sptr=(short*)WavInfo_N3.slice_buf;
roryhand 32:6ee488c97dcc 650 } else {
roryhand 32:6ee488c97dcc 651 fread(FileInfo.slice_buf,FileInfo.FileFormat.block_align,1,my_wav);
roryhand 32:6ee488c97dcc 652 data_sptr=(short *)FileInfo.slice_buf; // 16 bit samples
roryhand 32:6ee488c97dcc 653 }
roryhand 32:6ee488c97dcc 654 for (channel=0; channel<FileInfo.FileFormat.num_channels; channel++) {
roryhand 32:6ee488c97dcc 655 if(flag1 == 1) {
roryhand 32:6ee488c97dcc 656 Buffer1[place_hold1] = data_sptr[channel];
roryhand 32:6ee488c97dcc 657 place_hold1 = place_hold1 + 1;
roryhand 32:6ee488c97dcc 658 if(place_hold1 >= BufferLen) {
roryhand 32:6ee488c97dcc 659 while(1) {
roryhand 32:6ee488c97dcc 660 if(flag1 == 0) {
roryhand 0:e89d7a0bfa3b 661
roryhand 32:6ee488c97dcc 662 break;
roryhand 32:6ee488c97dcc 663 }
roryhand 32:6ee488c97dcc 664
roryhand 32:6ee488c97dcc 665 }
roryhand 32:6ee488c97dcc 666 }
roryhand 32:6ee488c97dcc 667
roryhand 32:6ee488c97dcc 668 } else if(flag2 == 1) {
roryhand 32:6ee488c97dcc 669 Buffer2[place_hold2] = data_sptr[channel];
roryhand 32:6ee488c97dcc 670 place_hold2 = place_hold2 + 1;
roryhand 32:6ee488c97dcc 671 if(place_hold2 >= BufferLen) {
roryhand 32:6ee488c97dcc 672
roryhand 32:6ee488c97dcc 673 while(1) {
roryhand 32:6ee488c97dcc 674 if(flag2 == 0) {
roryhand 32:6ee488c97dcc 675
roryhand 32:6ee488c97dcc 676 break;
roryhand 32:6ee488c97dcc 677 }
roryhand 32:6ee488c97dcc 678 }
roryhand 32:6ee488c97dcc 679 }
roryhand 32:6ee488c97dcc 680 }
roryhand 32:6ee488c97dcc 681
roryhand 32:6ee488c97dcc 682 }
roryhand 32:6ee488c97dcc 683 slice = slice + 1;
roryhand 32:6ee488c97dcc 684 }
roryhand 32:6ee488c97dcc 685 }
roryhand 0:e89d7a0bfa3b 686
roryhand 38:3b4c05af5f36 687 //***************************************************************************//
roryhand 38:3b4c05af5f36 688
roryhand 38:3b4c05af5f36 689 //**************************************************************************//
roryhand 38:3b4c05af5f36 690
roryhand 38:3b4c05af5f36 691
roryhand 38:3b4c05af5f36 692
roryhand 38:3b4c05af5f36 693
roryhand 38:3b4c05af5f36 694
roryhand 1:aac37edee302 695
roryhand 44:a9e84d333a6a 696
roryhand 45:0e8e1f2ec5d2 697 void Play_WaveFileLoop(classSoundFile Sound1, classSoundFile Sound2, classSoundFile Sound3, FILE *wavfile1, FILE *wavfile2, FILE *wavfile3)
roryhand 45:0e8e1f2ec5d2 698 {
roryhand 45:0e8e1f2ec5d2 699 while(1) { //might have to change this to a while(1) loop?
roryhand 45:0e8e1f2ec5d2 700 //New format!! This should be (roughly) the way that this is done, with the new structures and classes
roryhand 44:a9e84d333a6a 701
roryhand 45:0e8e1f2ec5d2 702 //Block 1 of code. We need to pass in 3x classSoundFile objects, and 3x FILE* pointer objects.
roryhand 45:0e8e1f2ec5d2 703 //This will allow us to switch between the 3 different files (using "cross-fades") as needed.
roryhand 45:0e8e1f2ec5d2 704 /*Remember that these will need to be global varaibles to work properly*/
roryhand 45:0e8e1f2ec5d2 705
roryhand 45:0e8e1f2ec5d2 706
roryhand 2:957d3b2afff4 707 //make sure we are reading in the correct "notch" here
roryhand 2:957d3b2afff4 708
roryhand 44:a9e84d333a6a 709
roryhand 44:a9e84d333a6a 710
roryhand 48:01490448a05a 711 /*Block1*/
roryhand 48:01490448a05a 712 /*Read in data for current sound files. We only have 3 active engine noises at a time.
roryhand 48:01490448a05a 713 When it becomes time to transition up again, we then flip to the opposite block, and perform
roryhand 48:01490448a05a 714 the opposite operation.*/
roryhand 48:01490448a05a 715
roryhand 48:01490448a05a 716
roryhand 44:a9e84d333a6a 717 //Sound1=======================================================================================
roryhand 48:01490448a05a 718 if( slice1 == (Sound1.FileInfo.num_slices-1) ) {
roryhand 48:01490448a05a 719 slice1 = 0;
roryhand 48:01490448a05a 720 fseek(wavfile1,44,SEEK_SET);
roryhand 48:01490448a05a 721 }
roryhand 48:01490448a05a 722 if(feof(wavfile1)) {
roryhand 48:01490448a05a 723 fseek(wavfile1,44,SEEK_SET);
roryhand 48:01490448a05a 724 }
roryhand 48:01490448a05a 725 fread(Sound1.FileInfo.slice_buf,Sound1.FileInfo.FileFormat.block_align,1,wavfile1);
roryhand 48:01490448a05a 726 Sound1.data_sptr=(short *)Sound1.FileInfo.slice_buf; // 16 bit samples
roryhand 44:a9e84d333a6a 727 //=============================================================================================
roryhand 44:a9e84d333a6a 728
roryhand 44:a9e84d333a6a 729
roryhand 44:a9e84d333a6a 730 //Sound2=======================================================================================
roryhand 48:01490448a05a 731 fread(Sound2.FileInfo.slice_buf,Sound2.FileInfo.FileFormat.block_align,1,wavfile2);
roryhand 48:01490448a05a 732 Sound2.data_sptr=(short *)Sound2.FileInfo.slice_buf; // 16 bit samples
roryhand 44:a9e84d333a6a 733 //=============================================================================================
roryhand 44:a9e84d333a6a 734
roryhand 44:a9e84d333a6a 735
roryhand 44:a9e84d333a6a 736
roryhand 44:a9e84d333a6a 737 //Sound3=======================================================================================
roryhand 48:01490448a05a 738 fread(Sound3.FileInfo.slice_buf,Sound3.FileInfo.FileFormat.block_align,1,wavfile3);
roryhand 48:01490448a05a 739 Sound3.data_sptr=(short *)Sound3.FileInfo.slice_buf; // 16 bit samples
roryhand 44:a9e84d333a6a 740 //=============================================================================================
roryhand 44:a9e84d333a6a 741
roryhand 44:a9e84d333a6a 742
roryhand 44:a9e84d333a6a 743
roryhand 48:01490448a05a 744 /*Block2*/
roryhand 3:6169aeeaeeb4 745
roryhand 48:01490448a05a 746 //Read in data for current (i.e. now the previous notch, according to the index!!)
roryhand 48:01490448a05a 747 //We might not need this code here...as its probably done somewhere else??
roryhand 48:01490448a05a 748 //fread(Sounds[NotchingSet.Notch-1].FileInfo.slice_buf,Sounds[NotchingSet.Notch-1].FileInfo.FileFormat.block_align,1,Sounds[NotchingSet.Notch-1].FileInfo.WavFile);
roryhand 48:01490448a05a 749 //Sounds[NotchingSet.Notch-1].data_sptr = (short *)Sounds[NotchingSet.Notch-1].FileInfo.slice_buf;
roryhand 48:01490448a05a 750 //We are now performing this section above.
roryhand 3:6169aeeaeeb4 751
roryhand 47:9334a8f54997 752
roryhand 47:9334a8f54997 753 if(FadeFlag) {
roryhand 48:01490448a05a 754 if(BlockFlag == 1) {
roryhand 48:01490448a05a 755 if(feof(wavfile1)) {
roryhand 48:01490448a05a 756 fseek(wavfile1,44,SEEK_SET);
roryhand 48:01490448a05a 757 }
roryhand 47:9334a8f54997 758
roryhand 47:9334a8f54997 759
roryhand 48:01490448a05a 760 //require this to get the fadeout coefficient for Sound1.
roryhand 48:01490448a05a 761 NotchFadeOut.FadeCoeff = NotchFadeOut.FadeOut();//compute new FadeOut Coeff value
roryhand 2:957d3b2afff4 762
roryhand 45:0e8e1f2ec5d2 763
roryhand 3:6169aeeaeeb4 764
roryhand 48:01490448a05a 765 if( ((Sound2.FileInfo.FileData.subchunk2_size) - NotchFadeIn.Length - 2*11025) <= (ftell(wavfile2) + 44)) {
roryhand 2:957d3b2afff4 766
roryhand 44:a9e84d333a6a 767
roryhand 48:01490448a05a 768 //required for calculating the fade In coefficient for Sound3
roryhand 48:01490448a05a 769 NotchFadeIn.FadeCoeff = NotchFadeIn.FadeIn();
roryhand 3:6169aeeaeeb4 770
roryhand 48:01490448a05a 771 //Read In the next Notch
roryhand 44:a9e84d333a6a 772
roryhand 48:01490448a05a 773 /*
roryhand 48:01490448a05a 774 fread(Sounds[NotchingSet.Notch].FileInfo.slice_buf,Sounds[NotchingSet.Notch].FileInfo.FileFormat.block_align,1,Sounds[NotchingSet.Notch].FileInfo.WavFile);
roryhand 48:01490448a05a 775 Sounds[NotchingSet.Notch].data_sptr = (short *)Sounds[NotchingSet.Notch].FileInfo.slice_buf;
roryhand 48:01490448a05a 776 */
roryhand 48:01490448a05a 777 //no longer require the above section as we are reading in data for Sound3 (above, at beginning of function).
roryhand 48:01490448a05a 778
roryhand 48:01490448a05a 779 if( (ftell(wavfile2) + 44) >= Sound2.FileInfo.FileData.subchunk2_size ) {
roryhand 2:957d3b2afff4 780
roryhand 48:01490448a05a 781 //need to explicitly test if this notation/syntax works for pointers....
roryhand 48:01490448a05a 782 /*Was this ever tested?? no idea...
roryhand 48:01490448a05a 783 If not then we need to pass in the 3 different "data_sptr" variables in separately, and not tied to a specific class
roryhand 48:01490448a05a 784 or structure.*/ /*Confirmed 8/9/2019 this works!*/
roryhand 3:6169aeeaeeb4 785
roryhand 48:01490448a05a 786 *Sound1.data_sptr = *Sound3.data_sptr*NotchFadeIn.FadeCoeff;//Sound 3 by itself.
roryhand 48:01490448a05a 787 } else {
roryhand 48:01490448a05a 788
roryhand 48:01490448a05a 789 *Sound1.data_sptr = *Sound1.data_sptr*NotchFadeOut.FadeCoeff + *Sound2.data_sptr + *Sound3.data_sptr*NotchFadeIn.FadeCoeff;//Sounds 1, 2 and 3 Cross-fade.
roryhand 48:01490448a05a 790 //probably later on redesign this to work with flags - that way it may be a little easier to debug any issues.
roryhand 48:01490448a05a 791 }
roryhand 48:01490448a05a 792
roryhand 2:957d3b2afff4 793 } else {
roryhand 48:01490448a05a 794 *Sound1.data_sptr = *Sound1.data_sptr*NotchFadeOut.FadeCoeff + *Sound2.data_sptr;//Sound1 and Sound 2 cross fade
roryhand 2:957d3b2afff4 795 }
roryhand 2:957d3b2afff4 796
roryhand 2:957d3b2afff4 797 }
roryhand 2:957d3b2afff4 798
roryhand 1:aac37edee302 799 }
roryhand 3:6169aeeaeeb4 800 /********************END OF DATA ASSIGNMENT SECTION*************************************************/
roryhand 9:dd9cae06b202 801
roryhand 44:a9e84d333a6a 802
roryhand 44:a9e84d333a6a 803
roryhand 44:a9e84d333a6a 804
roryhand 44:a9e84d333a6a 805
roryhand 44:a9e84d333a6a 806 /**********************************************************************************************************/
roryhand 44:a9e84d333a6a 807 /****************************DATA OUTPUT SECTION***********************************************************/
roryhand 44:a9e84d333a6a 808 /**********************************************************************************************************/
roryhand 45:0e8e1f2ec5d2 809 for (channel=0; channel<Sound1.FileInfo.FileFormat.num_channels; channel++) {
roryhand 45:0e8e1f2ec5d2 810 switch (Sound1.FileInfo.FileFormat.sig_bps) {
roryhand 0:e89d7a0bfa3b 811 case 16:
roryhand 1:aac37edee302 812 if(flag1 == 1) {
roryhand 45:0e8e1f2ec5d2 813 Buffer1[place_hold1] = Sound1.data_sptr[channel];
roryhand 1:aac37edee302 814 place_hold1 = place_hold1 + 1;
roryhand 1:aac37edee302 815 if(place_hold1 >= BufferLen) {
roryhand 1:aac37edee302 816 while(1) {
roryhand 1:aac37edee302 817 if(flag1 == 0) {
roryhand 1:aac37edee302 818 break;
roryhand 1:aac37edee302 819 }//if(flag1 == 0)
roryhand 1:aac37edee302 820
roryhand 1:aac37edee302 821
roryhand 1:aac37edee302 822 }//while(1)
roryhand 1:aac37edee302 823 }//if(place_hold1 > = BufferLen)
roryhand 0:e89d7a0bfa3b 824
roryhand 1:aac37edee302 825 } else if(flag2 == 1) {
roryhand 45:0e8e1f2ec5d2 826 Buffer2[place_hold2] = Sound1.data_sptr[channel];
roryhand 1:aac37edee302 827 place_hold2 = place_hold2 + 1;
roryhand 1:aac37edee302 828 if(place_hold2 >= BufferLen) {
roryhand 1:aac37edee302 829 while(1) {
roryhand 1:aac37edee302 830
roryhand 1:aac37edee302 831 if(flag2 == 0) {
roryhand 1:aac37edee302 832 break;
roryhand 1:aac37edee302 833 }
roryhand 1:aac37edee302 834 }
roryhand 0:e89d7a0bfa3b 835 }
roryhand 1:aac37edee302 836
roryhand 1:aac37edee302 837 }
roryhand 0:e89d7a0bfa3b 838 }
roryhand 0:e89d7a0bfa3b 839 }
roryhand 45:0e8e1f2ec5d2 840 slice1 = slice1 + 1;
roryhand 45:0e8e1f2ec5d2 841 slice2 = slice2 + 1;
roryhand 45:0e8e1f2ec5d2 842 slice3 = slice3 + 1;
roryhand 0:e89d7a0bfa3b 843 }
roryhand 0:e89d7a0bfa3b 844 }
roryhand 0:e89d7a0bfa3b 845
roryhand 0:e89d7a0bfa3b 846
roryhand 0:e89d7a0bfa3b 847
roryhand 0:e89d7a0bfa3b 848
roryhand 0:e89d7a0bfa3b 849
roryhand 0:e89d7a0bfa3b 850
roryhand 0:e89d7a0bfa3b 851
roryhand 9:dd9cae06b202 852