AmiBlitz³
Protracker Module Header - Druckversion

+- AmiBlitz³ (https://www.amiblitz.de/community)
+-- Forum: Blitzbasic2 (https://www.amiblitz.de/community/forum-5.html)
+--- Forum: Snippets & Libraries (https://www.amiblitz.de/community/forum-11.html)
+--- Thema: Protracker Module Header (/thread-221.html)



Protracker Module Header - hackball - 18.01.2021

Ich hatte mal ein altes Tool gemacht, mit dem man ganze Verzeichnisse nach MODs absuchen konnte, rekursiv.

Da letztens im EAB Forum die Frage aufkam, wie man an die Samples kommt, hier mal als Erstes zum Einstieg die Aufdröselung der Samples, noch ohne die eigentlichen Daten, die sind am Ende nach den Patterns.
Hoffe, das hilft jemandem:

Code:
Dim mtyp$(5)
mtyp$(1)="ProTr"
mtyp$(2)="SoundTr"
mtyp$(3)="NoiseTr"
mtyp$(4)=""
mtyp$(5)="?(PPack)"

DEFTYPE.l

#typoffset=$438    ;=1080

c$=Chr$(10)

Function.w checkmod{f$}

result.b=0:real$=""
fhand.l=Open_(f$,1005)

If fhand>0
 buf.l=AllocMem_($500,#MEMF_PUBLIC|#MEMF_CLEAR)
 If buf>0
   Read_ fhand,buf,$500
   Close_ fhand

   If Mkl$(Peek.l(buf))="PP20"

     result=5

   Else
     md$=Mkl$(Peek.l(buf+#typoffset))

     Select md$

       Case"M.K.":result=1

         real$=Left$(Peek$(buf),20)

         NPrint "-------------- ",f$," --------------"
         NPrint "name: ",real$

         Gosub getsamp

       Case"FLT4":result=2
       Case"M&K!":result=3

     End Select
   EndIf

   FreeMem_ buf,$500
 Else
   result=0:Close_ fhand:Goto ex
 EndIf
Else
 result=0;:Goto ex
EndIf

ex:Function Return result
getsamp:
 NPrint"Samples:"
 ssize.w=30 ;sample info block size
 snums.w=30 ;

 spos.w  =20  ;start sib`s

 For n.w=0 To snums  ;#=31

   dum$=PeekToStr(buf+spos,0,22)

   dsz.w=Peek.w(buf+spos+22) *2   ;size in bytes

   Format"#0":Print Str$(n),": "
   Format""
   If dum$<>""
     NPrint LSet$(dum$,23)," > ",Str$(dsz)
   Else
     NPrint LSet$("<noname>",23)," > ",Str$(dsz)
   EndIf

   spos + ssize
 Next

 Format""
Return
End Function
Aufrufen der Funktion mit

Code:
typ = checkmod {"path/filename"}
nprint mtyp$(typ)
[attachment=41]

Für mehr braucht man eigentlich nur die 'ptmodformat' Dokumentation, oder z.B:
https://githup.com/raspi/trackermod

Man sollte aber natürlich Grundkenntnisse haben, das hilft.

Hier noch schnell die Executables.