We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Dear all, I have a audio.wave to convert into raw format to input into Analog Device DAC AD7302. As I am using DS80C400 as my MCU, I will need to have the audio conversion decoding to be done in C. What are the steps that I need to do? Is this correct: Read the audio wave from memory (RAM) and do conversion through reading the following: fscanf( infile, "%4c", &RIFFsize ); fscanf( infile, "%4c", &type ); fscanf( infile, "%4c", &fmtchunk ); fscanf( infile, "%4c", &fmtsize ); fscanf( infile, "%2c", &format ); fscanf( infile, "%2c", &channels ); fscanf( infile, "%4c", &samplerate ); fscanf( infile, "%4c", &average_bps ); fscanf( infile, "%2c", &align ); fscanf( infile, "%2c", &bitspersample ); fscanf( infile, "%4c", &datchunk ); Then input into DAC D0-D7 and output. Please advise if the above is correct.
"Please advise if the above is correct." There is a good chance that it is not correct unless your RAM has some filesystem abstraction layer riding on top of it.
Hi Dan, Thanks for the reply. Any idea how I should do it? I find may documents on audio decoding, but most of them states to about the structure of an audio wave file. But did not really touch on how i should do the conversion if the file is saved in SRAM. My flow sequence is: SRAM stores audio.wave file --> MCU do conversion (write decoding codes) --> Input raw data into DAC --> Output from DAC to speaker.
"Any idea how I should do it?" You have provided very little information as to exactly how this wave file appears in your SRAM. Let's just assume that it does and that it has the same structure as the original file format. If you had been able to fscanf() a file, then you can sscanf() memory, so instead of infile being a FILE *stream, we will assume it is a buffer in memory (unsigned char *inbuf), in which case you would use in an ideal situation without any conversion errors:
int len = 0; len += sscanf( inbuf+len, "%4c", &RIFFsize ); len += sscanf( inbuf+len, "%4c", &type ); len += sscanf( inbuf+len, "%4c", &fmtchunk ); len += sscanf( inbuf+len, "%4c", &fmtsize ); len += sscanf( inbuf+len, "%2c", &format ); len += sscanf( inbuf+len, "%2c", &channels ); len += sscanf( inbuf+len, "%4c", &samplerate ); len += sscanf( inbuf+len, "%4c", &average_bps ); len += sscanf( inbuf+len, "%2c", &align ); len += sscanf( inbuf+len, "%2c", &bitspersample ); len += sscanf( inbuf+len, "%4c", &datchunk );