{ Отзывы присылать на склад нитроманита nitromanit@mail.ru

 Пример действующей программы использующей цифровой вывод
 звуковой волны на SoundBlaster с использованием моей утилиты SB.TPU

 Данная программа успешно прослушивает аудиофайлы игры DUNE II
 и обычние *.WAV просто их нужно переименовать в *.VOC(хотя
 мой *.VOC не соответствует принятому стандарту а просто содержит
 поток звуковой волны без описания)
}
 

uses crt,sb,keyboard,profiler;

type TSoundBuf=array [0..65000] of byte;

var voice1,voice2,channel,key,valume,i,count,frec,Port,IRQ,DMA,SBType,d:word;
    rvalume,lvalume,linervalume,linelvalume,fmrvalume,fmlvalume,CDvalume,
    dacrvalume,daclvalume,micvalume,recsourse:byte;
    stereomode:boolean;
    code:integer;
    f:file;
    fname:string;
    buf1,buf2:^TSoundBuf;

procedure Playing;
begin
while (key=KEYOFF) and (i<count) do begin
    blockread(f,buf2^,65000,d);
    writeln('i= ',i,' Long= ',i*65);
    key:=inkey;
    Play(frec,buf2^,65000);
    inc(i);
    end;
end;

procedure Playing2;
begin
SBMode:=AsyncPlay;
InitDMA;
TransferDone:=1;
while (key=KEYOFF) and (i<count) do begin
    blockread(f,buf1^,60000,d);
    writeln('i= ',i,' Long= ',i*60);
    key:=inkey;
    repeat
    until TransferDone=1;
    move(Buf1^,Buf2^,60000);
    Play(frec,buf2^,60000);
    inc(i);
    end;
repeat
until TransferDone=1;
DeInitDMA;
end;

begin
if paramcount=0 then begin
   writeln('User:sbplay.exe [filename.voc] -for manual play');
   writeln('User:sbplay.exe [filename.voc] [sample rate]-for autoplay with rate');
   writeln('Rate:4000 kHz ... 44100 kHz');
   halt;end;
fname:=paramstr(1);
if GetBlaster(Port,IRQ,DMA,SBType)<>0 then begin
   writeln('Error:System variable "Blaster" not found');
   halt;end;
if DetectBlaster<>0 then begin
   writeln('Error:Sound card not detected');
   halt;end;
writeln('Player .voc');
writeln('Sound Card is '+GetSBName(SBType)+' Port:',Port,' IRQ:',IRQ,' DMA channel:',DMA);
if paramcount=2 then begin
   val(paramstr(2),frec,code);
   if (code=0) and (frec<=44100) then begin
      dacrvalume:=15;
      rvalume:=15;
      end;
   end;
if paramcount=1 then begin
   writeln('1-4000 kHz');
   writeln('2-11000 kHz');
   writeln('3-15000 kHz');
   writeln('4-22000 kHz');
   writeln('5-44000 kHz');
   writeln('6-Quit');
   read(key);
   case key of
     1:frec:=4000;
     2:frec:=11000;
     3:frec:=15000;
     4:frec:=22000;
     5:frec:=44000;
   else halt;
   end;
   writeln('Input valume for DAC output(1..14):');
   read(dacrvalume);
   writeln('Input main valume for output(1..14):');
   read(rvalume);
end;
getmem(buf1,sizeof(TSoundBuf));
getmem(buf2,sizeof(TSoundBuf));
assign(f,fname);{$i-}
reset(f,1);
i:=ioresult;
if i<>0 then halt;

clrscr;
InitMixer;
SetMainValume(rvalume,rvalume);
SetDACValume(dacrvalume,dacrvalume);
{SetLineValume(2,2);
SetMicValume(2);}
SetMono;
{SetStereo;}
{SetRecSourse(RecLine);}
{SetRecSourse(RecMic);}

i:=1;
count:=(filesize(f) div 65000)+1;
key:=inkey;
writeln('Play ',fname,' audio file...');
{while (key=KEYOFF) and (i<count) do begin
    blockread(f,buf2^,65000,key);
    writeln('i= ',i,' Long= ',i*65);
    key:=inkey;
    Play(frec,buf2^,65000);
    inc(i);
    end;}
Playing;
close(f);
freemem(buf2,sizeof(TSoundBuf));
freemem(buf1,sizeof(TSoundBuf));
end.