daily pastebin goal
3%
SHARE
TWEET

Vgm2VortexTrackerTxtSn_19.sdlbas

a guest Feb 26th, 2016 76 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #! /usr/bin/sdlbrt
  2. finp$="tune.vgm"
  3.  
  4. '- .vgm to VortexTracker .txt converter - SN-76489 version
  5. '- copyleft Paulo Silva, feb'16
  6. '-------------------------------
  7. '- bugs:
  8. '- - an acute sound might appear because an issue related to volume 0 that VortexTracker doesnt support, R-- note used instead (and the converter should store which note/frequency is for a probable volume changing, and set back the note/frequency value back)
  9. '- - doesn't read yet the author/title information
  10. '- - 'L' will be useful for the loop point location
  11. '- - probably will need a sample counter before converting
  12. '- - missing noise support
  13. '- - frequncy inaccuracy from the germanic notation formula probably fixed, needs more testing
  14. '-------------------------------
  15.  
  16. ltxtm$="....|..|--- .... ....|--- .... ....|--- .... ....":ltxcr$=ltxtm$
  17. freq0=0:freq1=0:freq2=0:vol0=0:vol1=0:vol2=0
  18. patsz=64:patc=0:patid=0:freqq=0
  19. hdram=0x40:vgmv=0:veof=0
  20. dim hdrv[256]
  21.  
  22. if argc>2 then:finp$=argv(2):end if
  23. fout2$=finp$+"_vt.txt":fout3$=finp$+"_vt_debug.txt"
  24.  
  25. frmc=0:frmr=300:trg=0
  26.  
  27. frmi=735
  28. if argc>3 then:
  29.   if argv(3)="1" or ucase$(argv(2))="-PAL" then
  30.     frmi=882:end if:end if
  31.  
  32. debug=0
  33. if argc>4 then:
  34.   if argv(4)="1" or ucase$(argv(2))="-DEBUG" then
  35.     debug=1:end if:end if
  36.  
  37. '- fix: 0x0FE=440hz=A-4
  38. function nttfrq$(freqb)
  39.   e$=   "C-1C#1D-1D#1E-1F-1F#1G-1G#1A-1A#1B-1"
  40.   e$=e$+"C-2C#2D-2D#2E-2F-2F#2G-2G#2A-2A#2B-2"
  41.   e$=e$+"C-3C#3D-3D#3E-3F-3F#3G-3G#3A-3A#3B-3"
  42.   e$=e$+"C-4C#4D-4D#4E-4F-4F#4G-4G#4A-4A#4B-4"
  43.   e$=e$+"C-5C#5D-5D#5E-5F-5F#5G-5G#5A-5A#5B-5"
  44.   e$=e$+"C-6C#6D-6D#6E-6F-6F#6G-6G#6A-6A#6B-6"
  45.   e$=e$+"C-7C#7D-7D#7E-7F-7F#7G-7G#7A-7A#7B-7"
  46.   e$=e$+"C-8C#8D-8D#8E-8F-8F#8G-8G#8A-8A#8B-8---"
  47.   tmq=141-(int((log(freqb*.99)/log(2))*12))
  48.   if tmq<1 then:tmq=1:end if
  49.   if tmq>97 then:tmq=97:end if
  50.   return mid$(e$,(tmq*3)-2,3)
  51.   end function
  52.  
  53. open finp$ for input as #1
  54. for i=0 to 255
  55.   hdrv[i]=readbyte(1)
  56.   next
  57. close #1
  58.  
  59. hdram=0x040
  60. vgmv=hdrv[8]+hdrv[9]*256
  61. if vgmv>=0x0150 then:hdram=0x080:end if
  62. if vgmv>=0x0170 then:hdram=0x100:end if
  63.  
  64. ttsam=hdrv[0x18]+hdrv[0x19]*256+hdrv[0x1A]*65536+hdrv[0x1B]*16777216
  65. hsam$="PlayOrder=L0"
  66. for i=1 to (ttsam/(frmi*patsz))-1
  67.   hsam$=hsam$+","+str$(i)
  68.   next
  69.  
  70. open finp$ for input as #1
  71. open fout2$ for output as #2
  72. open fout3$ for output as #3
  73.  
  74. print #2,"[Module]"
  75. print #2,"VortexTrackerII=1"
  76. print #2,"Version=3.6"
  77. print #2,"Title="
  78. print #2,"Author="
  79. print #2,"NoteTable=2"
  80. print #2,"Speed=1"
  81. print #2,hsam$
  82. print #2," "
  83. print #2,"[Ornament1]":print #2,"L0":print #2," "
  84. print #2,"[Sample1]":print #2,"Tne +000_ +00_ F_ L":print #2," "
  85. print #2,"[Pattern0]"
  86.  
  87. '- the amount of header bytes depends on vgm format version
  88. for eee=0 to hdram-1:q0=readbyte(1):next  '- read offset byte first
  89. txou1$="    #("+str$(0)+")"
  90.  
  91. while veof=0:
  92.   q0=readbyte(1)
  93.  
  94.   '- vgm eof command
  95.   if q0=0x66 then:
  96.     veof=1
  97.     print #3,"--vgm-eof--"
  98.     print #2," "
  99.     end if
  100.  
  101.   '- delay 1 byte (1..16 samples)
  102.   if bitwiseand(q0,0xF0)=0x70 then
  103.     frmc=frmc+bitwiseand(q0,0xF)+1
  104.     txou1$="    #("+str$(frmc)+")"
  105.     'print #3,txou1$
  106.     end if
  107.  
  108.   '- delay 3 bytes (0..65535 samples)
  109.   if q0=0x61 then
  110.     q0=readbyte(1)
  111.     frmc=frmc+q0
  112.     q0=readbyte(1)
  113.     frmc=frmc+(q0*256)
  114.     txou1$="    #("+str$(frmc)+")"
  115.     'print #3,txou1$
  116.     end if
  117.  
  118.   '- 1 ntsc frame delay, 735 samples
  119.   if q0=0x62 then
  120.     frmc=frmc+735
  121.     txou1$="    #("+str$(frmc)+")"
  122.     'print #3,txou1$
  123.     end if
  124.  
  125.   '- 1 pal frame delay, 882 samples
  126.   if q0=0x63 then
  127.     frmc=frmc+882
  128.     txou1$="    #("+str$(frmc)+")"
  129.     'print #3,txou1$
  130.     end if
  131.  
  132.   '- updates frameout pulses
  133.   while frmr<frmc
  134.  
  135.     '- writes 1F in the first line of the first pattern
  136.     if (patc<1 and patid=0) then
  137.       ltxcr$=replace$(12,ltxcr$,"1F")
  138.       ltxcr$=replace$(26,ltxcr$,"1F")
  139.       ltxcr$=replace$(40,ltxcr$,"1F")
  140.       end if
  141.  
  142.     '- creates a new pattern  
  143.     if patc>(patsz-1) then:
  144.       print #2," "
  145.       patid=patid+1:patc=0
  146.       txou9$="[Pattern"+str$(patid)+"]"
  147.       print #2,txou9$
  148.       end if
  149.  
  150.     '- writes a pattern line in each frame
  151.     if trg=0 then
  152.       print #3,"--frameout-unchanged--"
  153.       print #2,ltxtm$
  154.     else
  155.       print #3,"--frameout--"
  156.       print #2,ltxcr$
  157.       ltxcr$=ltxtm$
  158.       trg=0
  159.       end if
  160.  
  161.     frmr=frmr+frmi
  162.     patc=patc+1
  163.     end while
  164.  
  165.   if q0=0x50 then
  166.     q0=readbyte(1)
  167.  
  168.     if bitwiseand (q0,128)=0 then
  169.  
  170.       '- channel 0 - coarse
  171.       if freqq=0 then
  172.         freq0= bitwiseor ( (bitwiseand(q0,0x3F))*16,(bitwiseand(freq0,0x00F)) )
  173.         ltxtm1$=ltxtm$
  174.         ltxtm2$=replace$(8,ltxtm1$,nttfrq$(freq0))
  175.         ltxcr$=replace$(8,ltxcr$,nttfrq$(freq0))
  176.         print #3,ltxtm2$+"    #("+str$(frmc)+")"
  177.         trg=1
  178.         end if
  179.  
  180.       '- channel 1 - coarse
  181.       if freqq=1 then
  182.         freq1= bitwiseor ( (bitwiseand(q0,0x3F))*16,(bitwiseand(freq1,0x00F)) )
  183.         ltxtm1$=ltxtm$
  184.         ltxtm2$=replace$(22,ltxtm1$,nttfrq$(freq1))
  185.         ltxcr$=replace$(22,ltxcr$,nttfrq$(freq1))
  186.         print #3,ltxtm2$+"    #("+str$(frmc)+")"
  187.         trg=1
  188.         end if
  189.  
  190.       '- channel 2 - coarse
  191.       if freqq=2 then
  192.         freq2= bitwiseor ( (bitwiseand(q0,0x3F))*16,(bitwiseand(freq2,0x00F)) )
  193.         ltxtm1$=ltxtm$
  194.         ltxtm2$=replace$(36,ltxtm1$,nttfrq$(freq2))
  195.         ltxcr$=replace$(36,ltxcr$,nttfrq$(freq2))
  196.         print #3,ltxtm2$+"    #("+str$(frmc)+")"
  197.         trg=1
  198.         end if
  199.  
  200.       end if
  201.  
  202.     if bitwiseand (q0,128)=128 then
  203.  
  204.       '- channel 0 - fine
  205.       if bitwiseand (q0,0xF0)=0x80  then '- tone ch0
  206.         freqq=0
  207.         freq0= bitwiseor ( (bitwiseand(freq0,0xFF0)),(bitwiseand(q0,0x00F)) )
  208.         ltxtm1$=ltxtm$
  209.         ltxtm2$=replace$(8,ltxtm1$,nttfrq$(freq0))
  210.         ltxcr$=replace$(8,ltxcr$,nttfrq$(freq0))
  211.         print #3,ltxtm2$+"    #("+str$(frmc)+")"
  212.         trg=1
  213.         end if
  214.  
  215.       '- channel 1 - fine
  216.       if bitwiseand (q0,0xF0)=0xA0  then '- tone ch1
  217.         freqq=1
  218.         freq1= bitwiseor ( (bitwiseand(freq1,0xFF0)),(bitwiseand(q0,0x00F)) )
  219.         ltxtm1$=ltxtm$
  220.         ltxtm2$=replace$(22,ltxtm1$,nttfrq$(freq1))
  221.         ltxcr$=replace$(22,ltxcr$,nttfrq$(freq1))
  222.         print #3,ltxtm2$+"    #("+str$(frmc)+")"
  223.         trg=1
  224.         end if
  225.  
  226.       '- channel 2 - fine
  227.       if bitwiseand (q0,0xF0)=0xC0  then '- tone ch2
  228.         freqq=2
  229.         freq2= bitwiseor ( (bitwiseand(freq2,0xFF0)),(bitwiseand(q0,0x00F)) )
  230.         ltxtm1$=ltxtm$
  231.         ltxtm2$=replace$(36,ltxtm1$,nttfrq$(freq2))
  232.         ltxcr$=replace$(36,ltxcr$,nttfrq$(freq2))
  233.         print #3,ltxtm2$+"    #("+str$(frmc)+")"
  234.         trg=1
  235.         end if
  236.  
  237.       'if bitwiseand (q0,0xF0)=0xE0  then '- freq noise
  238.       '  end if
  239.  
  240.       '- channel 0 - volume
  241.       if bitwiseand (q0,0xF0)=0x90  then '- volume ch0
  242.         'freqq=0
  243.         vol0=15-bitwiseand(q0,0xF)
  244.         ltxtm1$=ltxtm$
  245.         ltxtm2$=replace$(15,ltxtm1$,ucase$(right$(hex$(0x10+vol0),1)))
  246.         ltxcr$=replace$(15,ltxcr$,ucase$(right$(hex$(0x10+vol0),1)))
  247.         print #3,ltxtm2$+"    #("+str$(frmc)+")"
  248.         trg=1
  249.         end if
  250.  
  251.       '- channel 1 - volume
  252.       if bitwiseand (q0,0xF0)=0xB0  then '- volume ch1
  253.         'freqq=1
  254.         vol1=15-bitwiseand(q0,0xF)
  255.         ltxtm1$=ltxtm$
  256.         ltxtm2$=replace$(29,ltxtm1$,ucase$(right$(hex$(0x10+vol1),1)))
  257.         ltxcr$=replace$(29,ltxcr$,ucase$(right$(hex$(0x10+vol1),1)))
  258.         print #3,ltxtm2$+"    #("+str$(frmc)+")"
  259.         trg=1
  260.         end if
  261.  
  262.       '- channel 2 - volume
  263.       if bitwiseand (q0,0xF0)=0xD0  then '- volume ch2
  264.         'freqq=2
  265.         vol2=15-bitwiseand(q0,0xF)
  266.         ltxtm1$=ltxtm$
  267.         ltxtm2$=replace$(43,ltxtm1$,ucase$(right$(hex$(0x10+vol2),1)))
  268.         ltxcr$=replace$(43,ltxcr$,ucase$(right$(hex$(0x10+vol2),1)))
  269.         print #3,ltxtm2$+"    #("+str$(frmc)+")"
  270.         trg=1
  271.         end if
  272.  
  273.       'if bitwiseand (q0,0xF0)=0xF0  then '- volume ch3
  274.       '  end if
  275.  
  276.       end if
  277.     end if
  278.  
  279.   if eof(1)<>0 then:veof=1:end if
  280.   wend
  281.  
  282. close #1:close #2:close #3
  283.  
  284. if debug=0 then:
  285.   shell("rm "+fout3$)
  286.   end if
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top