old demo that i want to try in mbed studio
Dependencies: mbed SDFileSystem_Copy_of_mbed_version I2S
NotchingDemo.cpp@85:e0c9ba778ae0, 2019-10-02 (annotated)
- Committer:
- roryhand
- Date:
- Wed Oct 02 19:22:05 2019 +0000
- Branch:
- LargeFile_Tests
- Revision:
- 85:e0c9ba778ae0
- Parent:
- 84:0a259e261532
- Child:
- 86:404ce47e1e6e
WIP - as soon as i add in one more very small classSound object, the whole thing falls over. absolutely no point doing this project, mbed's resources on this chip are CRAP
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 | 54:606a83fff291 | 14 | //#include "BlockDevice.h" |
roryhand | 37:a563899ac0df | 15 | #include <string> |
roryhand | 0:e89d7a0bfa3b | 16 | #include <stdlib.h> |
roryhand | 27:a378f1f937ee | 17 | #include <fstream> |
roryhand | 27:a378f1f937ee | 18 | #include <iostream> |
roryhand | 0:e89d7a0bfa3b | 19 | #include <vector> |
roryhand | 0:e89d7a0bfa3b | 20 | #include <string> |
roryhand | 0:e89d7a0bfa3b | 21 | #define sample_freq 11025 |
roryhand | 1:aac37edee302 | 22 | #pragma import __use_two_region_memory |
roryhand | 54:606a83fff291 | 23 | //BlockDevice *bd = BlockDevice::get_default_instance(); |
roryhand | 54:606a83fff291 | 24 | //#include "LittleFileSystem.h" |
roryhand | 54:606a83fff291 | 25 | //LittleFileSystem fs("fs"); |
roryhand | 54:606a83fff291 | 26 | |
roryhand | 0:e89d7a0bfa3b | 27 | DigitalOut myled(LED1); |
roryhand | 0:e89d7a0bfa3b | 28 | DigitalOut led2(LED2); |
roryhand | 0:e89d7a0bfa3b | 29 | DigitalOut led3(LED3); |
roryhand | 0:e89d7a0bfa3b | 30 | DigitalIn NotchUp(p16); |
roryhand | 38:3b4c05af5f36 | 31 | DigitalIn NotchDown(p17);//check the pin!!! Dont know if this will actually work... |
roryhand | 0:e89d7a0bfa3b | 32 | InterruptIn Horn(p16); |
roryhand | 0:e89d7a0bfa3b | 33 | Ticker sampletick; |
roryhand | 73:a5ab93214728 | 34 | Ticker NotchUpTick; |
roryhand | 45:0e8e1f2ec5d2 | 35 | |
roryhand | 0:e89d7a0bfa3b | 36 | Ticker TickFadeOut; |
roryhand | 0:e89d7a0bfa3b | 37 | Timer t; |
roryhand | 0:e89d7a0bfa3b | 38 | Timer t2; |
roryhand | 75:8a71e269b890 | 39 | Timer OperationsTimer; |
roryhand | 3:6169aeeaeeb4 | 40 | Timer NotchTimer; |
roryhand | 27:a378f1f937ee | 41 | Timer timer_open; |
roryhand | 0:e89d7a0bfa3b | 42 | |
roryhand | 0:e89d7a0bfa3b | 43 | Serial pc(USBTX, USBRX); // tx, rx //FOR DEBUGGING PROGRAM USING GNU SCREEN |
roryhand | 0:e89d7a0bfa3b | 44 | DigitalOut cs(p8); |
roryhand | 0:e89d7a0bfa3b | 45 | I2S i2s(I2S_TRANSMIT, p5, p6, p7); |
roryhand | 0:e89d7a0bfa3b | 46 | SDFileSystem sd(p11, p12, p13, p8, "sd"); // the new pinout that i am using |
roryhand | 0:e89d7a0bfa3b | 47 | |
roryhand | 65:8b6a4e307941 | 48 | class classFade |
roryhand | 65:8b6a4e307941 | 49 | { |
roryhand | 65:8b6a4e307941 | 50 | public: |
roryhand | 65:8b6a4e307941 | 51 | |
roryhand | 65:8b6a4e307941 | 52 | float powerval; |
roryhand | 65:8b6a4e307941 | 53 | float FadeIteration; |
roryhand | 65:8b6a4e307941 | 54 | float DecayFactor; |
roryhand | 65:8b6a4e307941 | 55 | float Denom; |
roryhand | 65:8b6a4e307941 | 56 | float FadeCoeff; |
roryhand | 65:8b6a4e307941 | 57 | float Natural_Exp; |
roryhand | 65:8b6a4e307941 | 58 | int LengthSecs; |
roryhand | 65:8b6a4e307941 | 59 | int Length; |
roryhand | 67:043fe0b81343 | 60 | void FadeDataInitialise() |
roryhand | 67:043fe0b81343 | 61 | { |
roryhand | 67:043fe0b81343 | 62 | DecayFactor = 1.3; |
roryhand | 67:043fe0b81343 | 63 | FadeIteration = 1; |
roryhand | 67:043fe0b81343 | 64 | //FadeData.Denom = 11025*FadeData.DecayFactor; |
roryhand | 67:043fe0b81343 | 65 | Denom = 11025*DecayFactor; |
roryhand | 67:043fe0b81343 | 66 | Natural_Exp = 2.7183; |
roryhand | 67:043fe0b81343 | 67 | Length = 11025*LengthSecs; |
roryhand | 67:043fe0b81343 | 68 | //FadeData.Natural_Exp = 2.7; |
roryhand | 67:043fe0b81343 | 69 | } |
roryhand | 65:8b6a4e307941 | 70 | //member Functions |
roryhand | 65:8b6a4e307941 | 71 | float FadeOut(void) |
roryhand | 65:8b6a4e307941 | 72 | { |
roryhand | 65:8b6a4e307941 | 73 | powerval = -FadeIteration/Denom; |
roryhand | 65:8b6a4e307941 | 74 | if (FadeIteration >=Length) { |
roryhand | 65:8b6a4e307941 | 75 | FadeCoeff = 0; |
roryhand | 65:8b6a4e307941 | 76 | |
roryhand | 65:8b6a4e307941 | 77 | } else { |
roryhand | 65:8b6a4e307941 | 78 | FadeCoeff = (Length - FadeIteration)/Length; |
roryhand | 65:8b6a4e307941 | 79 | } |
roryhand | 65:8b6a4e307941 | 80 | FadeIteration = FadeIteration + 1; |
roryhand | 65:8b6a4e307941 | 81 | return FadeCoeff; |
roryhand | 65:8b6a4e307941 | 82 | |
roryhand | 65:8b6a4e307941 | 83 | } |
roryhand | 65:8b6a4e307941 | 84 | float FadeIn(void) |
roryhand | 65:8b6a4e307941 | 85 | { |
roryhand | 65:8b6a4e307941 | 86 | powerval = FadeIteration/Denom; |
roryhand | 65:8b6a4e307941 | 87 | if (FadeIteration >=Length) { |
roryhand | 65:8b6a4e307941 | 88 | FadeCoeff = 1; |
roryhand | 65:8b6a4e307941 | 89 | |
roryhand | 65:8b6a4e307941 | 90 | } else { |
roryhand | 65:8b6a4e307941 | 91 | FadeCoeff = FadeIteration/Length; |
roryhand | 65:8b6a4e307941 | 92 | } |
roryhand | 65:8b6a4e307941 | 93 | |
roryhand | 65:8b6a4e307941 | 94 | FadeIteration = FadeIteration + 1; |
roryhand | 65:8b6a4e307941 | 95 | return FadeCoeff; |
roryhand | 65:8b6a4e307941 | 96 | |
roryhand | 65:8b6a4e307941 | 97 | } |
roryhand | 65:8b6a4e307941 | 98 | }; |
roryhand | 65:8b6a4e307941 | 99 | |
roryhand | 65:8b6a4e307941 | 100 | |
roryhand | 67:043fe0b81343 | 101 | //Do these variables have to be global?? Find out - may be better (safer) to make them local. |
roryhand | 67:043fe0b81343 | 102 | classFade NotchFadeIn; |
roryhand | 67:043fe0b81343 | 103 | classFade NotchFadeOut; |
roryhand | 67:043fe0b81343 | 104 | |
roryhand | 67:043fe0b81343 | 105 | |
roryhand | 67:043fe0b81343 | 106 | //Dont require the class below. Turns out I had already made a Structure to hold the same information. |
roryhand | 67:043fe0b81343 | 107 | //If in the futre I need to embed functions then I will switch to using this class |
roryhand | 67:043fe0b81343 | 108 | /* |
roryhand | 67:043fe0b81343 | 109 | class classNotchingValue{ |
roryhand | 67:043fe0b81343 | 110 | public: |
roryhand | 67:043fe0b81343 | 111 | |
roryhand | 67:043fe0b81343 | 112 | int Notch, Previous_Notch; |
roryhand | 67:043fe0b81343 | 113 | int NotchDirection; |
roryhand | 67:043fe0b81343 | 114 | int NotchTransUp; |
roryhand | 67:043fe0b81343 | 115 | classNotchingValue() |
roryhand | 67:043fe0b81343 | 116 | { |
roryhand | 67:043fe0b81343 | 117 | Notch = 1; |
roryhand | 67:043fe0b81343 | 118 | Previous_Notch = 0; |
roryhand | 67:043fe0b81343 | 119 | NotchDirection = 1; |
roryhand | 67:043fe0b81343 | 120 | NotchTransUp = 0; |
roryhand | 67:043fe0b81343 | 121 | } |
roryhand | 67:043fe0b81343 | 122 | |
roryhand | 67:043fe0b81343 | 123 | }; |
roryhand | 67:043fe0b81343 | 124 | |
roryhand | 67:043fe0b81343 | 125 | |
roryhand | 67:043fe0b81343 | 126 | |
roryhand | 67:043fe0b81343 | 127 | classNotchingValue NotchingSet; |
roryhand | 67:043fe0b81343 | 128 | |
roryhand | 67:043fe0b81343 | 129 | */ |
roryhand | 67:043fe0b81343 | 130 | |
roryhand | 1:aac37edee302 | 131 | typedef struct uFMT_STRUCT { |
roryhand | 1:aac37edee302 | 132 | short comp_code; |
roryhand | 1:aac37edee302 | 133 | short num_channels; |
roryhand | 1:aac37edee302 | 134 | unsigned sample_rate; |
roryhand | 1:aac37edee302 | 135 | unsigned avg_Bps; |
roryhand | 1:aac37edee302 | 136 | short block_align; |
roryhand | 1:aac37edee302 | 137 | short sig_bps; |
roryhand | 0:e89d7a0bfa3b | 138 | } FMT_STRUCT; |
roryhand | 0:e89d7a0bfa3b | 139 | |
roryhand | 1:aac37edee302 | 140 | typedef struct uNotch_STRUCT { |
roryhand | 1:aac37edee302 | 141 | short Notch; |
roryhand | 1:aac37edee302 | 142 | short NotchTransUp; |
roryhand | 1:aac37edee302 | 143 | short NotchTransDown; |
roryhand | 1:aac37edee302 | 144 | short NotchDirection; |
roryhand | 1:aac37edee302 | 145 | } Notch_STRUCT; |
roryhand | 1:aac37edee302 | 146 | |
roryhand | 67:043fe0b81343 | 147 | Notch_STRUCT NotchingSet; |
roryhand | 67:043fe0b81343 | 148 | |
roryhand | 67:043fe0b81343 | 149 | |
roryhand | 0:e89d7a0bfa3b | 150 | typedef struct uDATA_STRUCT { |
roryhand | 1:aac37edee302 | 151 | unsigned subchunk2_ID; |
roryhand | 1:aac37edee302 | 152 | unsigned subchunk2_size; |
roryhand | 1:aac37edee302 | 153 | char * data_buf; |
roryhand | 1:aac37edee302 | 154 | } DATA_STRUCT; |
roryhand | 0:e89d7a0bfa3b | 155 | |
roryhand | 1:aac37edee302 | 156 | typedef struct uWAV_FILE_STRUCT { |
roryhand | 1:aac37edee302 | 157 | FILE *WavFile; |
roryhand | 1:aac37edee302 | 158 | int id_number; |
roryhand | 1:aac37edee302 | 159 | char *slice_buf; |
roryhand | 1:aac37edee302 | 160 | int num_slices; |
roryhand | 1:aac37edee302 | 161 | FMT_STRUCT FileFormat; |
roryhand | 1:aac37edee302 | 162 | DATA_STRUCT FileData; |
roryhand | 0:e89d7a0bfa3b | 163 | } WAV_FILE_STRUCT; |
roryhand | 0:e89d7a0bfa3b | 164 | |
roryhand | 0:e89d7a0bfa3b | 165 | /*typedef struct uWAV_FILE_STRUCT{ |
roryhand | 1:aac37edee302 | 166 | FILE* WavFile; |
roryhand | 1:aac37edee302 | 167 | |
roryhand | 1:aac37edee302 | 168 | |
roryhand | 0:e89d7a0bfa3b | 169 | }WAV_FILE_STRUCT;*/ |
roryhand | 59:8e7c25a915a0 | 170 | |
roryhand | 59:8e7c25a915a0 | 171 | |
roryhand | 59:8e7c25a915a0 | 172 | |
roryhand | 59:8e7c25a915a0 | 173 | |
roryhand | 59:8e7c25a915a0 | 174 | |
roryhand | 59:8e7c25a915a0 | 175 | class classSoundFile |
roryhand | 59:8e7c25a915a0 | 176 | { |
roryhand | 59:8e7c25a915a0 | 177 | public: |
roryhand | 59:8e7c25a915a0 | 178 | |
roryhand | 59:8e7c25a915a0 | 179 | //add a class constructor at some point in the future (perform tests in visual studio) |
roryhand | 59:8e7c25a915a0 | 180 | WAV_FILE_STRUCT FileInfo; |
roryhand | 59:8e7c25a915a0 | 181 | short * data_sptr; |
roryhand | 59:8e7c25a915a0 | 182 | string file_location; |
roryhand | 59:8e7c25a915a0 | 183 | //classSoundFile(string filename);//this is the constructor |
roryhand | 59:8e7c25a915a0 | 184 | //string filename; |
roryhand | 59:8e7c25a915a0 | 185 | }; |
roryhand | 58:a174e7a8f5f2 | 186 | class classPositionIndicators |
roryhand | 57:0c76b15cabaf | 187 | { |
roryhand | 57:0c76b15cabaf | 188 | public: |
roryhand | 57:0c76b15cabaf | 189 | int notch1_indicator, notch2_indicator, notch3_indicator, notch4_indicator; |
roryhand | 57:0c76b15cabaf | 190 | int notch5_indicator, notch6_indicator, notch7_indicator, notch8_indicator; |
roryhand | 57:0c76b15cabaf | 191 | int notch1_start_pt, notch2_start_pt, notch3_start_pt, notch4_start_pt; |
roryhand | 57:0c76b15cabaf | 192 | int notch5_start_pt, notch6_start_pt, notch7_start_pt, notch8_start_pt; |
roryhand | 63:a8c1971d3d42 | 193 | int N1N2_start_pt, N2N3_start_pt, N3N4_start_pt, N4N5_start_pt, N5N6_start_pt; |
roryhand | 63:a8c1971d3d42 | 194 | int N6N7_start_pt, N7N8_start_pt, N8N7_start_pt, N7N6_start_pt, N6N5_start_pt; |
roryhand | 63:a8c1971d3d42 | 195 | int N5N4_start_pt, N4N3_start_pt, N3N2_start_pt, N2N1_start_pt; |
roryhand | 67:043fe0b81343 | 196 | |
roryhand | 61:212d2db45c56 | 197 | int notch_start_pts [9]; |
roryhand | 61:212d2db45c56 | 198 | int notch_position_indicators[9]; |
roryhand | 61:212d2db45c56 | 199 | int notch_transitions_start_pts[15]; |
roryhand | 61:212d2db45c56 | 200 | int notch_transitions_position_indicators[15]; |
roryhand | 61:212d2db45c56 | 201 | int auxiliary_start_pts[5]; |
roryhand | 61:212d2db45c56 | 202 | int auxiliary_position_indicators[5]; |
roryhand | 58:a174e7a8f5f2 | 203 | classPositionIndicators() |
roryhand | 57:0c76b15cabaf | 204 | { |
roryhand | 57:0c76b15cabaf | 205 | notch1_start_pt = 44; |
roryhand | 57:0c76b15cabaf | 206 | notch2_start_pt = 220884+44; |
roryhand | 57:0c76b15cabaf | 207 | notch3_start_pt = notch2_start_pt+217698; |
roryhand | 57:0c76b15cabaf | 208 | notch4_start_pt = notch3_start_pt + 193060; |
roryhand | 57:0c76b15cabaf | 209 | notch5_start_pt = notch4_start_pt + 92010; |
roryhand | 57:0c76b15cabaf | 210 | notch6_start_pt = notch5_start_pt + 216642; |
roryhand | 57:0c76b15cabaf | 211 | notch7_start_pt = notch6_start_pt + 250316; |
roryhand | 61:212d2db45c56 | 212 | notch8_start_pt = notch7_start_pt + 150152; |
roryhand | 57:0c76b15cabaf | 213 | notch1_indicator = notch1_start_pt; |
roryhand | 57:0c76b15cabaf | 214 | notch2_indicator = notch2_start_pt; |
roryhand | 57:0c76b15cabaf | 215 | notch3_indicator = notch3_start_pt; |
roryhand | 57:0c76b15cabaf | 216 | notch4_indicator = notch4_start_pt; |
roryhand | 57:0c76b15cabaf | 217 | notch5_indicator = notch5_start_pt; |
roryhand | 57:0c76b15cabaf | 218 | notch6_indicator = notch6_start_pt; |
roryhand | 57:0c76b15cabaf | 219 | notch7_indicator = notch7_start_pt; |
roryhand | 57:0c76b15cabaf | 220 | notch8_indicator = notch8_start_pt; |
roryhand | 61:212d2db45c56 | 221 | notch_start_pts[1] = notch1_start_pt; |
roryhand | 61:212d2db45c56 | 222 | notch_start_pts[2] = notch2_start_pt; |
roryhand | 61:212d2db45c56 | 223 | notch_start_pts[3] = notch3_start_pt; |
roryhand | 61:212d2db45c56 | 224 | notch_start_pts[4] = notch4_start_pt; |
roryhand | 61:212d2db45c56 | 225 | notch_start_pts[5] = notch5_start_pt; |
roryhand | 61:212d2db45c56 | 226 | notch_start_pts[6] = notch6_start_pt; |
roryhand | 61:212d2db45c56 | 227 | notch_start_pts[7] = notch7_start_pt; |
roryhand | 61:212d2db45c56 | 228 | notch_start_pts[8] = notch8_start_pt; |
roryhand | 61:212d2db45c56 | 229 | notch_position_indicators[1] = notch1_indicator; |
roryhand | 61:212d2db45c56 | 230 | notch_position_indicators[2] = notch2_indicator; |
roryhand | 61:212d2db45c56 | 231 | notch_position_indicators[3] = notch3_indicator; |
roryhand | 61:212d2db45c56 | 232 | notch_position_indicators[4] = notch4_indicator; |
roryhand | 61:212d2db45c56 | 233 | notch_position_indicators[5] = notch5_indicator; |
roryhand | 61:212d2db45c56 | 234 | notch_position_indicators[6] = notch6_indicator; |
roryhand | 61:212d2db45c56 | 235 | notch_position_indicators[7] = notch7_indicator; |
roryhand | 61:212d2db45c56 | 236 | notch_position_indicators[8] = notch8_indicator; |
roryhand | 67:043fe0b81343 | 237 | |
roryhand | 63:a8c1971d3d42 | 238 | N1N2_start_pt = 44; |
roryhand | 63:a8c1971d3d42 | 239 | N2N3_start_pt = N1N2_start_pt + 73220; |
roryhand | 63:a8c1971d3d42 | 240 | N3N4_start_pt = N2N3_start_pt + 78164; |
roryhand | 63:a8c1971d3d42 | 241 | N4N5_start_pt = N3N4_start_pt + 59432; |
roryhand | 63:a8c1971d3d42 | 242 | N5N6_start_pt = N4N5_start_pt + 64984; |
roryhand | 63:a8c1971d3d42 | 243 | N6N7_start_pt = N5N6_start_pt + 59924; |
roryhand | 63:a8c1971d3d42 | 244 | N7N8_start_pt = N6N7_start_pt + 97874; |
roryhand | 63:a8c1971d3d42 | 245 | N8N7_start_pt = N7N8_start_pt + 63992; |
roryhand | 63:a8c1971d3d42 | 246 | N7N6_start_pt = N8N7_start_pt + 44506; |
roryhand | 63:a8c1971d3d42 | 247 | N6N5_start_pt = N7N6_start_pt + 55052; |
roryhand | 63:a8c1971d3d42 | 248 | N5N4_start_pt = N6N5_start_pt + 37038; |
roryhand | 63:a8c1971d3d42 | 249 | N4N3_start_pt = N5N4_start_pt + 49692; |
roryhand | 63:a8c1971d3d42 | 250 | N3N2_start_pt = N4N3_start_pt + 44100; |
roryhand | 63:a8c1971d3d42 | 251 | N2N1_start_pt = N3N2_start_pt + 58346; |
roryhand | 67:043fe0b81343 | 252 | |
roryhand | 67:043fe0b81343 | 253 | |
roryhand | 63:a8c1971d3d42 | 254 | notch_transitions_start_pts[1] = N1N2_start_pt; |
roryhand | 63:a8c1971d3d42 | 255 | notch_transitions_start_pts[2] = N2N3_start_pt; |
roryhand | 63:a8c1971d3d42 | 256 | notch_transitions_start_pts[3] = N3N4_start_pt; |
roryhand | 63:a8c1971d3d42 | 257 | notch_transitions_start_pts[4] = N4N5_start_pt; |
roryhand | 63:a8c1971d3d42 | 258 | notch_transitions_start_pts[5] = N5N6_start_pt; |
roryhand | 63:a8c1971d3d42 | 259 | notch_transitions_start_pts[6] = N6N7_start_pt; |
roryhand | 63:a8c1971d3d42 | 260 | notch_transitions_start_pts[7] = N7N8_start_pt; |
roryhand | 63:a8c1971d3d42 | 261 | notch_transitions_start_pts[8] = N8N7_start_pt; |
roryhand | 63:a8c1971d3d42 | 262 | notch_transitions_start_pts[9] = N7N6_start_pt; |
roryhand | 63:a8c1971d3d42 | 263 | notch_transitions_start_pts[10] = N6N5_start_pt; |
roryhand | 63:a8c1971d3d42 | 264 | notch_transitions_start_pts[11] = N5N4_start_pt; |
roryhand | 63:a8c1971d3d42 | 265 | notch_transitions_start_pts[12] = N4N3_start_pt; |
roryhand | 63:a8c1971d3d42 | 266 | notch_transitions_start_pts[13] = N3N2_start_pt; |
roryhand | 63:a8c1971d3d42 | 267 | notch_transitions_start_pts[14] = N2N1_start_pt; |
roryhand | 67:043fe0b81343 | 268 | |
roryhand | 67:043fe0b81343 | 269 | |
roryhand | 63:a8c1971d3d42 | 270 | notch_transitions_position_indicators[1] = N1N2_start_pt; |
roryhand | 63:a8c1971d3d42 | 271 | notch_transitions_position_indicators[2] = N2N3_start_pt; |
roryhand | 63:a8c1971d3d42 | 272 | notch_transitions_position_indicators[3] = N3N4_start_pt; |
roryhand | 63:a8c1971d3d42 | 273 | notch_transitions_position_indicators[4] = N4N5_start_pt; |
roryhand | 63:a8c1971d3d42 | 274 | notch_transitions_position_indicators[5] = N5N6_start_pt; |
roryhand | 63:a8c1971d3d42 | 275 | notch_transitions_position_indicators[6] = N6N7_start_pt; |
roryhand | 63:a8c1971d3d42 | 276 | notch_transitions_position_indicators[7] = N7N8_start_pt; |
roryhand | 63:a8c1971d3d42 | 277 | notch_transitions_position_indicators[8] = N8N7_start_pt; |
roryhand | 63:a8c1971d3d42 | 278 | notch_transitions_position_indicators[9] = N7N6_start_pt; |
roryhand | 63:a8c1971d3d42 | 279 | notch_transitions_position_indicators[10] = N6N5_start_pt; |
roryhand | 63:a8c1971d3d42 | 280 | notch_transitions_position_indicators[11] = N5N4_start_pt; |
roryhand | 63:a8c1971d3d42 | 281 | notch_transitions_position_indicators[12] = N4N3_start_pt; |
roryhand | 63:a8c1971d3d42 | 282 | notch_transitions_position_indicators[13] = N3N2_start_pt; |
roryhand | 63:a8c1971d3d42 | 283 | notch_transitions_position_indicators[14] = N2N1_start_pt; |
roryhand | 57:0c76b15cabaf | 284 | } |
roryhand | 57:0c76b15cabaf | 285 | }; |
roryhand | 57:0c76b15cabaf | 286 | |
roryhand | 73:a5ab93214728 | 287 | int TransitionFlag; |
roryhand | 66:edf370edd21c | 288 | void NotchUpIsr() |
roryhand | 66:edf370edd21c | 289 | { |
roryhand | 66:edf370edd21c | 290 | if(1 <= NotchingSet.Notch < 8) { |
roryhand | 66:edf370edd21c | 291 | |
roryhand | 66:edf370edd21c | 292 | NotchingSet.Notch = NotchingSet.Notch + 1; |
roryhand | 66:edf370edd21c | 293 | NotchingSet.NotchTransUp = NotchingSet.Notch + 7; |
roryhand | 66:edf370edd21c | 294 | NotchingSet.NotchDirection = 1; |
roryhand | 67:043fe0b81343 | 295 | NotchFadeIn.FadeDataInitialise(); |
roryhand | 67:043fe0b81343 | 296 | NotchFadeOut.FadeDataInitialise(); |
roryhand | 73:a5ab93214728 | 297 | TransitionFlag = 1; |
roryhand | 74:e71a7815f63d | 298 | //printf("We are in the NotchUpIsr() section \n\r"); |
roryhand | 67:043fe0b81343 | 299 | //NotchFadeOut.FadeDataInitialise; |
roryhand | 66:edf370edd21c | 300 | } |
roryhand | 66:edf370edd21c | 301 | } |
roryhand | 66:edf370edd21c | 302 | |
roryhand | 66:edf370edd21c | 303 | void NotchDownIsr() |
roryhand | 66:edf370edd21c | 304 | { |
roryhand | 66:edf370edd21c | 305 | if(1 < NotchingSet.Notch <= 8) { |
roryhand | 66:edf370edd21c | 306 | NotchingSet.Notch = NotchingSet.Notch - 1; |
roryhand | 67:043fe0b81343 | 307 | NotchingSet.NotchTransDown = NotchingSet.Notch + 15; |
roryhand | 66:edf370edd21c | 308 | NotchingSet.NotchDirection = 0; |
roryhand | 67:043fe0b81343 | 309 | NotchFadeIn.FadeDataInitialise(); |
roryhand | 67:043fe0b81343 | 310 | NotchFadeOut.FadeDataInitialise(); |
roryhand | 74:e71a7815f63d | 311 | TransitionFlag = 1; |
roryhand | 66:edf370edd21c | 312 | } |
roryhand | 66:edf370edd21c | 313 | } |
roryhand | 73:a5ab93214728 | 314 | short * data_sptr1; |
roryhand | 73:a5ab93214728 | 315 | short * data_sptr2; |
roryhand | 73:a5ab93214728 | 316 | short * data_sptr3; |
roryhand | 69:df10ee3ad523 | 317 | char *slice_buf1; |
roryhand | 69:df10ee3ad523 | 318 | char *slice_buf2; |
roryhand | 69:df10ee3ad523 | 319 | char *slice_buf3; |
roryhand | 67:043fe0b81343 | 320 | |
roryhand | 54:606a83fff291 | 321 | int OneOff = 0; |
roryhand | 38:3b4c05af5f36 | 322 | int notch_flag = 0; |
roryhand | 0:e89d7a0bfa3b | 323 | int i = 0; |
roryhand | 0:e89d7a0bfa3b | 324 | int h = 0; |
roryhand | 0:e89d7a0bfa3b | 325 | short bufflen = 1; |
roryhand | 0:e89d7a0bfa3b | 326 | int buffer[1]; |
roryhand | 1:aac37edee302 | 327 | int AudioFormat, NumChannels, SampleRate, BitsPerSample ; |
roryhand | 0:e89d7a0bfa3b | 328 | char *slice_buf; |
roryhand | 0:e89d7a0bfa3b | 329 | short *data_sptr; |
roryhand | 0:e89d7a0bfa3b | 330 | short *data_sptr_horn; |
roryhand | 0:e89d7a0bfa3b | 331 | short *data_sptr_IdleN2; |
roryhand | 0:e89d7a0bfa3b | 332 | short * data_sptr_bell; |
roryhand | 0:e89d7a0bfa3b | 333 | short * data_sptr_N2; |
roryhand | 0:e89d7a0bfa3b | 334 | short * data_sptr_Flange; |
roryhand | 0:e89d7a0bfa3b | 335 | unsigned char *data_bptr; |
roryhand | 0:e89d7a0bfa3b | 336 | int *data_wptr; |
roryhand | 0:e89d7a0bfa3b | 337 | unsigned channel; |
roryhand | 45:0e8e1f2ec5d2 | 338 | long slice, slice1, slice2, slice3, num_slices; |
roryhand | 0:e89d7a0bfa3b | 339 | int verbosity = 0; |
roryhand | 0:e89d7a0bfa3b | 340 | int verbosity2 = 0; |
roryhand | 0:e89d7a0bfa3b | 341 | int verbosity3 = 0; |
roryhand | 0:e89d7a0bfa3b | 342 | int verbosity4 = 0; |
roryhand | 0:e89d7a0bfa3b | 343 | int verbosity5 = 0; |
roryhand | 0:e89d7a0bfa3b | 344 | int interrupt_condition = 1; |
roryhand | 0:e89d7a0bfa3b | 345 | int sampling_freq = 11025; |
roryhand | 0:e89d7a0bfa3b | 346 | const int BufferLen = 2000; |
roryhand | 0:e89d7a0bfa3b | 347 | short Buffer1[BufferLen]; |
roryhand | 0:e89d7a0bfa3b | 348 | short Buffer2[BufferLen]; |
roryhand | 0:e89d7a0bfa3b | 349 | short place_hold1 = 0; |
roryhand | 0:e89d7a0bfa3b | 350 | short place_hold2 = 0; |
roryhand | 0:e89d7a0bfa3b | 351 | |
roryhand | 3:6169aeeaeeb4 | 352 | |
roryhand | 3:6169aeeaeeb4 | 353 | string FOLDER; |
roryhand | 3:6169aeeaeeb4 | 354 | string RootFolder = "/sd/mydir/SoundDecoder/"; |
roryhand | 3:6169aeeaeeb4 | 355 | string filename[25]; |
roryhand | 3:6169aeeaeeb4 | 356 | classSoundFile Sound[22]; |
roryhand | 3:6169aeeaeeb4 | 357 | |
roryhand | 0:e89d7a0bfa3b | 358 | volatile int flag1 = 1; |
roryhand | 0:e89d7a0bfa3b | 359 | volatile int flag2 = 0; |
roryhand | 0:e89d7a0bfa3b | 360 | volatile int flag3 = 1; |
roryhand | 0:e89d7a0bfa3b | 361 | volatile int flag4 = 0; |
roryhand | 0:e89d7a0bfa3b | 362 | int FLAGBUFF1 = 0; |
roryhand | 0:e89d7a0bfa3b | 363 | int FLAGBUFF2 = 0; |
roryhand | 0:e89d7a0bfa3b | 364 | int BellFlag = 0; |
roryhand | 0:e89d7a0bfa3b | 365 | int BellFlag2 = 0; |
roryhand | 0:e89d7a0bfa3b | 366 | int FadeFlag = 0; |
roryhand | 54:606a83fff291 | 367 | int BlockFlag = 0; |
roryhand | 32:6ee488c97dcc | 368 | int FileSwitchFlag = 0; |
roryhand | 0:e89d7a0bfa3b | 369 | |
roryhand | 0:e89d7a0bfa3b | 370 | |
roryhand | 0:e89d7a0bfa3b | 371 | short value[1]; |
roryhand | 59:8e7c25a915a0 | 372 | |
roryhand | 0:e89d7a0bfa3b | 373 | //long long slice_value; |
roryhand | 0:e89d7a0bfa3b | 374 | int slice_value[1]; |
roryhand | 0:e89d7a0bfa3b | 375 | |
roryhand | 0:e89d7a0bfa3b | 376 | |
roryhand | 45:0e8e1f2ec5d2 | 377 | FILE *wavfile1; |
roryhand | 45:0e8e1f2ec5d2 | 378 | FILE *wavfile2; |
roryhand | 45:0e8e1f2ec5d2 | 379 | FILE *wavfile3; |
roryhand | 45:0e8e1f2ec5d2 | 380 | |
roryhand | 45:0e8e1f2ec5d2 | 381 | classSoundFile Sound1; |
roryhand | 45:0e8e1f2ec5d2 | 382 | classSoundFile Sound2; |
roryhand | 45:0e8e1f2ec5d2 | 383 | classSoundFile Sound3; |
roryhand | 45:0e8e1f2ec5d2 | 384 | |
roryhand | 0:e89d7a0bfa3b | 385 | |
roryhand | 0:e89d7a0bfa3b | 386 | void isr() |
roryhand | 0:e89d7a0bfa3b | 387 | { |
roryhand | 54:606a83fff291 | 388 | //timer_interrupt.start(); |
roryhand | 1:aac37edee302 | 389 | if(flag1 == 0) { |
roryhand | 0:e89d7a0bfa3b | 390 | value[0] = Buffer1[place_hold1]>>4; |
roryhand | 0:e89d7a0bfa3b | 391 | i2s.write(value,1);//Send next PWM value to amp |
roryhand | 0:e89d7a0bfa3b | 392 | place_hold1 = place_hold1 + 1; |
roryhand | 1:aac37edee302 | 393 | if( (place_hold1 >= BufferLen)) { |
roryhand | 0:e89d7a0bfa3b | 394 | led2 = !led2; |
roryhand | 0:e89d7a0bfa3b | 395 | place_hold1 = 0; |
roryhand | 0:e89d7a0bfa3b | 396 | place_hold2 = 0; |
roryhand | 0:e89d7a0bfa3b | 397 | flag1 = 1; |
roryhand | 0:e89d7a0bfa3b | 398 | flag2 = 0; |
roryhand | 1:aac37edee302 | 399 | } |
roryhand | 1:aac37edee302 | 400 | } else if(flag2 == 0) { |
roryhand | 0:e89d7a0bfa3b | 401 | value[0] = Buffer2[place_hold2]>>4; |
roryhand | 0:e89d7a0bfa3b | 402 | i2s.write(value,1);//Send next PWM value to amp |
roryhand | 0:e89d7a0bfa3b | 403 | place_hold2 = place_hold2 + 1; |
roryhand | 1:aac37edee302 | 404 | if( (place_hold2 >= BufferLen) ) { |
roryhand | 0:e89d7a0bfa3b | 405 | led2 = !led2; |
roryhand | 0:e89d7a0bfa3b | 406 | place_hold1 = 0; |
roryhand | 0:e89d7a0bfa3b | 407 | place_hold2 = 0; |
roryhand | 0:e89d7a0bfa3b | 408 | flag1 = 0; |
roryhand | 1:aac37edee302 | 409 | flag2 = 1; |
roryhand | 0:e89d7a0bfa3b | 410 | FLAGBUFF2 = 0; |
roryhand | 1:aac37edee302 | 411 | } |
roryhand | 0:e89d7a0bfa3b | 412 | } |
roryhand | 54:606a83fff291 | 413 | |
roryhand | 54:606a83fff291 | 414 | //timer_interrupt.stop(); |
roryhand | 54:606a83fff291 | 415 | |
roryhand | 0:e89d7a0bfa3b | 416 | } |
roryhand | 1:aac37edee302 | 417 | |
roryhand | 38:3b4c05af5f36 | 418 | |
roryhand | 38:3b4c05af5f36 | 419 | |
roryhand | 38:3b4c05af5f36 | 420 | |
roryhand | 38:3b4c05af5f36 | 421 | |
roryhand | 0:e89d7a0bfa3b | 422 | |
roryhand | 59:8e7c25a915a0 | 423 | |
roryhand | 59:8e7c25a915a0 | 424 | |
roryhand | 59:8e7c25a915a0 | 425 | |
roryhand | 59:8e7c25a915a0 | 426 | |
roryhand | 59:8e7c25a915a0 | 427 | |
roryhand | 3:6169aeeaeeb4 | 428 | |
roryhand | 3:6169aeeaeeb4 | 429 | |
roryhand | 3:6169aeeaeeb4 | 430 | |
roryhand | 3:6169aeeaeeb4 | 431 | |
roryhand | 3:6169aeeaeeb4 | 432 | |
roryhand | 3:6169aeeaeeb4 | 433 | //function prototypes |
roryhand | 67:043fe0b81343 | 434 | //classFade FadeDataInitialise(classFade FadeData); |
roryhand | 45:0e8e1f2ec5d2 | 435 | classSoundFile ReadFileInfo(classSoundFile Sound, FILE * wav_file); |
roryhand | 3:6169aeeaeeb4 | 436 | classSoundFile LoadFileStream(classSoundFile FileInfo, string filename); |
roryhand | 3:6169aeeaeeb4 | 437 | void Play_WaveFile(FILE * my_wav, WAV_FILE_STRUCT FileInfo); |
roryhand | 32:6ee488c97dcc | 438 | void Play_WaveFileDual(FILE * my_wav, WAV_FILE_STRUCT FileInfo); |
roryhand | 77:e93c944ed30f | 439 | void Play_WaveFileLoop(classSoundFile Sound1, classSoundFile Sound2, FILE* wavfile1, FILE* wavfile2,classPositionIndicators Positions); |
roryhand | 0:e89d7a0bfa3b | 440 | |
roryhand | 1:aac37edee302 | 441 | int main() |
roryhand | 1:aac37edee302 | 442 | { |
roryhand | 44:a9e84d333a6a | 443 | |
roryhand | 0:e89d7a0bfa3b | 444 | NotchUp.mode(PullUp); |
roryhand | 38:3b4c05af5f36 | 445 | NotchDown.mode(PullUp); |
roryhand | 0:e89d7a0bfa3b | 446 | |
roryhand | 0:e89d7a0bfa3b | 447 | pc.printf("Beginning of program\n"); |
roryhand | 32:6ee488c97dcc | 448 | |
roryhand | 13:8e93396a27c5 | 449 | |
roryhand | 13:8e93396a27c5 | 450 | |
roryhand | 4:55fbbb049bae | 451 | |
roryhand | 25:5336e1cf38d6 | 452 | printf("Do we even get to this stupid bloody point\n\r"); |
roryhand | 0:e89d7a0bfa3b | 453 | //Populate our class instances with some data (is there an implicit way to do this?) |
roryhand | 28:6b2353fad12d | 454 | |
roryhand | 1:aac37edee302 | 455 | |
roryhand | 3:6169aeeaeeb4 | 456 | printf("hello\n\r"); |
roryhand | 0:e89d7a0bfa3b | 457 | //Set up the wolfson Audio Codec board |
roryhand | 74:e71a7815f63d | 458 | |
roryhand | 74:e71a7815f63d | 459 | |
roryhand | 0:e89d7a0bfa3b | 460 | wm8731_Config_setup(); |
roryhand | 0:e89d7a0bfa3b | 461 | //i2s audio data transfer code?? |
roryhand | 0:e89d7a0bfa3b | 462 | i2s.stereomono(I2S_STEREO); |
roryhand | 0:e89d7a0bfa3b | 463 | i2s.masterslave(I2S_MASTER); |
roryhand | 0:e89d7a0bfa3b | 464 | led3 = 1; |
roryhand | 0:e89d7a0bfa3b | 465 | led2 = 1; |
roryhand | 45:0e8e1f2ec5d2 | 466 | printf("Hello i2s has started!"); |
roryhand | 30:4a8e80b243c4 | 467 | i2s.start(); |
roryhand | 0:e89d7a0bfa3b | 468 | sampletick.attach(&isr,1.0/sampling_freq); //1/16000 |
roryhand | 73:a5ab93214728 | 469 | NotchUpTick.attach(&NotchUpIsr,10.0); |
roryhand | 67:043fe0b81343 | 470 | |
roryhand | 74:e71a7815f63d | 471 | |
roryhand | 74:e71a7815f63d | 472 | |
roryhand | 67:043fe0b81343 | 473 | NotchFadeIn.LengthSecs = 2; |
roryhand | 67:043fe0b81343 | 474 | NotchFadeOut.LengthSecs = 2; |
roryhand | 67:043fe0b81343 | 475 | |
roryhand | 67:043fe0b81343 | 476 | NotchFadeIn.FadeDataInitialise(); |
roryhand | 67:043fe0b81343 | 477 | NotchFadeOut.FadeDataInitialise(); |
roryhand | 67:043fe0b81343 | 478 | |
roryhand | 74:e71a7815f63d | 479 | |
roryhand | 58:a174e7a8f5f2 | 480 | classPositionIndicators Positions; |
roryhand | 74:e71a7815f63d | 481 | slice1 = Positions.notch_start_pts[1]; |
roryhand | 74:e71a7815f63d | 482 | |
roryhand | 74:e71a7815f63d | 483 | |
roryhand | 73:a5ab93214728 | 484 | |
roryhand | 73:a5ab93214728 | 485 | TransitionFlag = 0; |
roryhand | 73:a5ab93214728 | 486 | |
roryhand | 60:36df2997de3d | 487 | FILE* wavfile1 = fopen("/sd/mydir/SoundDecoder_second/All_eight_notches.wav","rb"); |
roryhand | 74:e71a7815f63d | 488 | FILE* wavfile2 = fopen("/sd/mydir/SoundDecoder_second/All_14_Notch_Transitions.wav","rb"); |
roryhand | 85:e0c9ba778ae0 | 489 | FILE* wavfile3 = fopen("/sd/mydir/SoundDecoder_second/All_eight_notches.wav","rb"); |
roryhand | 74:e71a7815f63d | 490 | |
roryhand | 60:36df2997de3d | 491 | //FILE* wavfile1 = fopen("/sd/mydir/SoundDecoder_second/01.wav","rb"); |
roryhand | 58:a174e7a8f5f2 | 492 | classSoundFile Sound1; |
roryhand | 73:a5ab93214728 | 493 | classSoundFile Sound2; |
roryhand | 85:e0c9ba778ae0 | 494 | classSoundFile Sound3; |
roryhand | 85:e0c9ba778ae0 | 495 | Sound3 = ReadFileInfo(Sound3, wavfile2); |
roryhand | 73:a5ab93214728 | 496 | Sound2 = ReadFileInfo(Sound2, wavfile2); |
roryhand | 58:a174e7a8f5f2 | 497 | Sound1 = ReadFileInfo(Sound1, wavfile1); |
roryhand | 73:a5ab93214728 | 498 | NotchingSet.Notch = 1; |
roryhand | 77:e93c944ed30f | 499 | //Positions.notch_position_indicators[1] = 44; |
roryhand | 73:a5ab93214728 | 500 | fseek(wavfile1,Positions.notch_start_pts[1],SEEK_SET); |
roryhand | 73:a5ab93214728 | 501 | fseek(wavfile2,Positions.notch_transitions_start_pts[1],SEEK_SET); |
roryhand | 20:9cc7d825c07b | 502 | printf("about to play wav file\n\r"); |
roryhand | 77:e93c944ed30f | 503 | Play_WaveFileLoop(Sound1,Sound2, wavfile1,wavfile2, Positions); |
roryhand | 20:9cc7d825c07b | 504 | printf("finished playing Wav file\n\r"); |
roryhand | 54:606a83fff291 | 505 | |
roryhand | 54:606a83fff291 | 506 | |
roryhand | 31:0f8c3adf09c3 | 507 | timer_open.reset(); |
roryhand | 31:0f8c3adf09c3 | 508 | timer_open.start(); |
roryhand | 45:0e8e1f2ec5d2 | 509 | fclose(wavfile1); |
roryhand | 31:0f8c3adf09c3 | 510 | timer_open.stop(); |
roryhand | 31:0f8c3adf09c3 | 511 | printf("It took %d useconds to close file\n\r",timer_open.read_us()); |
roryhand | 54:606a83fff291 | 512 | |
roryhand | 54:606a83fff291 | 513 | |
roryhand | 54:606a83fff291 | 514 | |
roryhand | 54:606a83fff291 | 515 | |
roryhand | 9:dd9cae06b202 | 516 | /************************************PLAY WAV FILE LOOP*******************/ |
roryhand | 9:dd9cae06b202 | 517 | /************************************END OF PLAY WAV FILE LOOP*************/ |
roryhand | 13:8e93396a27c5 | 518 | |
roryhand | 13:8e93396a27c5 | 519 | |
roryhand | 1:aac37edee302 | 520 | i2s.stop(); |
roryhand | 74:e71a7815f63d | 521 | |
roryhand | 0:e89d7a0bfa3b | 522 | |
roryhand | 0:e89d7a0bfa3b | 523 | } |
roryhand | 0:e89d7a0bfa3b | 524 | |
roryhand | 0:e89d7a0bfa3b | 525 | |
roryhand | 3:6169aeeaeeb4 | 526 | |
roryhand | 3:6169aeeaeeb4 | 527 | |
roryhand | 3:6169aeeaeeb4 | 528 | |
roryhand | 3:6169aeeaeeb4 | 529 | |
roryhand | 45:0e8e1f2ec5d2 | 530 | classSoundFile ReadFileInfo(classSoundFile Sound, FILE * wav_file) |
roryhand | 0:e89d7a0bfa3b | 531 | { |
roryhand | 0:e89d7a0bfa3b | 532 | fseek(wav_file,20,SEEK_SET); |
roryhand | 22:706e86dc0d45 | 533 | printf("We have just seeked through this file\n\r"); |
roryhand | 45:0e8e1f2ec5d2 | 534 | fread(&Sound.FileInfo.FileFormat,sizeof(Sound.FileInfo.FileFormat),1,wav_file); |
roryhand | 1:aac37edee302 | 535 | //printf("wav_format.sample_rate: %d\n\r",FileInfo.FileFormat.sample_rate); |
roryhand | 1:aac37edee302 | 536 | |
roryhand | 45:0e8e1f2ec5d2 | 537 | fread(&Sound.FileInfo.FileData,sizeof(Sound.FileInfo.FileData),1,wav_file); |
roryhand | 55:5a441d3b0d57 | 538 | printf("wav_data.subchunk2_size: %d\n\r",Sound.FileInfo.FileData.subchunk2_size); |
roryhand | 45:0e8e1f2ec5d2 | 539 | Sound.FileInfo.slice_buf = ( char *)malloc(Sound.FileInfo.FileFormat.block_align); |
roryhand | 59:8e7c25a915a0 | 540 | printf("Wav File Block Align (number of bytes per sample!!: %d\n\r", Sound.FileInfo.FileFormat.block_align); |
roryhand | 45:0e8e1f2ec5d2 | 541 | fread(Sound.FileInfo.slice_buf,Sound.FileInfo.FileFormat.block_align,1,wav_file); //This isnt actually required, its just a test |
roryhand | 45:0e8e1f2ec5d2 | 542 | Sound.FileInfo.num_slices = Sound.FileInfo.FileData.subchunk2_size/Sound.FileInfo.FileFormat.block_align; |
roryhand | 1:aac37edee302 | 543 | //printf("Number of Slices: %d\n\r",FileInfo.num_slices); |
roryhand | 45:0e8e1f2ec5d2 | 544 | return Sound; |
roryhand | 0:e89d7a0bfa3b | 545 | } |
roryhand | 1:aac37edee302 | 546 | |
roryhand | 1:aac37edee302 | 547 | |
roryhand | 64:6061ffe25985 | 548 | //Function to initialise Data for classFade objects. Perhaps move this into a constructor for the class? (class still to be added) |
roryhand | 67:043fe0b81343 | 549 | /* |
roryhand | 64:6061ffe25985 | 550 | classFade FadeDataInitialise(classFade FadeData) |
roryhand | 64:6061ffe25985 | 551 | { |
roryhand | 64:6061ffe25985 | 552 | FadeData.DecayFactor = 1.3; |
roryhand | 64:6061ffe25985 | 553 | FadeData.FadeIteration = 1; |
roryhand | 64:6061ffe25985 | 554 | //FadeData.Denom = 11025*FadeData.DecayFactor; |
roryhand | 64:6061ffe25985 | 555 | FadeData.Denom = 11025*FadeData.DecayFactor; |
roryhand | 64:6061ffe25985 | 556 | FadeData.Natural_Exp = 2.7183; |
roryhand | 64:6061ffe25985 | 557 | FadeData.Length = 11025*FadeData.LengthSecs; |
roryhand | 64:6061ffe25985 | 558 | //FadeData.Natural_Exp = 2.7; |
roryhand | 64:6061ffe25985 | 559 | return FadeData; |
roryhand | 64:6061ffe25985 | 560 | } |
roryhand | 67:043fe0b81343 | 561 | */ |
roryhand | 1:aac37edee302 | 562 | |
roryhand | 1:aac37edee302 | 563 | |
roryhand | 1:aac37edee302 | 564 | |
roryhand | 0:e89d7a0bfa3b | 565 | |
roryhand | 0:e89d7a0bfa3b | 566 | void Play_WaveFile(FILE * my_wav, WAV_FILE_STRUCT FileInfo) |
roryhand | 0:e89d7a0bfa3b | 567 | { |
roryhand | 1:aac37edee302 | 568 | while(slice<FileInfo.num_slices) { |
roryhand | 1:aac37edee302 | 569 | fread(FileInfo.slice_buf,FileInfo.FileFormat.block_align,1,my_wav); |
roryhand | 1:aac37edee302 | 570 | data_sptr=(short *)FileInfo.slice_buf; // 16 bit samples |
roryhand | 1:aac37edee302 | 571 | for (channel=0; channel<FileInfo.FileFormat.num_channels; channel++) { |
roryhand | 1:aac37edee302 | 572 | if(flag1 == 1) { |
roryhand | 1:aac37edee302 | 573 | Buffer1[place_hold1] = data_sptr[channel]; |
roryhand | 1:aac37edee302 | 574 | place_hold1 = place_hold1 + 1; |
roryhand | 1:aac37edee302 | 575 | if(place_hold1 >= BufferLen) { |
roryhand | 1:aac37edee302 | 576 | while(1) { |
roryhand | 1:aac37edee302 | 577 | if(flag1 == 0) { |
roryhand | 0:e89d7a0bfa3b | 578 | |
roryhand | 1:aac37edee302 | 579 | break; |
roryhand | 0:e89d7a0bfa3b | 580 | } |
roryhand | 1:aac37edee302 | 581 | |
roryhand | 0:e89d7a0bfa3b | 582 | } |
roryhand | 1:aac37edee302 | 583 | } |
roryhand | 1:aac37edee302 | 584 | |
roryhand | 1:aac37edee302 | 585 | } else if(flag2 == 1) { |
roryhand | 1:aac37edee302 | 586 | Buffer2[place_hold2] = data_sptr[channel]; |
roryhand | 1:aac37edee302 | 587 | place_hold2 = place_hold2 + 1; |
roryhand | 1:aac37edee302 | 588 | if(place_hold2 >= BufferLen) { |
roryhand | 1:aac37edee302 | 589 | |
roryhand | 1:aac37edee302 | 590 | while(1) { |
roryhand | 1:aac37edee302 | 591 | if(flag2 == 0) { |
roryhand | 1:aac37edee302 | 592 | |
roryhand | 1:aac37edee302 | 593 | break; |
roryhand | 1:aac37edee302 | 594 | } |
roryhand | 0:e89d7a0bfa3b | 595 | } |
roryhand | 1:aac37edee302 | 596 | } |
roryhand | 0:e89d7a0bfa3b | 597 | } |
roryhand | 1:aac37edee302 | 598 | |
roryhand | 1:aac37edee302 | 599 | } |
roryhand | 1:aac37edee302 | 600 | slice = slice + 1; |
roryhand | 0:e89d7a0bfa3b | 601 | } |
roryhand | 0:e89d7a0bfa3b | 602 | } |
roryhand | 0:e89d7a0bfa3b | 603 | |
roryhand | 0:e89d7a0bfa3b | 604 | |
roryhand | 0:e89d7a0bfa3b | 605 | |
roryhand | 0:e89d7a0bfa3b | 606 | |
roryhand | 38:3b4c05af5f36 | 607 | //***************************************************************************// |
roryhand | 38:3b4c05af5f36 | 608 | |
roryhand | 38:3b4c05af5f36 | 609 | //**************************************************************************// |
roryhand | 38:3b4c05af5f36 | 610 | |
roryhand | 38:3b4c05af5f36 | 611 | |
roryhand | 38:3b4c05af5f36 | 612 | |
roryhand | 38:3b4c05af5f36 | 613 | |
roryhand | 38:3b4c05af5f36 | 614 | |
roryhand | 59:8e7c25a915a0 | 615 | |
roryhand | 44:a9e84d333a6a | 616 | |
roryhand | 77:e93c944ed30f | 617 | void Play_WaveFileLoop(classSoundFile Sound1, classSoundFile Sound2, FILE *wavfile1, FILE* wavfile2, classPositionIndicators Positions) |
roryhand | 45:0e8e1f2ec5d2 | 618 | { |
roryhand | 45:0e8e1f2ec5d2 | 619 | while(1) { //might have to change this to a while(1) loop? |
roryhand | 44:a9e84d333a6a | 620 | |
roryhand | 2:957d3b2afff4 | 621 | |
roryhand | 44:a9e84d333a6a | 622 | |
roryhand | 44:a9e84d333a6a | 623 | |
roryhand | 54:606a83fff291 | 624 | |
roryhand | 44:a9e84d333a6a | 625 | //Sound1======================================================================================= |
roryhand | 69:df10ee3ad523 | 626 | if( slice1 == (Positions.notch_start_pts[NotchingSet.Notch + 1]) ) { |
roryhand | 69:df10ee3ad523 | 627 | slice1 = Positions.notch_start_pts[NotchingSet.Notch]; |
roryhand | 69:df10ee3ad523 | 628 | fseek(wavfile1,Positions.notch_start_pts[NotchingSet.Notch],SEEK_SET); |
roryhand | 67:043fe0b81343 | 629 | } |
roryhand | 73:a5ab93214728 | 630 | if(TransitionFlag) |
roryhand | 73:a5ab93214728 | 631 | { |
roryhand | 73:a5ab93214728 | 632 | |
roryhand | 74:e71a7815f63d | 633 | //printf("TransitionFlag == 1, so now we are going to do some other processing\n\r"); |
roryhand | 73:a5ab93214728 | 634 | //NOTCH 1 |
roryhand | 75:8a71e269b890 | 635 | //OperationsTimer.reset(); |
roryhand | 75:8a71e269b890 | 636 | //OperationsTimer.start(); |
roryhand | 77:e93c944ed30f | 637 | //fpos_t position; |
roryhand | 77:e93c944ed30f | 638 | //fgetpos(wavfile1,&position); |
roryhand | 77:e93c944ed30f | 639 | //printf("Positions.notch_position_indicators[NotchingSet.Notch]: %d\n\r",Positions.notch_position_indicators[NotchingSet.Notch]); |
roryhand | 77:e93c944ed30f | 640 | fseek(wavfile1,Positions.notch_position_indicators[NotchingSet.Notch-1],Positions.notch_position_indicators[NotchingSet.Notch-1]); |
roryhand | 77:e93c944ed30f | 641 | ////fsetpos(wavfile1, &position); |
roryhand | 75:8a71e269b890 | 642 | //OperationsTimer.stop(); |
roryhand | 75:8a71e269b890 | 643 | //printf("It took %d useconds to perform fseek operation.\n\r",OperationsTimer.read_us()); |
roryhand | 74:e71a7815f63d | 644 | //printf("We have seeked through the file\n\r"); |
roryhand | 75:8a71e269b890 | 645 | |
roryhand | 75:8a71e269b890 | 646 | |
roryhand | 77:e93c944ed30f | 647 | //printf("Size of Sound1.FileInfo.FileFormat.block_align: %d\n\r",Sound1.FileInfo.FileFormat.block_align); |
roryhand | 75:8a71e269b890 | 648 | |
roryhand | 77:e93c944ed30f | 649 | /* |
roryhand | 75:8a71e269b890 | 650 | OperationsTimer.reset(); |
roryhand | 75:8a71e269b890 | 651 | OperationsTimer.start(); |
roryhand | 77:e93c944ed30f | 652 | */ |
roryhand | 78:69a0c7a5fbdf | 653 | fseek(wavfile1,Positions.notch_position_indicators[NotchingSet.Notch-1],Positions.notch_position_indicators[NotchingSet.Notch-1]); |
roryhand | 74:e71a7815f63d | 654 | fread(Sound1.FileInfo.slice_buf, Sound1.FileInfo.FileFormat.block_align,1,wavfile1); |
roryhand | 78:69a0c7a5fbdf | 655 | data_sptr1=(short *)Sound1.FileInfo.slice_buf; |
roryhand | 78:69a0c7a5fbdf | 656 | Positions.notch_position_indicators[NotchingSet.Notch-1] = Positions.notch_position_indicators[NotchingSet.Notch-1] + 2; |
roryhand | 77:e93c944ed30f | 657 | |
roryhand | 78:69a0c7a5fbdf | 658 | fseek(wavfile2,Positions.notch_transitions_position_indicators[NotchingSet.NotchTransUp],Positions.notch_transitions_position_indicators[NotchingSet.NotchTransUp]); |
roryhand | 78:69a0c7a5fbdf | 659 | fread(Sound2.FileInfo.slice_buf, Sound2.FileInfo.FileFormat.block_align,1,wavfile2); |
roryhand | 78:69a0c7a5fbdf | 660 | data_sptr2=(short *)Sound2.FileInfo.slice_buf; |
roryhand | 78:69a0c7a5fbdf | 661 | Positions.notch_transitions_position_indicators[NotchingSet.NotchTransUp] = Positions.notch_transitions_position_indicators[NotchingSet.NotchTransUp] + 2; |
roryhand | 78:69a0c7a5fbdf | 662 | |
roryhand | 78:69a0c7a5fbdf | 663 | |
roryhand | 77:e93c944ed30f | 664 | /* |
roryhand | 75:8a71e269b890 | 665 | OperationsTimer.stop(); |
roryhand | 75:8a71e269b890 | 666 | printf("It took %d useconds to perform fread operation.\n\r",OperationsTimer.read_us()); |
roryhand | 77:e93c944ed30f | 667 | */ |
roryhand | 74:e71a7815f63d | 668 | //printf("We have now read in 2 bytes of data (i.e. 1 sample)\n\r"); |
roryhand | 78:69a0c7a5fbdf | 669 | |
roryhand | 74:e71a7815f63d | 670 | //printf("We have now cast this data to a short data type\n\r"); |
roryhand | 77:e93c944ed30f | 671 | |
roryhand | 77:e93c944ed30f | 672 | |
roryhand | 78:69a0c7a5fbdf | 673 | |
roryhand | 77:e93c944ed30f | 674 | |
roryhand | 77:e93c944ed30f | 675 | |
roryhand | 74:e71a7815f63d | 676 | //printf("We have incremented up the Positions.notch_position_indicator"); |
roryhand | 72:599068243a0f | 677 | //increment up the position indicator! |
roryhand | 72:599068243a0f | 678 | |
roryhand | 73:a5ab93214728 | 679 | //NOTCH 2 |
roryhand | 77:e93c944ed30f | 680 | /* |
roryhand | 77:e93c944ed30f | 681 | fseek(wavfile1,Positions.notch_position_indicators[NotchingSet.Notch],Positions.notch_position_indicators[NotchingSet.Notch]); |
roryhand | 74:e71a7815f63d | 682 | fread(Sound1.FileInfo.slice_buf, Sound1.FileInfo.FileFormat.block_align,1,wavfile1); |
roryhand | 74:e71a7815f63d | 683 | data_sptr3=(short *)Sound1.FileInfo.slice_buf; |
roryhand | 77:e93c944ed30f | 684 | Positions.notch_position_indicators[NotchingSet.Notch] = Positions.notch_position_indicators[NotchingSet.Notch] + 2; |
roryhand | 77:e93c944ed30f | 685 | */ |
roryhand | 72:599068243a0f | 686 | //increment up the position indicator! |
roryhand | 72:599068243a0f | 687 | |
roryhand | 77:e93c944ed30f | 688 | /* |
roryhand | 69:df10ee3ad523 | 689 | if(NotchingSet.NotchDirection) |
roryhand | 69:df10ee3ad523 | 690 | |
roryhand | 69:df10ee3ad523 | 691 | { |
roryhand | 75:8a71e269b890 | 692 | //printf("Reached if(NotchingSet.NotchDirection)\n\r"); |
roryhand | 69:df10ee3ad523 | 693 | |
roryhand | 73:a5ab93214728 | 694 | //N1 N2 Transition |
roryhand | 77:e93c944ed30f | 695 | fseek(wavfile2,Positions.notch_transitions_position_indicators[NotchingSet.NotchTransUp],Positions.notch_transitions_position_indicators[NotchingSet.NotchTransUp]); |
roryhand | 74:e71a7815f63d | 696 | fread(Sound1.FileInfo.slice_buf, Sound1.FileInfo.FileFormat.block_align,1,wavfile2); |
roryhand | 77:e93c944ed30f | 697 | data_sptr2=(short *)Sound2.FileInfo.slice_buf; |
roryhand | 73:a5ab93214728 | 698 | Positions.notch_transitions_position_indicators[NotchingSet.NotchTransUp] = Positions.notch_transitions_position_indicators[NotchingSet.NotchTransUp] + 2; |
roryhand | 69:df10ee3ad523 | 699 | |
roryhand | 69:df10ee3ad523 | 700 | } else { |
roryhand | 73:a5ab93214728 | 701 | //N1 N2 Transition |
roryhand | 77:e93c944ed30f | 702 | fseek(wavfile2,Positions.notch_transitions_position_indicators[NotchingSet.NotchTransDown],Positions.notch_position_indicators[NotchingSet.NotchTransDown]); |
roryhand | 74:e71a7815f63d | 703 | fread(Sound1.FileInfo.slice_buf, Sound1.FileInfo.FileFormat.block_align,1,wavfile2); |
roryhand | 77:e93c944ed30f | 704 | data_sptr2=(short *)Sound2.FileInfo.slice_buf; |
roryhand | 73:a5ab93214728 | 705 | Positions.notch_transitions_position_indicators[NotchingSet.NotchTransUp] = Positions.notch_transitions_position_indicators[NotchingSet.NotchTransUp] + 2; |
roryhand | 69:df10ee3ad523 | 706 | |
roryhand | 69:df10ee3ad523 | 707 | } |
roryhand | 77:e93c944ed30f | 708 | */ |
roryhand | 77:e93c944ed30f | 709 | |
roryhand | 70:2b144da2c3b8 | 710 | |
roryhand | 70:2b144da2c3b8 | 711 | |
roryhand | 73:a5ab93214728 | 712 | NotchFadeOut.FadeOut(); |
roryhand | 77:e93c944ed30f | 713 | /* |
roryhand | 70:2b144da2c3b8 | 714 | if(Positions.notch_transitions_position_indicators[NotchingSet.NotchTransUp] >= (Positions.notch_transitions_start_pts[NotchingSet.NotchTransUp+1] - NotchFadeIn.Length)) |
roryhand | 70:2b144da2c3b8 | 715 | { |
roryhand | 70:2b144da2c3b8 | 716 | NotchFadeIn.FadeIn(); |
roryhand | 70:2b144da2c3b8 | 717 | if(Positions.notch_transitions_position_indicators[NotchingSet.NotchTransUp] >= Positions.notch_transitions_start_pts[NotchingSet.NotchTransUp+1]) |
roryhand | 70:2b144da2c3b8 | 718 | { |
roryhand | 73:a5ab93214728 | 719 | *Sound1.data_sptr = *data_sptr2*NotchFadeIn.FadeCoeff; |
roryhand | 73:a5ab93214728 | 720 | TransitionFlag = 0; |
roryhand | 77:e93c944ed30f | 721 | fseek(wavfile1,Positions.notch_position_indicators[NotchingSet.Notch],Positions.notch_position_indicators[NotchingSet.Notch]); |
roryhand | 70:2b144da2c3b8 | 722 | |
roryhand | 70:2b144da2c3b8 | 723 | } |
roryhand | 72:599068243a0f | 724 | else |
roryhand | 72:599068243a0f | 725 | { |
roryhand | 73:a5ab93214728 | 726 | *Sound1.data_sptr = *data_sptr1*NotchFadeOut.FadeCoeff + *data_sptr2 + *data_sptr3*NotchFadeIn.FadeCoeff; |
roryhand | 72:599068243a0f | 727 | } |
roryhand | 70:2b144da2c3b8 | 728 | |
roryhand | 70:2b144da2c3b8 | 729 | |
roryhand | 70:2b144da2c3b8 | 730 | } |
roryhand | 77:e93c944ed30f | 731 | */ |
roryhand | 77:e93c944ed30f | 732 | //else |
roryhand | 77:e93c944ed30f | 733 | //{ |
roryhand | 84:0a259e261532 | 734 | *Sound1.data_sptr = *data_sptr1;//*NotchFadeOut.FadeCoeff + *data_sptr2; |
roryhand | 78:69a0c7a5fbdf | 735 | //*Sound1.data_sptr = *data_sptr1;// + *data_sptr2; |
roryhand | 78:69a0c7a5fbdf | 736 | |
roryhand | 78:69a0c7a5fbdf | 737 | |
roryhand | 78:69a0c7a5fbdf | 738 | |
roryhand | 72:599068243a0f | 739 | //include a flag here, to hand over control. Going to get a bit complicated!!! |
roryhand | 77:e93c944ed30f | 740 | //} |
roryhand | 70:2b144da2c3b8 | 741 | |
roryhand | 70:2b144da2c3b8 | 742 | |
roryhand | 69:df10ee3ad523 | 743 | |
roryhand | 73:a5ab93214728 | 744 | |
roryhand | 73:a5ab93214728 | 745 | |
roryhand | 69:df10ee3ad523 | 746 | |
roryhand | 73:a5ab93214728 | 747 | } |
roryhand | 73:a5ab93214728 | 748 | else |
roryhand | 73:a5ab93214728 | 749 | { |
roryhand | 76:9535aedba4da | 750 | |
roryhand | 77:e93c944ed30f | 751 | /*fseek(wavfile1,Positions.notch_position_indicators[1],SEEK_SET); |
roryhand | 76:9535aedba4da | 752 | OperationsTimer.reset(); |
roryhand | 76:9535aedba4da | 753 | OperationsTimer.start(); |
roryhand | 77:e93c944ed30f | 754 | */ |
roryhand | 69:df10ee3ad523 | 755 | fread(Sound1.FileInfo.slice_buf,Sound1.FileInfo.FileFormat.block_align,1,wavfile1); |
roryhand | 77:e93c944ed30f | 756 | /*OperationsTimer.stop(); |
roryhand | 76:9535aedba4da | 757 | printf("It took %d useconds to perform fread operation.\n\r",OperationsTimer.read_us()); |
roryhand | 76:9535aedba4da | 758 | Positions.notch_position_indicators[1] = Positions.notch_position_indicators[1] + 2;//i.e. 2 bytes, per sample, for 2-byte (16-bit) data |
roryhand | 77:e93c944ed30f | 759 | */ |
roryhand | 84:0a259e261532 | 760 | data_sptr1=(short *)Sound1.FileInfo.slice_buf; |
roryhand | 84:0a259e261532 | 761 | *Sound1.data_sptr = *data_sptr1; |
roryhand | 84:0a259e261532 | 762 | //Sound1.data_sptr=(short *)Sound1.FileInfo.slice_buf; // 16 bit samples |
roryhand | 73:a5ab93214728 | 763 | |
roryhand | 73:a5ab93214728 | 764 | } |
roryhand | 44:a9e84d333a6a | 765 | //============================================================================================= |
roryhand | 44:a9e84d333a6a | 766 | |
roryhand | 67:043fe0b81343 | 767 | |
roryhand | 1:aac37edee302 | 768 | |
roryhand | 1:aac37edee302 | 769 | |
roryhand | 44:a9e84d333a6a | 770 | |
roryhand | 45:0e8e1f2ec5d2 | 771 | for (channel=0; channel<Sound1.FileInfo.FileFormat.num_channels; channel++) { |
roryhand | 45:0e8e1f2ec5d2 | 772 | switch (Sound1.FileInfo.FileFormat.sig_bps) { |
roryhand | 0:e89d7a0bfa3b | 773 | case 16: |
roryhand | 1:aac37edee302 | 774 | if(flag1 == 1) { |
roryhand | 45:0e8e1f2ec5d2 | 775 | Buffer1[place_hold1] = Sound1.data_sptr[channel]; |
roryhand | 1:aac37edee302 | 776 | place_hold1 = place_hold1 + 1; |
roryhand | 1:aac37edee302 | 777 | if(place_hold1 >= BufferLen) { |
roryhand | 1:aac37edee302 | 778 | while(1) { |
roryhand | 1:aac37edee302 | 779 | if(flag1 == 0) { |
roryhand | 1:aac37edee302 | 780 | break; |
roryhand | 1:aac37edee302 | 781 | }//if(flag1 == 0) |
roryhand | 1:aac37edee302 | 782 | |
roryhand | 1:aac37edee302 | 783 | |
roryhand | 1:aac37edee302 | 784 | }//while(1) |
roryhand | 1:aac37edee302 | 785 | }//if(place_hold1 > = BufferLen) |
roryhand | 0:e89d7a0bfa3b | 786 | |
roryhand | 1:aac37edee302 | 787 | } else if(flag2 == 1) { |
roryhand | 45:0e8e1f2ec5d2 | 788 | Buffer2[place_hold2] = Sound1.data_sptr[channel]; |
roryhand | 1:aac37edee302 | 789 | place_hold2 = place_hold2 + 1; |
roryhand | 1:aac37edee302 | 790 | if(place_hold2 >= BufferLen) { |
roryhand | 1:aac37edee302 | 791 | while(1) { |
roryhand | 1:aac37edee302 | 792 | |
roryhand | 1:aac37edee302 | 793 | if(flag2 == 0) { |
roryhand | 1:aac37edee302 | 794 | break; |
roryhand | 1:aac37edee302 | 795 | } |
roryhand | 1:aac37edee302 | 796 | } |
roryhand | 0:e89d7a0bfa3b | 797 | } |
roryhand | 1:aac37edee302 | 798 | |
roryhand | 1:aac37edee302 | 799 | } |
roryhand | 0:e89d7a0bfa3b | 800 | } |
roryhand | 0:e89d7a0bfa3b | 801 | } |
roryhand | 59:8e7c25a915a0 | 802 | slice1 = slice1 + 2;//increment up by the number of bytes per Audio data sample! Makes sense it is 2 bytes, as this is 16-bit data. |
roryhand | 45:0e8e1f2ec5d2 | 803 | slice2 = slice2 + 1; |
roryhand | 45:0e8e1f2ec5d2 | 804 | slice3 = slice3 + 1; |
roryhand | 0:e89d7a0bfa3b | 805 | } |
roryhand | 0:e89d7a0bfa3b | 806 | } |
roryhand | 0:e89d7a0bfa3b | 807 | |
roryhand | 0:e89d7a0bfa3b | 808 | |
roryhand | 0:e89d7a0bfa3b | 809 | |
roryhand | 0:e89d7a0bfa3b | 810 | |
roryhand | 0:e89d7a0bfa3b | 811 | |
roryhand | 0:e89d7a0bfa3b | 812 | |
roryhand | 59:8e7c25a915a0 | 813 |