Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import sys
- import struct
- _svm_ptable = [
- 4096, 4110, 4125, 4140, 4155, 4170, 4185, 4200,
- 4216, 4231, 4246, 4261, 4277, 4292, 4308, 4323,
- 4339, 4355, 4371, 4386, 4402, 4418, 4434, 4450,
- 4466, 4482, 4499, 4515, 4531, 4548, 4564, 4581,
- 4597, 4614, 4630, 4647, 4664, 4681, 4698, 4715,
- 4732, 4749, 4766, 4783, 4801, 4818, 4835, 4853,
- 4870, 4888, 4906, 4924, 4941, 4959, 4977, 4995,
- 5013, 5031, 5050, 5068, 5086, 5105, 5123, 5142,
- 5160, 5179, 5198, 5216, 5235, 5254, 5273, 5292,
- 5311, 5331, 5350, 5369, 5389, 5408, 5428, 5447,
- 5467, 5487, 5507, 5527, 5547, 5567, 5587, 5607,
- 5627, 5648, 5668, 5688, 5709, 5730, 5750, 5771,
- 5792, 5813, 5834, 5855, 5876, 5898, 5919, 5940,
- 5962, 5983, 6005, 6027, 6049, 6070, 6092, 6114,
- 6137, 6159, 6181, 6203, 6226, 6248, 6271, 6294,
- 6316, 6339, 6362, 6385, 6408, 6431, 6455, 6478,
- 6501, 6525, 6549, 6572, 6596, 6620, 6644, 6668,
- 6692, 6716, 6741, 6765, 6789, 6814, 6839, 6863,
- 6888, 6913, 6938, 6963, 6988, 7014, 7039, 7064,
- 7090, 7116, 7141, 7167, 7193, 7219, 7245, 7271,
- 7298, 7324, 7351, 7377, 7404, 7431, 7458, 7485,
- 7512, 7539, 7566, 7593, 7621, 7648, 7676, 7704,
- 7732, 7760, 7788, 7816, 7844, 7873, 7901, 7930,
- 7958, 7987, 8016, 8045, 8074, 8103, 8133, 8162,
- 8192
- ]
- def SsPitchFromNote(note, fine, center, shift):
- sfine=fine+shift
- if sfine<0: sfine+=7
- sfine>>=3
- add=0
- if sfine>15:
- add=1
- sfine-=16
- calc=add+(note-(center-60))
- pitch=_svm_ptable[16*(calc%12)+sfine]
- typ=calc//12-5
- # regular shift
- if typ>0: return pitch<<typ
- # negative shift
- if typ<0: return pitch>>-typ
- return pitch
- # 60/80 - in-game pitch, 60/0 - correct pitch
- note=60
- fine=80
- if __name__=="__main__":
- fname=sys.argv[1]
- if not fname.lower().endswith(".vca"):
- sys.exit(0)
- dname=os.path.dirname(fname)
- bname=os.path.basename(fname)
- f=open(fname,"rb")
- for i in range(999):
- test=f.read(0x04)
- if test==b"\xFF\xFF\xFF\xFF":
- break
- f.seek(-4,1)
- values=struct.unpack("<HHBBHIIII", f.read(0x18))
- center=values[2]
- shift=values[3]
- pitch=SsPitchFromNote(note,fine,center,shift)
- freq=pitch*44100//4096
- comment="note: %d fine: %d center: %d shift: %d -> %s -> %s Hz" % (note,fine,center,shift,pitch,freq)
- print(comment)
- f2=open(os.path.join(dname,"%s_%d.txtp" % (bname,i+1)),"w")
- f2.write("%s#s%d#h%d ## %s\n" % (bname,i+1,freq,comment))
- f2.close()
- f.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement