1
0
Fork 0
forked from len0rd/rockbox

Move wav related code to main.c

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21039 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Mohamed Tarek 2009-05-22 19:36:32 +00:00
parent fe263f7260
commit fde78ddcc0
2 changed files with 80 additions and 80 deletions

View file

@ -37,6 +37,86 @@
# endif
#endif
static unsigned char wav_header[44]={
'R','I','F','F',// 0 - ChunkID
0,0,0,0, // 4 - ChunkSize (filesize-8)
'W','A','V','E',// 8 - Format
'f','m','t',' ',// 12 - SubChunkID
16,0,0,0, // 16 - SubChunk1ID // 16 for PCM
1,0, // 20 - AudioFormat (1=Uncompressed)
2,0, // 22 - NumChannels
0,0,0,0, // 24 - SampleRate in Hz
0,0,0,0, // 28 - Byte Rate (SampleRate*NumChannels*(BitsPerSample/8)
4,0, // 32 - BlockAlign (== NumChannels * BitsPerSample/8)
16,0, // 34 - BitsPerSample
'd','a','t','a',// 36 - Subchunk2ID
0,0,0,0 // 40 - Subchunk2Size
};
int open_wav(char* filename) {
int fd,res;
fd=open(filename,O_CREAT|O_WRONLY|O_TRUNC,S_IRUSR|S_IWUSR);
if (fd >= 0) {
res = write(fd,wav_header,sizeof(wav_header));
}
return(fd);
}
void close_wav(int fd, RMContext *rmctx) {
int x,res;
int filesize;
int bytes_per_sample = 2;
int samples_per_frame = rmctx->samples_pf_pc;
int nb_channels = rmctx->nb_channels;
int sample_rate = rmctx->sample_rate;
int nb_frames = rmctx->audio_framesize/rmctx->block_align * rmctx->nb_packets - 2; // first 2 frames have no valid audio; skipped in output
filesize= samples_per_frame*bytes_per_sample*nb_frames +44;
printf("Filesize = %d\n",filesize);
// ChunkSize
x=filesize-8;
wav_header[4]=(x&0xff);
wav_header[5]=(x&0xff00)>>8;
wav_header[6]=(x&0xff0000)>>16;
wav_header[7]=(x&0xff000000)>>24;
// Number of channels
wav_header[22]=nb_channels;
// Samplerate
wav_header[24]=sample_rate&0xff;
wav_header[25]=(sample_rate&0xff00)>>8;
wav_header[26]=(sample_rate&0xff0000)>>16;
wav_header[27]=(sample_rate&0xff000000)>>24;
// ByteRate
x=sample_rate*bytes_per_sample*nb_channels;
wav_header[28]=(x&0xff);
wav_header[29]=(x&0xff00)>>8;
wav_header[30]=(x&0xff0000)>>16;
wav_header[31]=(x&0xff000000)>>24;
// BlockAlign
wav_header[32]=rmctx->block_align;//2*rmctx->nb_channels;
// Bits per sample
wav_header[34]=16;
// Subchunk2Size
x=filesize-44;
wav_header[40]=(x&0xff);
wav_header[41]=(x&0xff00)>>8;
wav_header[42]=(x&0xff0000)>>16;
wav_header[43]=(x&0xff000000)>>24;
lseek(fd,0,SEEK_SET);
res = write(fd,wav_header,sizeof(wav_header));
close(fd);
}
int main(int argc, char *argv[])
{
int fd, fd_dec;

View file

@ -44,86 +44,6 @@
/* ASF codec IDs */
#define CODEC_ID_WMAV1 0x160
#define CODEC_ID_WMAV2 0x161
static unsigned char wav_header[44]={
'R','I','F','F',// 0 - ChunkID
0,0,0,0, // 4 - ChunkSize (filesize-8)
'W','A','V','E',// 8 - Format
'f','m','t',' ',// 12 - SubChunkID
16,0,0,0, // 16 - SubChunk1ID // 16 for PCM
1,0, // 20 - AudioFormat (1=Uncompressed)
2,0, // 22 - NumChannels
0,0,0,0, // 24 - SampleRate in Hz
0,0,0,0, // 28 - Byte Rate (SampleRate*NumChannels*(BitsPerSample/8)
4,0, // 32 - BlockAlign (== NumChannels * BitsPerSample/8)
16,0, // 34 - BitsPerSample
'd','a','t','a',// 36 - Subchunk2ID
0,0,0,0 // 40 - Subchunk2Size
};
int open_wav(char* filename) {
int fd,res;
fd=open(filename,O_CREAT|O_WRONLY|O_TRUNC,S_IRUSR|S_IWUSR);
if (fd >= 0) {
res = write(fd,wav_header,sizeof(wav_header));
}
return(fd);
}
void close_wav(int fd, RMContext *rmctx) {
int x,res;
int filesize;
int bytes_per_sample = 2;
int samples_per_frame = rmctx->samples_pf_pc;
int nb_channels = rmctx->nb_channels;
int sample_rate = rmctx->sample_rate;
int nb_frames = rmctx->audio_framesize/rmctx->block_align * rmctx->nb_packets - 2; // first 2 frames have no valid audio; skipped in output
filesize= samples_per_frame*bytes_per_sample*nb_frames +44;
printf("Filesize = %d\n",filesize);
// ChunkSize
x=filesize-8;
wav_header[4]=(x&0xff);
wav_header[5]=(x&0xff00)>>8;
wav_header[6]=(x&0xff0000)>>16;
wav_header[7]=(x&0xff000000)>>24;
// Number of channels
wav_header[22]=nb_channels;
// Samplerate
wav_header[24]=sample_rate&0xff;
wav_header[25]=(sample_rate&0xff00)>>8;
wav_header[26]=(sample_rate&0xff0000)>>16;
wav_header[27]=(sample_rate&0xff000000)>>24;
// ByteRate
x=sample_rate*bytes_per_sample*nb_channels;
wav_header[28]=(x&0xff);
wav_header[29]=(x&0xff00)>>8;
wav_header[30]=(x&0xff0000)>>16;
wav_header[31]=(x&0xff000000)>>24;
// BlockAlign
wav_header[32]=rmctx->block_align;//2*rmctx->nb_channels;
// Bits per sample
wav_header[34]=16;
// Subchunk2Size
x=filesize-44;
wav_header[40]=(x&0xff);
wav_header[41]=(x&0xff00)>>8;
wav_header[42]=(x&0xff0000)>>16;
wav_header[43]=(x&0xff000000)>>24;
lseek(fd,0,SEEK_SET);
res = write(fd,wav_header,sizeof(wav_header));
close(fd);
}
/* Some Rockbox-like functions (these should be implemented in metadata_common.[ch] */
struct cook_extradata {