23 static volatile int sampleRate;
24 static volatile int swap = 0;
25 static volatile int playing = 0;
26 static volatile short int wavVal;
27 static volatile int dacVal;
28 static volatile unsigned int dtSample;
30 static volatile int significantBitsPerSample=16;
31 static volatile unsigned int reps;
32 static volatile unsigned int cog = 0;
33 static volatile unsigned int cog2 = 0;
34 static volatile unsigned int settingUp = 0;
36 static volatile unsigned int volume = 0;
37 static volatile const unsigned int BUF_SIZE = 512;
39 static unsigned int stack[44 + 28];
40 static unsigned int stack2[44 + 128];
42 static volatile int _wav_pin_left = 27;
43 static volatile int _wav_pin_right = 26;
46 void wav_reader(
void *par);
47 void audio_dac(
void *par);
48 void spooler(
void *par);
50 char wavDacBufferL[512];
51 char wavDacBufferH[512];
53 volatile const char* track;
64 cog2 =
cogstart(wav_reader, NULL, stack2,
sizeof(stack2)) + 1;
71 int status = settingUp || playing;
77 if(vol > 10) vol = 10;
79 vol = 1 << (21 - significantBitsPerSample + vol);
80 unsigned int vi = volume;
81 unsigned int vf = vol;
82 for(
int v = vi; volume != vf;)
84 if(vf > volume) volume++;
85 if(vf < volume) volume--;
86 if(volume == vf)
break;
112 void wav_reader(
void *par)
116 unsigned short int w;
118 const char* trackp = (
const char*) track;
120 fp = fopen(trackp,
"r");
127 int fileSize = b[3] << 24 | b[2] << 16 | b[1] << 8 | b[0];
137 int chunkDataSize = b[3] << 24 | b[2] << 16 | b[1] << 8 | b[0];
141 int compressionCode = b[1] << 8 | b[0];
145 int numberOfChannels = b[1] << 8 | b[0];
149 sampleRate = b[3] << 24 | b[2] << 16 | b[1] << 8 | b[0];
153 int averageBytesPerSecond = b[3] << 24 | b[2] << 16 | b[1] << 8 | b[0];
157 int blockAlign = b[1] << 8 | b[0];
161 significantBitsPerSample = b[1] << 8 | b[0];
164 int extraFormatBytes;
165 if(compressionCode != 1)
168 extraFormatBytes = b[1] << 8 | b[0];
172 extraFormatBytes = 0;
180 int dwordChunkSize = b[3] << 24 | b[2] << 16 | b[1] << 8 | b[0];
185 fread(wavDacBufferL, 1, 512, fp);
191 fread(wavDacBufferH, 1, 512, fp);
194 cog =
cogstart(audio_dac, NULL, stack,
sizeof(stack)) + 1;
196 int reps = (fileSize-1)/1024;
201 for(i = 1; i < reps; i++)
204 fread(wavDacBufferL, 1, BUF_SIZE, fp);
206 fread(wavDacBufferH, 1, BUF_SIZE, fp);
213 _wav_pin_left = left_pin;
214 _wav_pin_right = right_pin;
218 void audio_dac(
void *par)
222 if (_wav_pin_left > -1 && _wav_pin_left < 33) {
223 CTRA = 0x18000000 + _wav_pin_left;
224 DIRA |= (1 << _wav_pin_left);
229 if (_wav_pin_right > -1 && _wav_pin_right < 33) {
230 CTRB = 0x18000000 + _wav_pin_right;
231 DIRA |= (1 << _wav_pin_right);
246 for(i = 0; i < BUF_SIZE; i+=2)
248 wavVal = wavDacBufferL[i] | wavDacBufferL[i+1]<<8;
249 dacVal = (wavVal + 32768) * volume;
255 for(i = 0; i < BUF_SIZE; i+=2)
257 wavVal = wavDacBufferH[i] | wavDacBufferH[i+1]<<8;
258 dacVal = (wavVal + 32768) * volume;
266 dacVal = 32768 * volume;