Prehraje zvuk vo formáte wav na speakery PC

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategória: KMP (Klub mladých programátorov)
speaker.pngAutor: Aleš Kucik
web: www.webpark.cz/prog-pascal

Program: Speaker.pasMouse.pasTextscr.pas
Súbor exe: Speaker.exe
Potrebné: A.wavB.wavMouse.tpuTextscr.tpu

Tento program spouštějte z DOSu (WINxx restartujte do DOSu)! Přehraje všechny soubory, ale hudbu uslyšíte jen u 8bit zvukových souborů bez komprese a musí být nahrány mono. Předem upozorňuji, že na některých SPEAKERECH zvuk asi nepůjde přehrát vůbec. Pokud si nevíte rady s nastavením "OVERSAMPLE", "MUTE" a "FREQUENCE" přečtěte si prosím příslušnou kapitolu v GDM3 (sekce překlady) a nebo je zkoušejte.

mouse.tpu, mouse.pas - použitá jednotka na ovládání myši. textscr.tpu, textscr.pas - jednotky pro ovládání výstupu na obrazovku.

Aby jste měli na čem testovat, tady jsou nějaké soubory:

a.wav - frekvence 8000Hz, 8bit (když pustíte zvuk na této frekvenci, je slyšet nepříjemné pištění - proto nastavte frekvenci na 32000Hz a oversample na 8 a mute vyzkoušejte mute 2,3,4 uslyšíte, co bude asi nejlepší.

b.wav - tady je druhý soubor tentokrát na 16000Hz (typ: frekvenci nastav na 16000, mute na 2 a oversample na 1) Pokud si budete chtít vytvořit nějaký vlastní soubory: Spusťte "Záznam zvuku" (od Microsoftu) a nějaký WAV uložte s libovolnou frekvencí, musíte, ale nastavit formát:PCM, 8bit mono.
{ MOUSE.PAS                                Copyright (c) Ales Kucik }
{ Unit pro praci s mysi.                                            }
{                                                                   }
{ Datum:29.11.2002                             http://www.trsek.com }
 
unit mouse;
interface
var ExMouse:boolean;
 
procedure CursorEnable;
procedure CursorDisable;
procedure ReadState(var button,horiz,vert:word);
procedure SetCo_or(horiz,vert:word);
procedure GetPress(button:word; var state,number,horiz,vert:word);
procedure GetRelease(button:word; var state,number,horiz,vert:word);
procedure HorizRange(maximum,minimum:word);
procedure VertRange(maximum,minimum:word);
procedure SensiMouse(horiz,vert:word);
procedure RealState(button:word; var state,number,horiz,vert:word);
function ExistMouse:boolean;
 
 
implementation
procedure CursorEnable; assembler;
asm
   push   ax
   mov    ax, $1
   int    $33
   pop    ax
end;
 
procedure CursorDisable; assembler;
asm
   push   ax
   mov    ax, $2
   int    $33
   pop    ax
end;
 
procedure ReadState(var button,horiz,vert:word);
var b,c,d:word;
begin
  asm
     mov    ax, $3
     int    $33
     mov    b, bx
     mov    c, cx
     mov    d, dx
  end;
  button:=b;
  horiz:=c;
  vert:=d;
end;
 
procedure SetCo_or(horiz,vert:word); assembler;
asm
   mov    ax, $4
   mov    cx, horiz
   mov    dx, vert
   int    $33
end;
 
procedure GetPress(button:word; var state,number,horiz,vert:word);
var a,b,c,d:word;
begin
  asm
     mov  ax, $5
     mov  bx, button
     int  $33
     mov  a, ax
     mov  b, bx
     mov  c, cx
     mov  d, dx
  end;
  state:=a;
  number:=b;
  horiz:=c;
  vert:=d;
end;
 
procedure GetRelease(button:word; var state,number,horiz,vert:word);
var a,b,c,d:word;
begin
  asm
     mov  ax, $6
     mov  bx, button
     int  $33
     mov  a, ax
     mov  b, bx
     mov  c, cx
     mov  d, dx
  end;
  state:=a;
  number:=b;
  horiz:=c;
  vert:=d;
end;
 
procedure HorizRange(maximum,minimum:word); assembler;
asm
   mov   ax, $7
   mov   cx, minimum
   mov   dx, maximum
   int   $33
end;
 
procedure VertRange(maximum,minimum:word); assembler;
asm
   mov   ax, $8
   mov   cx, minimum
   mov   dx, maximum
   int   $33
end;
 
procedure SensiMouse(horiz,vert:word); assembler;
asm
   mov   ax, $F
   mov   cx, horiz
   mov   dx, vert
   int   $33
end;
 
procedure RealState;
var a,b,c,d:word;
begin
  asm
     mov  ax, $5
     mov  bx, button
     int  $33
     mov  a, ax
     mov  b, bx
     mov  c, cx
     mov  d, dx
  end;
  state:=a;
  number:=b;
  horiz:=(c+8)div 8;
  vert:=(d+8)div 8;
end;
 
 
function ExistMouse:boolean;
var a:word;
begin
  asm
     mov   ax, $0
     int   $33
     mov   a, ax
  end;
  if a=0 then ExistMouse:=false
  else ExistMouse:=true;
end;
 
begin
  ExMouse:=ExistMouse;
end.