annotate SndfileWavUtil.cpp @ 16:7e1510b47336 pygar svn.17

[svn r17] added rest of items for core
author punk
date Tue, 27 Apr 2010 22:54:50 -0400
parents
children
rev   line source
punk@16 1 #include <stdlib.h>
punk@16 2 #include <string.h>
punk@16 3 #include <errno.h>
punk@16 4 #include <math.h>
punk@16 5 #include <sndfile.h>
punk@16 6 #include "SndfileWavUtil.h"
punk@16 7
punk@16 8 void
punk@16 9 generate_wav(const char * pcmfilename, const char * samplewavfilename, const char * outputwavfilename)
punk@16 10 {
punk@16 11 char outfilename[2048];
punk@16 12 SNDFILE * outfile ;
punk@16 13 SNDFILE * wavfile ;
punk@16 14 SNDFILE * pcmfile ;
punk@16 15 SF_INFO wavinfo ;
punk@16 16 SF_INFO pcminfo ;
punk@16 17 int buff;
punk@16 18 SF_INSTRUMENT inst ;
punk@16 19
punk@16 20 memset (&wavinfo, 0, sizeof (wavinfo)) ;
punk@16 21
punk@16 22
punk@16 23 wavfile = sf_open(samplewavfilename, SFM_READ, &wavinfo);
punk@16 24
punk@16 25 if (wavfile == NULL){
punk@16 26 printf ("\nERROR : Not able to open wav file named '%s' : %s/\n", samplewavfilename, sf_strerror (NULL)) ;
punk@16 27 exit (1) ;
punk@16 28 } ;
punk@16 29
punk@16 30 printf("WAV format: %x\n", wavinfo.format);
punk@16 31
punk@16 32 if (!((wavinfo.format & SF_FORMAT_PCM_16) && (wavinfo.channels == 1) &&
punk@16 33 (wavinfo.format & SF_FORMAT_WAV))){
punk@16 34 printf("\nERROR : .wav file must be SF_FORMAT_PCM_16 in mono\n");
punk@16 35 }
punk@16 36
punk@16 37 pcminfo.format = SF_FORMAT_RAW | SF_FORMAT_PCM_16;
punk@16 38 pcminfo.samplerate = wavinfo.samplerate;
punk@16 39 pcminfo.channels = wavinfo.channels;
punk@16 40
punk@16 41 pcmfile = sf_open(pcmfilename, SFM_READ, &pcminfo);
punk@16 42
punk@16 43 if (pcmfile == NULL){
punk@16 44 printf ("\nERROR : Not able to open pcm file named '%s' : %s/\n", pcmfilename, sf_strerror (NULL)) ;
punk@16 45 exit (1) ;
punk@16 46 } ;
punk@16 47
punk@16 48
punk@16 49
punk@16 50 outfile = sf_open(outputwavfilename, SFM_WRITE, &wavinfo);
punk@16 51
punk@16 52 memset (&inst, 0, sizeof (inst)) ;
punk@16 53
punk@16 54 for(int i = SF_STR_FIRST; i <= SF_STR_LAST; i = i + 1) {
punk@16 55 const char * str = sf_get_string(wavfile,i);
punk@16 56 if(str != NULL) {
punk@16 57 sf_set_string(outfile,i,str);
punk@16 58 }
punk@16 59 }
punk@16 60
punk@16 61 if (outfile == NULL){
punk@16 62 printf ("\nERROR : Not able to create wav file named '%s' : %s/\n", outfilename, sf_strerror (NULL)) ;
punk@16 63 exit (1) ;
punk@16 64 } ;
punk@16 65
punk@16 66 while(sf_read_int(pcmfile, &buff, 1) == 1){
punk@16 67 if(sf_write_int(outfile, &buff, 1) != 1){
punk@16 68 printf("\nERROR : unable to write to '%s' : %s/\n", outfilename, sf_strerror(NULL));
punk@16 69 }
punk@16 70 }
punk@16 71
punk@16 72 sf_close (wavfile) ;
punk@16 73 sf_close (outfile) ;
punk@16 74 sf_close (pcmfile) ;
punk@16 75
punk@16 76 }
punk@16 77
punk@16 78
punk@16 79 void
punk@16 80 generate_pcm (const char * wavfilename, const char * pcmfilename)
punk@16 81 {
punk@16 82 SNDFILE * wavfile ;
punk@16 83 SNDFILE * pcmfile ;
punk@16 84 SF_INFO wavinfo ;
punk@16 85 SF_INFO pcminfo ;
punk@16 86 int buff;
punk@16 87
punk@16 88 memset (&wavinfo, 0, sizeof (wavinfo)) ;
punk@16 89 memset (&pcminfo, 0, sizeof (pcminfo)) ;
punk@16 90
punk@16 91 wavfile = sf_open (wavfilename, SFM_READ, &wavinfo) ;
punk@16 92
punk@16 93 if (wavfile == NULL){
punk@16 94 printf ("\nERROR : Not able to open wav file named '%s' : %s/\n", wavfilename, sf_strerror (NULL)) ;
punk@16 95 exit (1) ;
punk@16 96 } ;
punk@16 97
punk@16 98 pcminfo.format = SF_FORMAT_RAW | SF_FORMAT_PCM_16;
punk@16 99 pcminfo.samplerate = wavinfo.samplerate;
punk@16 100 pcminfo.channels = wavinfo.channels;
punk@16 101
punk@16 102 if ((!wavinfo.format & SF_FORMAT_PCM_16) || (!wavinfo.channels == 1)){
punk@16 103 printf("\nERROR : .wav file must be SF_FORMAT_PCM_16 and mono\n");
punk@16 104 }
punk@16 105
punk@16 106 pcmfile = sf_open (pcmfilename, SFM_WRITE, &pcminfo) ;
punk@16 107
punk@16 108 if (pcmfile == NULL){
punk@16 109 printf ("\nERROR : Not able to create pcm file named '%s' : %s/\n", pcmfilename, sf_strerror (NULL)) ;
punk@16 110 exit (1) ;
punk@16 111 } ;
punk@16 112
punk@16 113 while(sf_read_int(wavfile, &buff, 1) == 1){
punk@16 114 if(sf_write_int(pcmfile, &buff, 1) != 1){
punk@16 115 printf("\nERROR : unable to write to '%s' : %s/\n", pcmfilename, sf_strerror(NULL));
punk@16 116 }
punk@16 117 }
punk@16 118
punk@16 119 sf_close (wavfile) ;
punk@16 120 sf_close (pcmfile) ;
punk@16 121 }
punk@16 122
punk@16 123
punk@16 124
punk@16 125