LINUX.ORG.RU

Да помогите вы мне с этим wav-player'oм!!!


0

0

Хочу написать wav-player. при отправке побайтно всё медленно, а мне тут сказали, что надо отключить буферизацию, как? Или к какому файлу применять fflush()? Вообще, если у вас есть чего-нибудь подобное, (исходник) накатайте!

у меня так получилось: #include <stdio.h> #include <cstdlib> char *c; long l; FILE *wav; FILE *dsp; int main(int argc, char *argv[]) { printf("\nStarting WAVE player...\n"); printf("\nChecking argc...\n"); if (argc<2) { printf("\nwavplay [filename]\n"); exit(1); } printf("\nOpening wav file\n"); wav=fopen(argv[1], "r"); if (wav==NULL) { printf("\nCan\'t open %s\n", argv[1]); exit(2); } printf("\nOpening /dev/dsp...\n"); dsp=fopen("/dev/dsp", "w"); if (dsp==NULL) { printf("\nCan\'t open /dev/dsp\n"); exit(3); } printf("\nStarting main loop...\n"); c=(char *)malloc((size_t)1024*sizeof(char)); /*c1=(char *)malloc((size_t)1024*sizeof(char));*/ while(feof(wav)==0) { fgets(c,1024,wav); fprintf(dsp,c); fflush( [???] ); } printf("\nClosing file %s...\n", argv[1]); fclose(wav); printf("\nClosing /dev/dsp...\n\n"); fclose(dsp); return 0; }

anonymous

Ответ на: комментарий от anonymous


Кусок реальной проги. Смотри. Меняй формат и скорость в соответствии с заголовком wav-файла

//------------SKIPPED---------------------

int main(){
FILE* f=fopen("./out_file","r");
if(f == NULL){
printf(strerror(errno));
exit(1);
};
FILE* out = fopen("out.wav","w");

int dd = open("/dev/audio",O_WRONLY);

if(dd == -1){
printf(strerror(errno));
exit(1);
};

int format = AFMT_S16_LE;
int rate = 8000;
int channels = 1;

ioctl(dd, SNDCTL_DSP_SETFMT,&format);
ioctl(dd, SNDCTL_DSP_SPEED,&rate);
ioctl(dd, SNDCTL_DSP_CHANNELS, &channels);

fseek(f,1,SEEK_CUR);
fpos_t* pos;
while(!feof(f)){
unsigned char in;
short int buffer[1024];

int i=0;

for(i;i<1024;i++){
in = fgetc(f);
buffer[i] = alaw2linear(in);
fputc(buffer[i],out);
// dtmf_decode(in);
if(fseek(f, 31 , SEEK_CUR) == -1){
i = 1024;
};
};

write(dd, buffer, 1024*sizeof(short int));
};
fclose(out);
};

SnakePAN
()

> у меня так получилось: #include <stdio.h> #include <cstdlib> char *c;
> long l; FILE *wav; FILE *dsp; int main(int argc, char *argv[]) { 
> printf("\nStarting WAVE player...\n"); printf("\nChecking 
> argc...\n"); if (argc<2) { printf("\nwavplay [filename]\n"); exit(1);
> } printf("\nOpening wav file\n"); wav=fopen(argv[1], "r"); if 
> (wav==NULL) { printf("\nCan\'t open %s\n", argv[1]); exit(2); } 
> printf("\nOpening /dev/dsp...\n"); dsp=fopen("/dev/dsp", "w"); if 
> (dsp==NULL) { printf("\nCan\'t open /dev/dsp\n"); exit(3); } 
> printf("\nStarting main loop...\n"); c=(char 
> *)malloc((size_t)1024*sizeof(char)); /*c1=(char 
> *)malloc((size_t)1024*sizeof(char));*/ while(feof(wav)==0) { 
> fgets(c,1024,wav); fprintf(dsp,c); fflush( [???] ); } 
> printf("\nClosing file %s...\n", argv[1]); fclose(wav); 
> printf("\nClosing /dev/dsp...\n\n"); fclose(dsp); return 0; } 
Ага, вот после такого особенно хочется помогать :))

murla
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.