Hi Ziga.

On �et, 10 jun 1999, Ziga Mahkovec wrote:

> > Rad bi napisal programcek, ki bi mi pocel sledece:
> > 1. prebral 2 short integerja.
> > 2. vsak short int pomnozil s konstanto in delil s 100
> > 3. izpisal nova short integerja.
> > 
> 
> Procesorski cas verjetno zre pogosto preverjanje feof(stdin) --- zato
> namesto getchar() raje uporabi buffer in s fread() beri po vec znakov
> naenkrat. Prilozil sem kratek programcek, ki to pocne (upam da sem prav
> razumel, kaj naj bi tvoj program pocel). In ne pozabi prevajat z -O3 :)

#include <stdlib.h>
#include <stdio.h>
#define BUFFER_SIZE 10000

int main()
{
 unsigned short *buffer;
 int i, num_read;
 double mult=5.0/100;
 
 buffer=(unsigned short*)malloc(sizeof(unsigned short)*BUFFER_SIZE);
 while (!feof(stdin)) {
         num_read=fread(buffer, sizeof(unsigned short), BUFFER_SIZE, stdin);
         for (i=0; i<num_read; i++)
                 buffer[i]*=mult;
         fwrite(buffer, sizeof(unsigned short), num_read, stdout);
 }
 return (0);
}

Ce sem prav razumel si naredil mixer :). Ok ni mixer temvec volume control.

Zgornji program ti bo morda na koncu spustil za povprecno pol bufferja glasbe
(odvisno ce bo dobil eof ali ne). Prav tako ti lahko povzroci delay oz. kratke
pavze. Oglej si ukaz "select" ta ti omogoca "non-polling" dostop do file
descriptorjev. Sicer bi pa zgornji program najbrz delal delalo ce bi uporabil
majhen buffer.

--
best regards,
Rok Papez.

Reply via email to