• Program pro přehrávaní modulů pomocí MIDASe •
uses MIDAS, Errors, mGlobals, mMem, SDevice, Dos, Crt,
MPlayer, DMA, DSM, S3M, MODp, MTM, mFile, mConfig;
const modulePlayers : array[0..(NUMMPLAYERS-1)] of
PModulePlayer = (@mpS3M, @mpMOD, @mpMTM);
var SD : PSoundDevice;
MP : PModulePlayer;
module : Pointer;
filename :Array[0..256] of Char;
masterVol:Byte;
{ Konvertí ASCIIZ řetězec na pascalskej String. }
Procedure toASCIIZ(dest:PChar;str:String);
var spos,slen,i:Integer;
begin
spos:=0;slen:=ord(str[0]);
while spos<slen do
begin dest[spos]:=str[spos+1];Inc(spos) end;
dest[spos] := chr(0);
end;
{ Naloadí z disku do paměti, zjistí formát, aktivuje požadovaný
player a začne přehrávat modul zadaný jako parametr a vrátí na
něj ukazatel, je nutné nejprve inicializovat MIDAS ! }
function PlayModule(ModuleName : PathStr) : PmpModule;
var header:Pointer;
f:fileHandle;
module:PmpModule;
error,mpNum,recognized:Integer;
begin
toASCIIZ(filename,modulename);
error := memAlloc(MPHDRSIZE, @header);
if error <> OK then midasError(error);
error := fileOpen(fileName, fileOpenRead, @f);
if error <> OK then midasError(error);
error := fileRead(f, header, MPHDRSIZE);
if error <> OK then midasError(error);
error := fileClose(f);
if error <> OK then midasError(error);
mpNum := 0;MP := NIL;
while (mpNum < NUMMPLAYERS) and (MP = NIL) do
begin
error := modulePlayers[mpNum]^.Identify(header, @recognized);
if error <> OK then midasError(error);
if recognized = 1 then MP := modulePlayers[mpNum];
mpNum := mpNum + 1;
end;
error := memFree(header);
if error <> OK then midasError(error);
if MP = NIL then
begin
midasClose;
errErrorExit('Error: Unknown module format')
end;
module := midasLoadModule(fileName, MP, NIL);
midasPlayModule(module, 0);
PlayModule := module;
MP := midasMP;
end;
{ Zastaví přehrávání a uvolní z paměti aktivní modulu
jehož ukazatel je v proměnné module. }
procedure StopModule;
begin
if module<>nil then
begin
midasStopModule(module);
midasFreeModule(module);
end;
end;
{ Aktivuje MIDASe pomocí parametrů uložených v souboru CFGFile. }
procedure ActiveMidas(CFGFile:PathStr);
begin
if FSearch(CFGFile,'')='' then
begin
WriteLn('Configuration file not found - run MSETUP.EXE');
Halt;
end;
toASCIIZ(filename,cfgfile);
midasSetDefaults;
midasLoadConfig(Filename);
midasInit;
SD:=midasSD;
end;
{ Vypne přehrávaný modul a deaktivuje MIDASe. }
procedure DeActiveMidas;
begin
StopModule;
midasClose;
end;
{ Hlavní program }
var ch:Char;
Begin
masterVol:=64;
ActiveMidas('midas.cfg');
PlayModule(ParamStr(1));
WriteLn(' Playing module: ',ParamStr(1));
WriteLn(' Use (+) and (-) to inc. or dec. volume');
WriteLn(' Esc to stop ...');
repeat
if KeyPressed then
begin
ch:=ReadKey;
if ch='-' then Dec(masterVol);
if ch='+' then Inc(masterVol);
if ch in ['+','-'] then
begin
SD^.SetMasterVolume(masterVol);
GotoXY(1,WhereY);
Write('Volume=',masterVol:3);
end;
end;
until ch=#27;
DeActiveMidas;
End.
Tento program nahraje požadovaný modul, který zadáte jako
parametr v příkazové řádce a ihned jej začne přehrávat přes
navolenou zvukovku, jejíž parametry zadáte v setupovacím programu
(např.: msetup.exe u Výhně). V průběhu přehrávání můžete měnit
hlasitost výstupu pomocí kláves "+" a "-" a klávesou Esc ukončit
přehrávání. Na tomto místě je třeba připomenout základní paměťové
požadavky MIDASe. Pokud nahráváte modul do velikosti cca 300kB,neměl
by být s pamětí problém, ale takových 500kB se už do konvenční RAMky
holt nevejde, takže je potřeba EMS, jestli už máte zkušenosti s
přehráváním modulů ve Výhni, kde se EMS využívá i k uložení
rozpakovaných článků, pak se vám budou určitě hodit pro práci s
MIDASem. Pro GUSe toto pravidlo samozřejmě neplatí. Zde je
rozhodující samotná RAM GUSe, takže pokud máte 1MB GUSe (vřele
doporučuji), neměl by být v podstatě s pamětí problém, MIDAS si
naloadí akorát PaternData, ty se do konvenční paměti určitě vlezou a
zbytek nacpe do GUSe. Ke kompilaci musíte mít samozřejmě na disku
MIDASe, který určitě uploadnu na Infimu, ale nejspíše do knihovny
DEMOS, jelikož nevím, co je s LibOpem PASCALu, takže to bude
jistější. Předpokládám, že když si výše položený program řádně
prostudujete, nebude problém si MIDASe zabudovat do svých vlastních
výtvorů. Pokud je cokoli někomu nejasné nebo by se chtěl zeptat na
nějaké detaily ohledně MIDASe, nechť klidně píše na moje ID případně
e-mail adresu.
výheň