Embedded system Fun Blog
























































Find out all the best information, libraries and circuit about the latest Embedded systems.

Saturday 7 January 2012

MBED Example: Read RIFF WAV Header

.info: https://github.com/leroilion/mbed/blob/master/PlayMusic/Examples/HeaderReader/main.cpp

#include "mbed.h"
#include "SDFileSystem.h"
#include "MobileLCD.h"
MobileLCD lcd(5, 6, 7, 8, 9);
SDFileSystem sd(11, 12, 13, 14, "sd");
int main() {
lcd.background(0x0000FF);
    lcd.cls();
lcd.printf("Header Reader");
lcd.locate(0,2);
int ch;
FILE *fp = fopen("/sd/QI2.wav", "r");
if(fp == NULL) {
error("Could not open file for write\n");
lcd.printf("Could not open file for read");
}
for(int i = 1; i < 5; i++) { //"RIFF"
ch = fgetc(fp);
lcd.printf("%c ", ch);
if(i == 4) {lcd.locate(0,3);
}
}
for(int i = 5; i < 9; i++) { //Chunk size
ch = fgetc(fp);
lcd.printf("%x ", ch);
if(i == 8) {lcd.locate(0,4);}
}
for(int i = 9; i < 13; i++) { //"WAVE"
ch = fgetc(fp);
lcd.printf("%c ", ch);
if(i == 12) {lcd.locate(0,5);}
}
for(int i = 13; i < 17; i++) { //ID = "fmt"
ch = fgetc(fp);
lcd.printf("%c ", ch);
if(i == 16) {lcd.locate(0,6);}
}
for(int i = 17; i < 21; i++) { //Chunk Size
ch = fgetc(fp);
lcd.printf("%x ", ch);
if(i == 20) {lcd.locate(0,7);}
}
for(int i = 21; i < 23; i++) { //Audio format
ch = fgetc(fp); //1 = Uncompressed
lcd.printf("%x ", ch);
if(i == 22) {lcd.locate(0,8);}
}
for(int i = 23; i < 25; i++) { //Channels
ch = fgetc(fp); //1 = mono, 2 = stereo
lcd.printf("%x ", ch);
if(i == 24) {lcd.locate(0,9);}
}
for(int i = 25; i < 29; i++) { //Sample Rate
ch = fgetc(fp);
lcd.printf("%x ", ch);
if(i == 28) {lcd.locate(0,10);}
}
for(int i = 29; i < 33; i++) { //Byte Rate
ch = fgetc(fp);
lcd.printf("%x ", ch);
if(i == 32) {lcd.locate(0,11);}
}
for(int i = 33; i < 35; i++) { //Align
ch = fgetc(fp);
lcd.printf("%x ", ch);
if(i == 34) {lcd.locate(0,12);}
}
for(int i = 35; i < 37; i++) { //Bits per Sample
ch = fgetc(fp);
lcd.printf("%d ", ch);
if(i == 36) {lcd.locate(0,13);}
}
for(int i = 37; i < 41; i++) { //"data"
ch = fgetc(fp);
lcd.printf("%c ", ch);
if(i == 40) {lcd.locate(0,14);}
}
for(int i = 41; i < 45; i++) { //data chunk size
ch = fgetc(fp);
lcd.printf("%x ", ch);
}
fclose(fp); //close the file
lcd.locate(0,15);
lcd.printf("file closed");
}



No comments:

Post a Comment