old demo that i want to try in mbed studio
Dependencies: mbed SDFileSystem_Copy_of_mbed_version I2S
NotchingDemo.cpp@48:01490448a05a, 2019-09-08 (annotated)
- 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?
User | Revision | Line number | New 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 |