home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 42 / af042a.adf / Sample_Bank_Maker.AMOS / Sample_Bank_Maker.amosSourceCode
AMOS Source Code  |  1992-02-21  |  8KB  |  311 lines

  1. '                            AMOS Sample Bank Maker  
  2. '
  3. '                      Original routine by Francois Lionet     
  4. '                         AMOS version by P.J.Hickman  
  5. '
  6. '                       ï¿½ Copyright 1990 Mandarin Software 
  7. '
  8. ' You may increase the storage capacity of this program by changing
  9. ' the size of the text buffer
  10. Set Buffer 40
  11. Default 
  12. Close Editor 
  13. Dim S$(20),F$(20),F(20),TYPE(20)
  14. Dim LINE$(5),BUTTON$(3)
  15. NSAM=0 : L0ADED_SAMPLES=False
  16. Global S$(),F$(),F(),LINE$(),BUTTON$(),NSAM,TYPE(),L0ADED_SAMPLES
  17. SET_UP_SCREEN
  18. On Menu Proc MENU_1,MENU_2
  19. Repeat 
  20.    On Menu On 
  21. Until False
  22. Procedure MAKE_AMOS_BANK
  23.    On Error Goto FATEL_ERROR1
  24.    Cls 
  25.    F$=Fsel$("*.*","Samples.Abk","Please pick a save name.....")
  26.    If F$<>""
  27.       Bell 
  28.       Centre At(,7)+Border$("Please wait while I convert the samples.....",1)
  29.       Print At(36,10);Border$("SAMPLE:    ",1)
  30.       TL=2 : TN=0
  31.       For N=1 To NSAM
  32.          If Len(S$(N))<>0
  33.             Inc TN
  34.             TL=TL+Len(S$(N))+4+14
  35.          End If 
  36.       Next 
  37.       Erase 10
  38.       Reserve As Work 10,TL+12+8
  39.       AD=Start(10)
  40.       A$="AmBk"
  41.       For X=1 To Len(A$)
  42.          Poke AD+X-1,Asc(Mid$(A$,X,1))
  43.       Next X
  44.       AD=AD+4
  45.       Doke AD,5
  46.       AD=AD+2
  47.       Doke AD,0
  48.       AD=AD+2
  49.       Loke AD,(TL+8) or $80000000
  50.       AD=AD+4
  51.       A$="Samples "
  52.       For X=1 To Len(A$)
  53.          Poke AD+X-1,Asc(Mid$(A$,X,1))
  54.       Next X
  55.       AD=AD+8
  56.       ACALC=AD
  57.       Doke AD,TN
  58.       AD=AD+2
  59.       AOFF=AD
  60.       APOKE=AOFF+TN*4
  61.       For N=1 To NSAM
  62.          If TYPE(N)=1
  63.             WEIGHTING=0
  64.          Else 
  65.             WEIGHTING=-128
  66.          End If 
  67.          If S$(N)<>""
  68.             Print At(44,10);N;
  69.             Loke AOFF,APOKE-ACALC
  70.             AOFF=AOFF+4
  71.             A$=Left$(F$(N),8)
  72.             AD=APOKE
  73.             For X=1 To Len(A$)
  74.                Poke AD+X-1,Asc(Mid$(A$,X,1))
  75.             Next X
  76.             FREQ=F(N)*1000
  77.             Doke APOKE+8,FREQ
  78.             Loke APOKE+10,Len(S$(N))
  79.             APOKE=APOKE+14
  80.             A=Varptr(S$(N))
  81.             PP=Varptr(P)
  82.             For X=0 To Len(S$(N))-1
  83.                P=Peek(A+X)+WEIGHTING
  84.                Poke APOKE+X,Peek(PP+3)
  85.             Next X
  86.             APOKE=APOKE+Len(S$(N))
  87.             If Btst(0,APOKE)
  88.                Inc APOKE
  89.             End If 
  90.          End If 
  91.       Next N
  92.       Cls 
  93.       Bell 
  94.       If Right$(Upper$(F$),4)<>".ABK"
  95.          F$=F$+".Abk"
  96.       End If 
  97.       Centre At(,8)+Border$("Saving new sample bank.....",1)
  98.       Bsave F$,Start(10) To Start(10)+TL+12+8
  99.    End If 
  100.    RECOVER_1:
  101.    DISPLAY_SAMS
  102.    Pop Proc
  103.    FATEL_ERROR1:
  104.    For LOP=1 To 5
  105.       Bell 30-LOP
  106.       Wait 3
  107.    Next LOP
  108.    If Errn=26
  109.       Erase 10
  110.       LINE$(0)="I'm out of Memory!"
  111.    Else 
  112.       LINE$(0)="Woops, disc error!"
  113.    End If 
  114.    BUTTON$(0)="Never mind."
  115.    ALERT[21,7,0,1,1,1]
  116.    Resume RECOVER_1
  117. End Proc
  118. Procedure L0AD_SAMPLE
  119.    On Error Goto FATEL_ERROR2
  120.    Inc NSAM
  121.    F$(NSAM)=Fsel$("*.*","","Please choose a sample to load")
  122.    If Not Exist(F$(NSAM))
  123.       For LOP=1 To 5
  124.          Bell 30-LOP
  125.          Wait 3
  126.       Next LOP
  127.       LINE$(0)="I cannot find that"
  128.       LINE$(1)="file on this disc!"
  129.       BUTTON$(0)="Woops......."
  130.       ALERT[21,7,0,1,1,2]
  131.       F$(NSAM)=""
  132.    Else 
  133.       Open In 1,F$(NSAM)
  134.       If Lof(1)<Free
  135.          S$(NSAM)=Input$(1,Lof(1))
  136.          Add MEM,-Lof(1)
  137.          Close 
  138.          If Left$(S$(NSAM),3)="JON"
  139.             F(NSAM)=Peek(Varptr(S$(NSAM))+3)
  140.             S$(NSAM)=Mid$(S$(NSAM),4)
  141.             TYPE(NSAM)=2
  142.          Else 
  143.             Cls 
  144.             Bell 
  145.             Clear Key 
  146.             Centre At(,8)+Border$("This Sample is in Amiga RAW format.",1)
  147.             Input At(0,12)+"Please enter sampling frequency (KHz):";F(NSAM)
  148.             If F(NSAM)<1 or F(NSAM)>32
  149.                F(NSAM)=15
  150.             End If 
  151.             TYPE(NSAM)=1
  152.             Cls 
  153.          End If 
  154.          If(1 and Len(S$(NSAM)))
  155.             S$(NSAM)=S$(NSAM)+Right$(S$(NSAM),1)
  156.          End If 
  157.          F$(NSAM)=Right$(F$(NSAM),Len(F$(NSAM))-4)
  158.          DISPLAY_SAMS
  159.          L0ADED_SAMPLES=True
  160.       Else 
  161.          LINE$(0)="Sorry, you do not have enough free"
  162.          LINE$(1)="    memory to load this sample.   "
  163.          BUTTON$(0)="Memory expansion time"
  164.          ALERT[40,7,0,1,1,2]
  165.       End If 
  166.    End If 
  167.    RECOVER_2:
  168.    Close 
  169.    Pop Proc
  170.    FATEL_ERROR2:
  171.    If FILE$<>""
  172.       For LOP=1 To 5
  173.          Bell 30-LOP
  174.          Wait 3
  175.       Next LOP
  176.       LINE$(0)="Woops, disc error!"
  177.       BUTTON$(0)="Never mind."
  178.       ALERT[21,7,0,1,1,1]
  179.       Dec NSAM
  180.       FILE$=""
  181.    End If 
  182.    Resume RECOVER_2
  183. End Proc
  184. Procedure DISPLAY_SAMS
  185.    Cls 
  186.    Curs Off 
  187.    Inverse On 
  188.    Print At(0,0);"| Sample |       Sample name      |   Length   |  Frequency  |  Sample Type  |";
  189.    Inverse Off 
  190.    Under On 
  191.    For LOP=1 To NSAM
  192.       Print At(0,LOP);"|        |                        |            |             |               |";
  193.       Print At(3,LOP);LOP;At(11,LOP);Left$(F$(LOP),21);At(36,LOP); Using "#######";Len(S$(LOP))
  194.       Print At(52,LOP); Using "##";F(LOP);"Khz"
  195.       If TYPE(LOP)=1
  196.          Print At(68,LOP);"RAW";
  197.       Else 
  198.          Print At(63,LOP);"STOS  MAESTRO";
  199.       End If 
  200.       If Inkey$<>""
  201.          Wait Key 
  202.       End If 
  203.    Next LOP
  204.    Under Off 
  205.    Print 
  206.    Inverse On 
  207.    Centre "Free memory:"+Str$(Free)
  208.    Inverse Off 
  209. End Proc
  210. Procedure SET_UP_SCREEN
  211.    Screen Open 1,640,200,2,Hires
  212.    Colour 1,$FFF : Flash Off : Curs Off : Cls 0
  213.    Paper 0
  214.    Pen 1
  215.    Menu$(1)=" AMOS  "
  216.    Menu$(1,1)=" About "
  217.    Menu$(1,2)="=======" : Menu Inactive(1,2)
  218.    Menu$(1,3)=" Quit  "
  219.    Menu$(2)=" Edit "
  220.    Menu$(2,1)=" Load sample.      "
  221.    Menu$(2,2)="===================" : Menu Inactive(2,2)
  222.    Menu$(2,3)=" Save sample bank. "
  223.    Menu$(2,4)="===================" : Menu Inactive(2,4)
  224.    Menu$(2,5)=" Erase all samples."
  225.    DEF_SETTING
  226.    Reserve Zone 1
  227.    Menu On 
  228. End Proc
  229. Procedure DEF_SETTING
  230.    Cls 
  231.    For LOP=1 To NSAM
  232.       S$(LOP)=""
  233.       F$(LOP)=""
  234.       F(LOP)=0
  235.       TYPE(LOP)=0
  236.    Next LOP
  237.    L0ADED_SAMPLES=False
  238.    NSAM=0
  239.    Centre At(,7)+"AMOS SAMPLE BANK MAKER"
  240.    Centre At(,9)+"By P.J.Hickman"
  241.    Inverse On 
  242.    Centre At(,12)+"Free memory:"+Str$(Free)
  243.    Inverse Off 
  244.    Centre At(,16)+Border$("Click right mouse button to display menu",1)
  245.    Repeat : Until Mouse Click
  246. End Proc
  247. Procedure ALERT[W,H,BACK_COL,LINE_COL,NB,NL]
  248.    Menu Off 
  249.    TEMP=0
  250.    W=W*8
  251.    H=H*8
  252.    X=(Screen Width/2)-W/2
  253.    Y=4
  254.    Get Block 241,0,Y-2,Screen Width,H+6
  255.    Ink BACK_COL
  256.    Bar X,Y-2 To X+W,Y+H
  257.    Ink LINE_COL
  258.    Box X+1,Y-2 To X+W-1,Y+H-1
  259.    S=W/8/(NB+1)+1
  260.    Paper BACK_COL
  261.    Pen LINE_COL
  262.    For LOP=0 To NL
  263.       Locate 0,Y Text(Y)+1+LOP
  264.       Centre LINE$(LOP)
  265.    Next LOP
  266.    TEMP=0
  267.    While TEMP<>NB
  268.       Locate X Text(X)+S/2+S*TEMP,Y Text(Y+H)-2
  269.       Print Border$(Zone$(BUTTON$(TEMP),TEMP+1),2);
  270.       Inc TEMP
  271.    Wend 
  272.    TEMP=0
  273.    Repeat 
  274.       Repeat : Until Mouse Click and Mouse Key=1
  275.       TEMP=Mouse Zone
  276.    Until TEMP>0
  277.    Put Block 241,0,Y-2
  278.    Del Block 241
  279.    Add TEMP,-96
  280.    For LOP=0 To NB
  281.       BUTTON$(LOP)=""
  282.    Next LOP
  283.    For LOP=0 To NL
  284.       LINE$(LOP)=""
  285.    Next LOP
  286.    Menu On 
  287. End Proc[TEMP]
  288. Procedure MENU_1
  289.    Shared LINE$(),BUTTON$()
  290.    If Choice(2)=1
  291.       For LOP=1 To 10
  292.          Bell 50+LOP
  293.          Wait 3
  294.       Next LOP
  295.       LINE$(0)="Sample Bank Maker"
  296.       LINE$(1)="~~~~~~~~~~~~~~~~~"
  297.       LINE$(2)=""
  298.       LINE$(3)=" By P.J.Hickman"
  299.       BUTTON$(0)="Have Fun!!!"
  300.       ALERT[22,9,0,1,1,4]
  301.    End If 
  302.    If Choice(2)=3
  303.       Default 
  304.       End 
  305.    End If 
  306. End Proc
  307. Procedure MENU_2
  308.    If Choice(2)=1 Then L0AD_SAMPLE
  309.    If L0ADED_SAMPLES and Choice(2)=3 Then MAKE_AMOS_BANK
  310.    If Choice(2)=5 Then DEF_SETTING
  311. End Proc