[Audio 9/?] Multiversion samplebank and soundfont extraction xmls, 1.0 and 1.1 audio extraction (#2291)

* [Audio 9/?] Multiversion samplebank and soundfont extraction xmls, 1.0 and 1.1 audio extraction

* Rework multiversion samplebanks to reduce duplicates
This commit is contained in:
Tharo 2024-11-12 13:47:34 +00:00 committed by GitHub
parent d886ebe711
commit 2d454933f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 741 additions and 585 deletions

View File

@ -1,433 +1,436 @@
<!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ --> <!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ -->
<SampleBank Name="SampleBank_0" Index="0"> <SampleBank Name="SampleBank_0" Index="0">
<Sample Name="SAMPLE_0_0" FileName="Sample000" Offset="0x000000" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_0" FileName="Sample000" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_1" FileName="Sample001" Offset="0x0005B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_1" FileName="Sample001" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_2" FileName="Sample002" Offset="0x000780" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_2" FileName="Sample002" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_3" FileName="Sample003" Offset="0x000C70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_3" FileName="Sample003" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_4" FileName="Sample004" Offset="0x001730" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_4" FileName="Sample004" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_5" FileName="Sample005" Offset="0x001ED0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_5" FileName="Sample005" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_6" FileName="Sample006" Offset="0x002D10" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_6" FileName="Sample006" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_7" FileName="Sample007" Offset="0x004250" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_7" FileName="Sample007" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_8" FileName="Sample008" Offset="0x005480" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_8" FileName="Sample008" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_9" FileName="Sample009" Offset="0x0077D0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_9" FileName="Sample009" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_10" FileName="Sample010" Offset="0x0097E0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_10" FileName="Sample010" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_11" FileName="Sample011" Offset="0x00B660" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_11" FileName="Sample011" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_12" FileName="Sample012" Offset="0x00BC80" SampleRate="32000" BaseNote="F3"/> <Sample Name="SAMPLE_0_12" FileName="Sample012" SampleRate="32000" BaseNote="F3"/>
<Sample Name="SAMPLE_0_13" FileName="Sample013" Offset="0x00E4B0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_13" FileName="Sample013" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_14" FileName="Sample014" Offset="0x011D80" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_0_14" FileName="Sample014" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_15" FileName="Sample015" Offset="0x01C4A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_15" FileName="Sample015" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_16" FileName="Sample016" Offset="0x027DA0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_16" FileName="Sample016" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_17" FileName="Sample017" Offset="0x033800" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_17" FileName="Sample017" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_18" FileName="Sample018" Offset="0x0393F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_18" FileName="Sample018" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_19" FileName="Sample019" Offset="0x03D090" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_19" FileName="Sample019" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_20" FileName="Sample020" Offset="0x03E360" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_20" FileName="Sample020" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_21" FileName="Sample021" Offset="0x03ECE0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_21" FileName="Sample021" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_22" FileName="Sample022" Offset="0x03F770" SampleRate="16000" BaseNote="G4"/> <Sample Name="SAMPLE_0_22" FileName="Sample022" SampleRate="16000" BaseNote="G4"/>
<Sample Name="SAMPLE_0_23" FileName="Sample023" Offset="0x040000" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_23" FileName="Sample023" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_24" FileName="Sample024" Offset="0x040AA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_24" FileName="Sample024" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_25" FileName="Sample025" Offset="0x0414F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_25" FileName="Sample025" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_26" FileName="Sample026" Offset="0x041A20" SampleRate="8000" BaseNote="G3"/> <Sample Name="SAMPLE_0_26" FileName="Sample026" SampleRate="8000" BaseNote="G3"/>
<Sample Name="SAMPLE_0_27" FileName="Sample027" Offset="0x041CD0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_27" FileName="Sample027" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_28" FileName="Sample028" Offset="0x0439A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_28" FileName="Sample028" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_29" FileName="Sample029" Offset="0x046810" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_29" FileName="Sample029" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_30" FileName="Sample030" Offset="0x048840" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_30" FileName="Sample030" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_31" FileName="Sample031" Offset="0x04A510" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_31" FileName="Sample031" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_32" FileName="Sample032" Offset="0x04A6A0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_32" FileName="Sample032" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_33" FileName="Sample033" Offset="0x04F790" SampleRate="23220" BaseNote="C4"/> <Sample Name="SAMPLE_0_33" FileName="Sample033" SampleRate="23220" BaseNote="C4"/>
<Sample Name="SAMPLE_0_34" FileName="Sample034" Offset="0x053210" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_34" FileName="Sample034" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_35" FileName="Sample035" Offset="0x055BA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_35" FileName="Sample035" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_36" FileName="Sample036" Offset="0x057D10" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_36" FileName="Sample036" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_37" FileName="Sample037" Offset="0x05B590" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_37" FileName="Sample037" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_38" FileName="Sample038" Offset="0x05CBA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_38" FileName="Sample038" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_39" FileName="Sample039" Offset="0x060240" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_39" FileName="Sample039" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_40" FileName="Sample040" Offset="0x061B90" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_40" FileName="Sample040" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_41" FileName="Sample041" Offset="0x063350" SampleRate="16000" BaseNote="AF4"/> <Sample Name="SAMPLE_0_41" FileName="Sample041" SampleRate="16000" BaseNote="AF4"/>
<Sample Name="SAMPLE_0_42" FileName="Sample042" Offset="0x063B70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_42" FileName="Sample042" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_43" FileName="Sample043" Offset="0x064600" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_43" FileName="Sample043" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_44" FileName="Sample044" Offset="0x064F70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_44" FileName="Sample044" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_45" FileName="Sample045" Offset="0x065580" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_45" FileName="Sample045" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_46" FileName="Sample046" Offset="0x067FA0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_46" FileName="Sample046" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_47" FileName="Sample047" Offset="0x068CC0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_47" FileName="Sample047" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_48" FileName="Sample048" Offset="0x069130" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_48" FileName="Sample048" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_49" FileName="Sample049" Offset="0x06A040" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_49" FileName="Sample049" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_50" FileName="Sample050" Offset="0x06BA00" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_50" FileName="Sample050" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_51" FileName="Sample051" Offset="0x06C3C0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_51" FileName="Sample051" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_52" FileName="Sample052" Offset="0x06D5B0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_52" FileName="Sample052" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_53" FileName="Sample053" Offset="0x071C70" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_53" FileName="Sample053" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_54" FileName="Sample054" Offset="0x0732A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_54" FileName="Sample054" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_55" FileName="Sample055" Offset="0x074790" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_55" FileName="Sample055" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_56" FileName="Sample056" Offset="0x077010" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_56" FileName="Sample056" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_57" FileName="Sample057" Offset="0x077BA0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_57" FileName="Sample057" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_58" FileName="Sample058" Offset="0x07AFD0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_58" FileName="Sample058" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_59" FileName="Sample059" Offset="0x07D290" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_59" FileName="Sample059" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_60" FileName="Sample060" Offset="0x07F3F0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_60" FileName="Sample060" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_61" FileName="Sample061" Offset="0x07FC90" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_61" FileName="Sample061" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_62" FileName="Sample062" Offset="0x080E00" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_62" FileName="Sample062" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_63" FileName="Sample063" Offset="0x082000" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_63" FileName="Sample063" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_64" FileName="Sample064" Offset="0x082ED0" SampleRate="22050" BaseNote="C0"/> <Sample Name="SAMPLE_0_64" FileName="Sample064" SampleRate="22050" BaseNote="C0"/>
<Sample Name="SAMPLE_0_65" FileName="Sample065" Offset="0x084380" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_65" FileName="Sample065" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_66" FileName="Sample066" Offset="0x087030" SampleRate="22050" BaseNote="C0"/> <Sample Name="SAMPLE_0_66" FileName="Sample066" SampleRate="22050" BaseNote="C0"/>
<Sample Name="SAMPLE_0_67" FileName="Sample067" Offset="0x087440" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_67" FileName="Sample067" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_68" FileName="Sample068" Offset="0x088620" SampleRate="22050" BaseNote="C0"/> <Sample Name="SAMPLE_0_68" FileName="Sample068" SampleRate="22050" BaseNote="C0"/>
<Sample Name="SAMPLE_0_69" FileName="Sample069" Offset="0x088A50" SampleRate="45530" BaseNote="F1"/> <Sample Name="SAMPLE_0_69" FileName="Sample069" SampleRate="45530" BaseNote="F1"/>
<Sample Name="SAMPLE_0_70" FileName="Sample070" Offset="0x08A4B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_70" FileName="Sample070" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_71" FileName="Sample071" Offset="0x08E160" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_71" FileName="Sample071" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_72" FileName="Sample072" Offset="0x08F6F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_72" FileName="Sample072" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_73" FileName="Sample073" Offset="0x093DB0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_73" FileName="Sample073" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_74" FileName="Sample074" Offset="0x094B10" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_74" FileName="Sample074" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_75" FileName="Sample075" Offset="0x098B00" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_75" FileName="Sample075" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_76" FileName="Sample076" Offset="0x09D5F0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_76" FileName="Sample076" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_77" FileName="Sample077" Offset="0x0A0260" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_77" FileName="Sample077" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_78" FileName="Sample078" Offset="0x0A14A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_78" FileName="Sample078" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_79" FileName="Sample079" Offset="0x0A2590" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_79" FileName="Sample079" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_80" FileName="Sample080" Offset="0x0A9EF0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_80" FileName="Sample080" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_81" FileName="Sample081" Offset="0x0AB9E0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_81" FileName="Sample081" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_82" FileName="Sample082" Offset="0x0ADBA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_82" FileName="Sample082" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_83" FileName="Sample083" Offset="0x0AF0A0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_83" FileName="Sample083" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_84" FileName="Sample084" Offset="0x0B0960" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_84" FileName="Sample084" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_85" FileName="Sample085" Offset="0x0B3600" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_85" FileName="Sample085" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_86" FileName="Sample086" Offset="0x0B3B10" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_0_86" FileName="Sample086" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_87" FileName="Sample087" Offset="0x0B4B90" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_87" FileName="Sample087" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_88" FileName="Sample088" Offset="0x0B5A80" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_88" FileName="Sample088" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_89" FileName="Sample089" Offset="0x0B8690" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_89" FileName="Sample089" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_90" FileName="Sample090" Offset="0x0BA0D0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_90" FileName="Sample090" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_91" FileName="Sample091" Offset="0x0BBB00" SampleRate="32000" BaseNote="B1"/> <Sample Name="SAMPLE_0_91" FileName="Sample091" SampleRate="32000" BaseNote="B1"/>
<Sample Name="SAMPLE_0_92" FileName="Sample092" Offset="0x0C42B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_92" FileName="Sample092" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_93" FileName="Sample093" Offset="0x0C5140" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_93" FileName="Sample093" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_94" FileName="Sample094" Offset="0x0C88C0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_94" FileName="Sample094" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_95" FileName="Sample095" Offset="0x0CAF60" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_95" FileName="Sample095" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_96" FileName="Sample096" Offset="0x0D16F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_96" FileName="Sample096" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_97" FileName="Sample097" Offset="0x0D2110" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_97" FileName="Sample097" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_98" FileName="Sample098" Offset="0x0D3DC0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_98" FileName="Sample098" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_99" FileName="Sample099" Offset="0x0D57A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_99" FileName="Sample099" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_100" FileName="Sample100" Offset="0x0DE0A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_100" FileName="Sample100" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_101" FileName="Sample101" Offset="0x0E01F0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_101" FileName="Sample101" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_102" FileName="Sample102" Offset="0x0E2510" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_102" FileName="Sample102" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_103" FileName="Sample103" Offset="0x0E44A0" SampleRate="22050" BaseNote="C0"/> <Sample Name="SAMPLE_0_103" FileName="Sample103" SampleRate="22050" BaseNote="C0"/>
<Sample Name="SAMPLE_0_104" FileName="Sample104" Offset="0x0E4B00" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_104" FileName="Sample104" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_105" FileName="Sample105" Offset="0x0E5B70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_105" FileName="Sample105" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_106" FileName="Sample106" Offset="0x0EA760" SampleRate="8000" BaseNote="A0"/> <Sample Name="SAMPLE_0_106" FileName="Sample106" SampleRate="8000" BaseNote="A0"/>
<Sample Name="SAMPLE_0_107" FileName="Sample107" Offset="0x0EAFC0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_107" FileName="Sample107" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_108" FileName="Sample108" Offset="0x0EB5B0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_108" FileName="Sample108" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_109" FileName="Sample109" Offset="0x0ECF40" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_109" FileName="Sample109" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_110" FileName="Sample110" Offset="0x0EEB80" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_110" FileName="Sample110" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_111" FileName="Sample111" Offset="0x0F2FE0" SampleRate="22050" BaseNote="GF3"/> <Sample Name="SAMPLE_0_111" FileName="Sample111" SampleRate="22050" BaseNote="GF3"/>
<Sample Name="SAMPLE_0_112" FileName="Sample112" Offset="0x0F5350" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_112" FileName="Sample112" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_113" FileName="Sample113" Offset="0x0F5A90" SampleRate="22050" BaseNote="C0"/> <Sample Name="SAMPLE_0_113" FileName="Sample113" SampleRate="22050" BaseNote="C0"/>
<Sample Name="SAMPLE_0_114" FileName="Sample114" Offset="0x0F72A0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_114" FileName="Sample114" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_115" FileName="Sample115" Offset="0x0FAD40" SampleRate="32000" BaseNote="E3"/> <Sample Name="SAMPLE_0_115" FileName="Sample115" SampleRate="32000" BaseNote="E3"/>
<Sample Name="SAMPLE_0_116" FileName="Sample116" Offset="0x0FDFC0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_116" FileName="Sample116" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_117" FileName="Sample117" Offset="0x1026F0" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_0_117" FileName="Sample117" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_118" FileName="Sample118" Offset="0x106C20" SampleRate="22050" BaseNote="E3"/> <Sample Name="SAMPLE_0_118" FileName="Sample118" SampleRate="22050" BaseNote="E3"/>
<Sample Name="SAMPLE_0_119" FileName="Sample119" Offset="0x108690" SampleRate="32000" BaseNote="F2"/> <Sample Name="SAMPLE_0_119" FileName="Sample119" SampleRate="32000" BaseNote="F2"/>
<Sample Name="SAMPLE_0_120" FileName="Sample120" Offset="0x10CD20" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_120" FileName="Sample120" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_121" FileName="Sample121" Offset="0x10EFF0" SampleRate="32000" BaseNote="D4"/> <Sample Name="SAMPLE_0_121" FileName="Sample121" SampleRate="32000" BaseNote="D4"/>
<Sample Name="SAMPLE_0_122" FileName="Sample122" Offset="0x111520" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_122" FileName="Sample122" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_123" FileName="Sample123" Offset="0x1129E0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_123" FileName="Sample123" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_124" FileName="Sample124" Offset="0x114D70" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_124" FileName="Sample124" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_125" FileName="Sample125" Offset="0x1165E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_125" FileName="Sample125" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_126" FileName="Sample126" Offset="0x1176B0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_126" FileName="Sample126" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_127" FileName="Sample127" Offset="0x118910" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_127" FileName="Sample127" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_128" FileName="Sample128" Offset="0x119870" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_128" FileName="Sample128" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_129" FileName="Sample129" Offset="0x11A270" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_129" FileName="Sample129" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_130" FileName="Sample130" Offset="0x11B0E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_130" FileName="Sample130" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_131" FileName="Sample131" Offset="0x11B790" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_131" FileName="Sample131" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_132" FileName="Sample132" Offset="0x11BE20" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_132" FileName="Sample132" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_133" FileName="Sample133" Offset="0x11D6D0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_133" FileName="Sample133" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_134" FileName="Sample134" Offset="0x11EE50" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_134" FileName="Sample134" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_135" FileName="Sample135" Offset="0x11FB00" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_135" FileName="Sample135" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_136" FileName="Sample136" Offset="0x120D60" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_136" FileName="Sample136" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_137" FileName="Sample137" Offset="0x121BF0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_137" FileName="Sample137" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_138" FileName="Sample138" Offset="0x122C10" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_138" FileName="Sample138" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_139" FileName="Sample139" Offset="0x1243F0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_139" FileName="Sample139" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_140" FileName="Sample140" Offset="0x125A90" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_140" FileName="Sample140" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_141" FileName="Sample141" Offset="0x126ED0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_141" FileName="Sample141" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_142" FileName="Sample142" Offset="0x128DA0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_142" FileName="Sample142" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_143" FileName="Sample143" Offset="0x12AC80" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_143" FileName="Sample143" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_144" FileName="Sample144" Offset="0x12CD30" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_144" FileName="Sample144" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_145" FileName="Sample145" Offset="0x133AB0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_145" FileName="Sample145" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_146" FileName="Sample146" Offset="0x139D70" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_146" FileName="Sample146" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_147" FileName="Sample147" Offset="0x13AF50" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_147" FileName="Sample147" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_148" FileName="Sample148" Offset="0x13C040" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_148" FileName="Sample148" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_149" FileName="Sample149" Offset="0x13D3B0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_149" FileName="Sample149" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_150" FileName="Sample150" Offset="0x13E870" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_150" FileName="Sample150" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_151" FileName="Sample151" Offset="0x13F6B0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_151" FileName="Sample151" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_152" FileName="Sample152" Offset="0x140FC0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_152" FileName="Sample152" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_153" FileName="Sample153" Offset="0x141960" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_153" FileName="Sample153" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_154" FileName="Sample154" Offset="0x143690" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_154" FileName="Sample154" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_155" FileName="Sample155" Offset="0x146490" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_155" FileName="Sample155" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_156" FileName="Sample156" Offset="0x1478F0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_156" FileName="Sample156" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_157" FileName="Sample157" Offset="0x148390" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_157" FileName="Sample157" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_158" FileName="Sample158" Offset="0x1493C0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_158" FileName="Sample158" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_159" FileName="Sample159" Offset="0x14B440" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_159" FileName="Sample159" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_160" FileName="Sample160" Offset="0x14C250" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_160" FileName="Sample160" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_161" FileName="Sample161" Offset="0x151520" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_161" FileName="Sample161" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_162" FileName="Sample162" Offset="0x15A6A0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_162" FileName="Sample162" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_163" FileName="Sample163" Offset="0x15BE50" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_163" FileName="Sample163" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_164" FileName="Sample164" Offset="0x15DCB0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_164" FileName="Sample164" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_165" FileName="Sample165" Offset="0x15F4B0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_165" FileName="Sample165" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_166" FileName="Sample166" Offset="0x1617F0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_166" FileName="Sample166" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_167" FileName="Sample167" Offset="0x163280" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_167" FileName="Sample167" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_168" FileName="Sample168" Offset="0x166790" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_168" FileName="Sample168" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_169" FileName="Sample169" Offset="0x167800" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_169" FileName="Sample169" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_170" FileName="Sample170" Offset="0x168650" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_170" FileName="Sample170" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_171" FileName="Sample171" Offset="0x1698E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_171" FileName="Sample171" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_172" FileName="Sample172" Offset="0x16A450" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_172" FileName="Sample172" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_173" FileName="Sample173" Offset="0x16AEA0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_173" FileName="Sample173" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_174" FileName="Sample174" Offset="0x16B3E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_174" FileName="Sample174" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_175" FileName="Sample175" Offset="0x16CE20" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_175" FileName="Sample175" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_176" FileName="Sample176" Offset="0x16EEA0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_176" FileName="Sample176" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_177" FileName="Sample177" Offset="0x16FE60" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_177" FileName="Sample177" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_178" FileName="Sample178" Offset="0x170E80" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_178" FileName="Sample178" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_179" FileName="Sample179" Offset="0x171DA0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_179" FileName="Sample179" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_180" FileName="Sample180" Offset="0x173320" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_180" FileName="Sample180" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_181" FileName="Sample181" Offset="0x174240" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_181" FileName="Sample181" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_182" FileName="Sample182" Offset="0x175140" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_182" FileName="Sample182" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_183" FileName="Sample183" Offset="0x175C30" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_183" FileName="Sample183" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_184" FileName="Sample184" Offset="0x177480" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_184" FileName="Sample184" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_185" FileName="Sample185" Offset="0x178D40" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_185" FileName="Sample185" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_186" FileName="Sample186" Offset="0x1795F0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_186" FileName="Sample186" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_187" FileName="Sample187" Offset="0x17E6C0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_187" FileName="Sample187" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_188" FileName="Sample188" Offset="0x182EC0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_188" FileName="Sample188" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_189" FileName="Sample189" Offset="0x1844E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_189" FileName="Sample189" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_190" FileName="Sample190" Offset="0x185BA0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_190" FileName="Sample190" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_191" FileName="Sample191" Offset="0x188170" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_191" FileName="Sample191" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_192" FileName="Sample192" Offset="0x18A560" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_192" FileName="Sample192" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_193" FileName="Sample193" Offset="0x18B650" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_193" FileName="Sample193" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_194" FileName="Sample194" Offset="0x18D090" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_194" FileName="Sample194" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_195" FileName="Sample195" Offset="0x18E480" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_195" FileName="Sample195" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_196" FileName="Sample196" Offset="0x190200" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_196" FileName="Sample196" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_197" FileName="Sample197" Offset="0x193410" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_197" FileName="Sample197" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_198" FileName="Sample198" Offset="0x196950" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_198" FileName="Sample198" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_199" FileName="Sample199" Offset="0x1971A0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_199" FileName="Sample199" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_200" FileName="Sample200" Offset="0x197500" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_200" FileName="Sample200" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_201" FileName="Sample201" Offset="0x198F30" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_201" FileName="Sample201" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_202" FileName="Sample202" Offset="0x19F6D0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_202" FileName="Sample202" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_203" FileName="Sample203" Offset="0x1A1670" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_203" FileName="Sample203" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_204" FileName="Sample204" Offset="0x1A2580" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_204" FileName="Sample204" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_205" FileName="Sample205" Offset="0x1A71E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_205" FileName="Sample205" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_206" FileName="Sample206" Offset="0x1A79C0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_206" FileName="Sample206" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_207" FileName="Sample207" Offset="0x1AF2E0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_207" FileName="Sample207" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_208" FileName="Sample208" Offset="0x1AFEE0" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_208" FileName="Sample208" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_209" FileName="Sample209" Offset="0x1B3F50" SampleRate="20000" BaseNote="C4"/> <Sample Name="SAMPLE_0_209" FileName="Sample209" SampleRate="20000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_210" FileName="Sample210" Offset="0x1B6530" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_210" FileName="Sample210" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_211" FileName="Sample211" Offset="0x1B7B40" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_211" FileName="Sample211" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_212" FileName="Sample212" Offset="0x1B8DB0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_212" FileName="Sample212" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_213" FileName="Sample213" Offset="0x1B9D70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_213" FileName="Sample213" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_214" FileName="Sample214" Offset="0x1BB410" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_214" FileName="Sample214" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_215" FileName="Sample215" Offset="0x1BC380" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_215" FileName="Sample215" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_216" FileName="Sample216" Offset="0x1BFA40" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_216" FileName="Sample216" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_217" FileName="Sample217" Offset="0x1C0F80" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_217" FileName="Sample217" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_218" FileName="Sample218" Offset="0x1C2510" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_218" FileName="Sample218" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_219" FileName="Sample219" Offset="0x1C6870" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_219" FileName="Sample219" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_220" FileName="Sample220" Offset="0x1CC560" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_220" FileName="Sample220" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_221" FileName="Sample221" Offset="0x1CF9C0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_221" FileName="Sample221" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_222" FileName="Sample222" Offset="0x1D25C0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_222" FileName="Sample222" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_223" FileName="Sample223" Offset="0x1D58F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_223" FileName="Sample223" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_224" FileName="Sample224" Offset="0x1D74B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_224" FileName="Sample224" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_225" FileName="Sample225" Offset="0x1D8420" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_225" FileName="Sample225" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_226" FileName="Sample226" Offset="0x1D9880" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_226" FileName="Sample226" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_227" FileName="Sample227" Offset="0x1DDA40" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_227" FileName="Sample227" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_228" FileName="Sample228" Offset="0x1DE3C0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_228" FileName="Sample228" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_229" FileName="Sample229" Offset="0x1DF040" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_229" FileName="Sample229" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_230" FileName="Sample230" Offset="0x1E0140" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_230" FileName="Sample230" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_231" FileName="Sample231" Offset="0x1E3160" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_231" FileName="Sample231" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_232" FileName="Sample232" Offset="0x1E48E0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_232" FileName="Sample232" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_233" FileName="Sample233" Offset="0x1E55F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_233" FileName="Sample233" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_234" FileName="Sample234" Offset="0x1E6000" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_234" FileName="Sample234" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_235" FileName="Sample235" Offset="0x1E7E90" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_235" FileName="Sample235" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_236" FileName="Sample236" Offset="0x1E9960" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_236" FileName="Sample236" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_237" FileName="Sample237" Offset="0x1EB6B0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_237" FileName="Sample237" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_238" FileName="Sample238" Offset="0x1EC2B0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_238" FileName="Sample238" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_239" FileName="Sample239" Offset="0x1EC990" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_239" FileName="Sample239" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_240" FileName="Sample240" Offset="0x1EE390" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_240" FileName="Sample240" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_241" FileName="Sample241" Offset="0x1EF1B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_241" FileName="Sample241" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_242" FileName="Sample242" Offset="0x1EFCE0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_242" FileName="Sample242" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_243" FileName="Sample243" Offset="0x1F1600" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_243" FileName="Sample243" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_244" FileName="Sample244" Offset="0x1F3020" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_244" FileName="Sample244" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_245" FileName="Sample245" Offset="0x1F4010" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_245" FileName="Sample245" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_246" FileName="Sample246" Offset="0x1F4EB0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_246" FileName="Sample246" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_247" FileName="Sample247" Offset="0x1F5E50" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_247" FileName="Sample247" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_248" FileName="Sample248" Offset="0x1F7220" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_248" FileName="Sample248" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_249" FileName="Sample249" Offset="0x1F9490" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_249" FileName="Sample249" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_250" FileName="Sample250" Offset="0x1FA230" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_250" FileName="Sample250" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_251" FileName="Sample251" Offset="0x1FB850" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_251" FileName="Sample251" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_252" FileName="Sample252" Offset="0x1FEA30" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_252" FileName="Sample252" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_253" FileName="Sample253" Offset="0x1FFD80" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_253" FileName="Sample253" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_254" FileName="Sample254" Offset="0x200840" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_254" FileName="Sample254" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_255" FileName="Sample255" Offset="0x206D10" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_255" FileName="Sample255" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_256" FileName="Sample256" Offset="0x209E40" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_256" FileName="Sample256" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_257" FileName="Sample257" Offset="0x20B580" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_257" FileName="Sample257" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_258" FileName="Sample258" Offset="0x20BDA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_258" FileName="Sample258" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_259" FileName="Sample259" Offset="0x20C9E0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_259" FileName="Sample259" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_260" FileName="Sample260" Offset="0x20DE70" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_260" FileName="Sample260" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_261" FileName="Sample261" Offset="0x20F440" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_261" FileName="Sample261" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_262" FileName="Sample262" Offset="0x2115A0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_262" FileName="Sample262" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_263" FileName="Sample263" Offset="0x212040" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_263" FileName="Sample263" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_264" FileName="Sample264" Offset="0x2147A0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_264" FileName="Sample264" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_265" FileName="Sample265" Offset="0x214E10" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_265" FileName="Sample265" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_266" FileName="Sample266" Offset="0x215810" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_266" FileName="Sample266" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_267" FileName="Sample267" Offset="0x216210" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_267" FileName="Sample267" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_268" FileName="Sample268" Offset="0x216D00" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_268" FileName="Sample268" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_269" FileName="Sample269" Offset="0x2187D0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_269" FileName="Sample269" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_270" FileName="Sample270" Offset="0x2193E0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_270" FileName="Sample270" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_271" FileName="Sample271" Offset="0x219F10" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_271" FileName="Sample271" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_272" FileName="Sample272" Offset="0x21A810" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_272" FileName="Sample272" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_273" FileName="Sample273" Offset="0x21AA80" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_273" FileName="Sample273" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_274" FileName="Sample274" Offset="0x21ACF0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_274" FileName="Sample274" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_275" FileName="Sample275" Offset="0x21B150" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_275" FileName="Sample275" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_276" FileName="Sample276" Offset="0x21B370" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_276" FileName="Sample276" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_277" FileName="Sample277" Offset="0x21BBC0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_277" FileName="Sample277" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_278" FileName="Sample278" Offset="0x21C330" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_278" FileName="Sample278" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_279" FileName="Sample279" Offset="0x21CF00" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_279" FileName="Sample279" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_280" FileName="Sample280" Offset="0x21DDB0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_280" FileName="Sample280" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_281" FileName="Sample281" Offset="0x220770" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_281" FileName="Sample281" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_282" FileName="Sample282" Offset="0x2222F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_282" FileName="Sample282" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_283" FileName="Sample283" Offset="0x222BA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_283" FileName="Sample283" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_284" FileName="Sample284" Offset="0x2230B0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_284" FileName="Sample284" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_285" FileName="Sample285" Offset="0x223C90" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_285" FileName="Sample285" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_286" FileName="Sample286" Offset="0x224FD0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_286" FileName="Sample286" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_287" FileName="Sample287" Offset="0x228A70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_287" FileName="Sample287" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_288" FileName="Sample288" Offset="0x22C380" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_288" FileName="Sample288" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_289" FileName="Sample289" Offset="0x22DD50" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_289" FileName="Sample289" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_290" FileName="Sample290" Offset="0x233280" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_290" FileName="Sample290" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_291" FileName="Sample291" Offset="0x236F80" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_291" FileName="Sample291" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_292" FileName="Sample292" Offset="0x237BA0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_292" FileName="Sample292" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_293" FileName="Sample293" Offset="0x23AD60" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_293" FileName="Sample293" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_294" FileName="Sample294" Offset="0x23D490" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_294" FileName="Sample294" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_295" FileName="Sample295" Offset="0x240600" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_295" FileName="Sample295" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_296" FileName="Sample296" Offset="0x241690" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_296" FileName="Sample296" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_297" FileName="Sample297" Offset="0x241C20" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_297" FileName="Sample297" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_298" FileName="Sample298" Offset="0x243440" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_298" FileName="Sample298" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_299" FileName="Sample299" Offset="0x244DD0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_299" FileName="Sample299" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_300" FileName="Sample300" Offset="0x247290" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_300" FileName="Sample300" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_301" FileName="Sample301" Offset="0x249810" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_301" FileName="Sample301" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_302" FileName="Sample302" Offset="0x24AB70" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_302" FileName="Sample302" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_303" FileName="Sample303" Offset="0x24BBE0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_303" FileName="Sample303" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_304" FileName="Sample304" Offset="0x24C2C0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_304" FileName="Sample304" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_305" FileName="Sample305" Offset="0x24E060" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_305" FileName="Sample305" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_306" FileName="Sample306" Offset="0x24F440" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_306" FileName="Sample306" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_307" FileName="Sample307" Offset="0x24FED0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_307" FileName="Sample307" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_308" FileName="Sample308" Offset="0x250E20" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_308" FileName="Sample308" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_309" FileName="Sample309" Offset="0x2516D0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_309" FileName="Sample309" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_310" FileName="Sample310" Offset="0x252B10" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_310" FileName="Sample310" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_311" FileName="Sample311" Offset="0x255720" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_311" FileName="Sample311" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_312" FileName="Sample312" Offset="0x2564A0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_312" FileName="Sample312" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_313" FileName="Sample313" Offset="0x2581C0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_313" FileName="Sample313" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_314" FileName="Sample314" Offset="0x258360" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_314" FileName="Sample314" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_315" FileName="Sample315" Offset="0x259120" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_315" FileName="Sample315" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_316" FileName="Sample316" Offset="0x259BF0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_316" FileName="Sample316" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_317" FileName="Sample317" Offset="0x25AAC0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_317" FileName="Sample317" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_318" FileName="Sample318" Offset="0x25C140" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_318" FileName="Sample318" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_319" FileName="Sample319" Offset="0x25CD60" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_319" FileName="Sample319" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_320" FileName="Sample320" Offset="0x25DB50" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_320" FileName="Sample320" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_321" FileName="Sample321" Offset="0x25E9E0" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_321" FileName="Sample321" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_322" FileName="Sample322" Offset="0x25FC50" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_322" FileName="Sample322" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_323" FileName="Sample323" Offset="0x260420" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_323" FileName="Sample323" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_324" FileName="Sample324" Offset="0x261790" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_324" FileName="Sample324" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_325" FileName="Sample325" Offset="0x262170" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_325" FileName="Sample325" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_326" FileName="Sample326" Offset="0x263270" SampleRate="22050" BaseNote="BF3"/> <Sample Name="SAMPLE_0_326" FileName="Sample326" SampleRate="22050" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_327" FileName="Sample327" Offset="0x264B60" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_327" FileName="Sample327" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_328" FileName="Sample328" Offset="0x26A060" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_328" FileName="Sample328" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_329" FileName="Sample329" Offset="0x26AAD0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_329" FileName="Sample329" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_330" FileName="Sample330" Offset="0x26B960" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_330" FileName="Sample330" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_331" FileName="Sample331" Offset="0x26BEF0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_331" FileName="Sample331" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_332" FileName="Sample332" Offset="0x26CE70" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_332" FileName="Sample332" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_333" FileName="Sample333" Offset="0x26DF40" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_333" FileName="Sample333" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_334" FileName="Sample334" Offset="0x26FC60" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_334" FileName="Sample334" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_335" FileName="Sample335" Offset="0x270E40" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_335" FileName="Sample335" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_336" FileName="Sample336" Offset="0x271A70" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_336" FileName="Sample336" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_337" FileName="Sample337" Offset="0x273860" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_337" FileName="Sample337" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_338" FileName="Sample338" Offset="0x274EA0" SampleRate="16000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_338" FileName="Sample338" SampleRate="16000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_339" FileName="Sample339" Offset="0x2765B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_339" FileName="Sample339" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_340" FileName="Sample340" Offset="0x27C0A0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_340" FileName="Sample340" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_341" FileName="Sample341" Offset="0x27E260" SampleRate="16000" BaseNote="AF3"/> <Sample Name="SAMPLE_0_341" FileName="Sample341" SampleRate="16000" BaseNote="AF3"/>
<Sample Name="SAMPLE_0_342" FileName="Sample342" Offset="0x280C70" SampleRate="16000" BaseNote="G3"/> <Sample Name="SAMPLE_0_342" FileName="Sample342" SampleRate="16000" BaseNote="G3"/>
<Sample Name="SAMPLE_0_343" FileName="Sample343" Offset="0x283440" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_343" FileName="Sample343" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_344" FileName="Sample344" Offset="0x2869C0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_344" FileName="Sample344" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_345" FileName="Sample345" Offset="0x28BF50" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_345" FileName="Sample345" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_346" FileName="Sample346" Offset="0x28CE90" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_346" FileName="Sample346" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_347" FileName="Sample347" Offset="0x2938F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_347" FileName="Sample347" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_348" FileName="Sample348" Offset="0x29B480" SampleRate="16000" BaseNote="C0"/> <Sample Name="SAMPLE_0_348" FileName="Sample348" SampleRate="16000" BaseNote="C0"/>
<Sample Name="SAMPLE_0_349" FileName="Sample349" Offset="0x29EB20" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_349" FileName="Sample349" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_350" FileName="Sample350" Offset="0x29FE30" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_350" FileName="Sample350" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_351" FileName="Sample351" Offset="0x2A4D40" SampleRate="32000" BaseNote="G4"/> <Sample Name="SAMPLE_0_351" FileName="Sample351" SampleRate="32000" BaseNote="G4"/>
<Sample Name="SAMPLE_0_352" FileName="Sample352" Offset="0x2A8500" SampleRate="32000" BaseNote="C2"/> <Sample Name="SAMPLE_0_352" FileName="Sample352" SampleRate="32000" BaseNote="C2"/>
<Sample Name="SAMPLE_0_353" FileName="Sample353" Offset="0x2AF020" SampleRate="22050" BaseNote="GF4"/> <Sample Name="SAMPLE_0_353" FileName="Sample353" SampleRate="22050" BaseNote="GF4"/>
<Sample Name="SAMPLE_0_354" FileName="Sample354" Offset="0x2B43B0" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_354" FileName="Sample354" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_355" FileName="Sample355" Offset="0x2B9E60" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_355" FileName="Sample355" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_356" FileName="Sample356" Offset="0x2C8510" SampleRate="22050" BaseNote="A5"/> <Sample Name="SAMPLE_0_356" FileName="Sample356" SampleRate="22050" BaseNote="A5"/>
<Sample Name="SAMPLE_0_357" FileName="Sample357" Offset="0x2CFEE0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_357" FileName="Sample357" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_358" FileName="Sample358" Offset="0x2D96A0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_358" FileName="Sample358" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_359" FileName="Sample359" Offset="0x2DFF40" SampleRate="22050" BaseNote="G3"/> <Sample Name="SAMPLE_0_359" FileName="Sample359" SampleRate="22050" BaseNote="G3"/>
<Sample Name="SAMPLE_0_360" FileName="Sample360" Offset="0x2E7410" SampleRate="22050" BaseNote="DF3"/> <Sample Name="SAMPLE_0_360" FileName="Sample360" SampleRate="22050" BaseNote="DF3"/>
<Sample Name="SAMPLE_0_361" FileName="Sample361" Offset="0x2EF650" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_0_361" FileName="Sample361" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_362" FileName="Sample362" Offset="0x2F3300" SampleRate="32000" BaseNote="DF3"/> <Sample Name="SAMPLE_0_362" FileName="Sample362" SampleRate="32000" BaseNote="DF3"/>
<Sample Name="SAMPLE_0_363" FileName="Sample363" Offset="0x2F8690" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_363" FileName="Sample363" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_364" FileName="Sample364" Offset="0x2F9A90" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_364" FileName="Sample364" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_365" FileName="Sample365" Offset="0x2FD270" SampleRate="32000" BaseNote="F3"/> <Sample Name="SAMPLE_0_365" FileName="Sample365" SampleRate="32000" BaseNote="F3"/>
<Sample Name="SAMPLE_0_366" FileName="Sample366" Offset="0x301EC0" SampleRate="32000" BaseNote="AF5"/> <Sample Name="SAMPLE_0_366" FileName="Sample366" SampleRate="32000" BaseNote="AF5"/>
<Sample Name="SAMPLE_0_367" FileName="Sample367" Offset="0x304E30" SampleRate="22000" BaseNote="C4"/> <Sample Name="SAMPLE_0_367" FileName="Sample367" SampleRate="22000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_368" FileName="Sample368" Offset="0x309BD0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_368" FileName="Sample368" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_369" FileName="Sample369" Offset="0x30C360" SampleRate="32000" BaseNote="D4"/> <Sample Name="SAMPLE_0_369" FileName="Sample369" SampleRate="32000" BaseNote="D4"/>
<Sample Name="SAMPLE_0_370" FileName="Sample370" Offset="0x30EAF0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_370" FileName="Sample370" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_371" FileName="Sample371" Offset="0x317260" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_371" FileName="Sample371" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_372" FileName="Sample372" Offset="0x31F640" SampleRate="32000" BaseNote="C6"/> <Sample Name="SAMPLE_0_372" FileName="Sample372" SampleRate="32000" BaseNote="C6"/>
<Sample Name="SAMPLE_0_373" FileName="Sample373" Offset="0x324660" SampleRate="32000" BaseNote="E4"/> <Sample Name="SAMPLE_0_373" FileName="Sample373" SampleRate="32000" BaseNote="E4"/>
<Sample Name="SAMPLE_0_374" FileName="Sample374" Offset="0x328D10" SampleRate="32000" BaseNote="E3"/> <Sample Name="SAMPLE_0_374" FileName="Sample374" SampleRate="32000" BaseNote="E3"/>
<Sample Name="SAMPLE_0_375" FileName="Sample375" Offset="0x32CA00" SampleRate="32000" BaseNote="E3"/> <Sample Name="SAMPLE_0_375" FileName="Sample375" SampleRate="32000" BaseNote="E3"/>
<Sample Name="SAMPLE_0_376" FileName="Sample376" Offset="0x32ECB0" SampleRate="32000" BaseNote="E4"/> <Sample Name="SAMPLE_0_376" FileName="Sample376" SampleRate="32000" BaseNote="E4"/>
<Sample Name="SAMPLE_0_377" FileName="Sample377" Offset="0x332D10" SampleRate="32000" BaseNote="A2"/> <Sample Name="SAMPLE_0_377" FileName="Sample377" SampleRate="32000" BaseNote="A2"/>
<Sample Name="SAMPLE_0_378" FileName="Sample378" Offset="0x335740" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_378" FileName="Sample378" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_379" FileName="Sample379" Offset="0x337A10" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_379" FileName="Sample379" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_380" FileName="Sample380" Offset="0x338450" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_380" FileName="Sample380" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_381" FileName="Sample381" Offset="0x33A980" SampleRate="32000" BaseNote="AF2"/> <Sample Name="SAMPLE_0_381" FileName="Sample381" SampleRate="32000" BaseNote="AF2"/>
<Sample Name="SAMPLE_0_382" FileName="Sample382" Offset="0x33BC30" SampleRate="32000" BaseNote="EF5"/> <Sample Name="SAMPLE_0_382" FileName="Sample382" SampleRate="32000" BaseNote="EF5"/>
<Sample Name="SAMPLE_0_383" FileName="Sample383" Offset="0x33D130" SampleRate="32000" BaseNote="DF5"/> <Sample Name="SAMPLE_0_383" FileName="Sample383" SampleRate="32000" BaseNote="DF5"/>
<Sample Name="SAMPLE_0_384" FileName="Sample384" Offset="0x3403F0" SampleRate="32000" BaseNote="D3"/> <Sample Name="SAMPLE_0_384" FileName="Sample384" SampleRate="32000" BaseNote="D3"/>
<Sample Name="SAMPLE_0_385" FileName="Sample385" Offset="0x343870" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_385" FileName="Sample385" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_386" FileName="Sample386" Offset="0x34D670" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_386" FileName="Sample386" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_387" FileName="Sample387" Offset="0x351810" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_387" FileName="Sample387" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_388" FileName="Sample388" Offset="0x359170" SampleRate="24000" BaseNote="AF5"/> <Sample Name="SAMPLE_0_388" FileName="Sample388" SampleRate="24000" BaseNote="AF5"/>
<Sample Name="SAMPLE_0_389" FileName="Sample389" Offset="0x35C900" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_389" FileName="Sample389" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_390" FileName="Sample390" Offset="0x35D100" SampleRate="22050" BaseNote="A3"/> <Sample Name="SAMPLE_0_390" FileName="Sample390" SampleRate="32000" BaseNote="C4" VersionInclude="ntsc-1.0,ntsc-1.1"/>
<Sample Name="SAMPLE_0_391" FileName="Sample391" Offset="0x364580" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_391" FileName="Sample391" SampleRate="16000" BaseNote="C4" VersionInclude="ntsc-1.0,ntsc-1.1"/>
<Sample Name="SAMPLE_0_392" FileName="Sample392" Offset="0x36FE80" SampleRate="27777" BaseNote="C4"/> <Sample Name="SAMPLE_0_392" FileName="Sample392" SampleRate="16000" BaseNote="C2" VersionInclude="ntsc-1.0,ntsc-1.1"/>
<Sample Name="SAMPLE_0_393" FileName="Sample393" Offset="0x374C20" SampleRate="32000" BaseNote="D3"/> <Sample Name="SAMPLE_0_393" FileName="Sample393" SampleRate="22050" BaseNote="A3"/>
<Sample Name="SAMPLE_0_394" FileName="Sample394" Offset="0x378360" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_394" FileName="Sample394" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_395" FileName="Sample395" Offset="0x37A6B0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_395" FileName="Sample395" SampleRate="27777" BaseNote="C4"/>
<Sample Name="SAMPLE_0_396" FileName="Sample396" Offset="0x37B2A0" SampleRate="32000" BaseNote="F4"/> <Sample Name="SAMPLE_0_396" FileName="Sample396" SampleRate="32000" BaseNote="D3"/>
<Sample Name="SAMPLE_0_397" FileName="Sample397" Offset="0x382830" SampleRate="32000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_397" FileName="Sample397" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_398" FileName="Sample398" Offset="0x384ED0" SampleRate="32000" BaseNote="BF2"/> <Sample Name="SAMPLE_0_398" FileName="Sample398" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_399" FileName="Sample399" Offset="0x387060" SampleRate="48000" BaseNote="D3"/> <Sample Name="SAMPLE_0_399" FileName="Sample399" SampleRate="32000" BaseNote="F4"/>
<Sample Name="SAMPLE_0_400" FileName="Sample400" Offset="0x38F000" SampleRate="32000" BaseNote="BF4"/> <Sample Name="SAMPLE_0_400" FileName="Sample400" SampleRate="32000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_401" FileName="Sample401" Offset="0x3926D0" SampleRate="32000" BaseNote="BF3"/> <Sample Name="SAMPLE_0_401" FileName="Sample401" SampleRate="32000" BaseNote="BF2"/>
<Sample Name="SAMPLE_0_402" FileName="Sample402" Offset="0x396F80" SampleRate="32000" BaseNote="C6"/> <Sample Name="SAMPLE_0_402" FileName="Sample402" SampleRate="48000" BaseNote="D3"/>
<Sample Name="SAMPLE_0_403" FileName="Sample403" Offset="0x397FA0" SampleRate="32000" BaseNote="G5"/> <Sample Name="SAMPLE_0_403" FileName="Sample403" SampleRate="32000" BaseNote="BF4"/>
<Sample Name="SAMPLE_0_404" FileName="Sample404" Offset="0x399790" SampleRate="24000" BaseNote="GF5"/> <Sample Name="SAMPLE_0_404" FileName="Sample404" SampleRate="32000" BaseNote="BF3"/>
<Sample Name="SAMPLE_0_405" FileName="Sample405" Offset="0x39A6B0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_405" FileName="Sample405" SampleRate="32000" BaseNote="C6"/>
<Sample Name="SAMPLE_0_406" FileName="Sample406" Offset="0x3A4BE0" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_0_406" FileName="Sample406" SampleRate="32000" BaseNote="G5"/>
<Sample Name="SAMPLE_0_407" FileName="Sample407" Offset="0x3AA6E0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_407" FileName="Sample407" SampleRate="24000" BaseNote="GF5"/>
<Sample Name="SAMPLE_0_408" FileName="Sample408" Offset="0x3ACC20" SampleRate="32000" BaseNote="DF4"/> <Sample Name="SAMPLE_0_408" FileName="Sample408" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_409" FileName="Sample409" Offset="0x3AE1C0" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_0_409" FileName="Sample409" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_410" FileName="Sample410" Offset="0x3B45D0" SampleRate="32000" BaseNote="AF5"/> <Sample Name="SAMPLE_0_410" FileName="Sample410" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_411" FileName="Sample411" Offset="0x3B5490" SampleRate="32000" BaseNote="E4"/> <Sample Name="SAMPLE_0_411" FileName="Sample411" SampleRate="32000" BaseNote="DF4"/>
<Sample Name="SAMPLE_0_412" FileName="Sample412" Offset="0x3B63F0" SampleRate="32000" BaseNote="E3"/> <Sample Name="SAMPLE_0_412" FileName="Sample412" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_413" FileName="Sample413" Offset="0x3B71F0" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_0_413" FileName="Sample413" SampleRate="32000" BaseNote="AF5"/>
<Sample Name="SAMPLE_0_414" FileName="Sample414" Offset="0x3B94B0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_414" FileName="Sample414" SampleRate="32000" BaseNote="E4"/>
<Sample Name="SAMPLE_0_415" FileName="Sample415" Offset="0x3BBC80" SampleRate="22050" BaseNote="F6"/> <Sample Name="SAMPLE_0_415" FileName="Sample415" SampleRate="32000" BaseNote="E3"/>
<Sample Name="SAMPLE_0_416" FileName="Sample416" Offset="0x3BE750" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_416" FileName="Sample416" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_417" FileName="Sample417" Offset="0x3BF6A0" SampleRate="32000" BaseNote="A1"/> <Sample Name="SAMPLE_0_417" FileName="Sample417" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_418" FileName="Sample418" Offset="0x3C0360" SampleRate="24000" BaseNote="AF5"/> <Sample Name="SAMPLE_0_418" FileName="Sample418" SampleRate="22050" BaseNote="F6"/>
<Sample Name="SAMPLE_0_419" FileName="Sample419" Offset="0x3C2B40" SampleRate="24000" BaseNote="F4"/> <Sample Name="SAMPLE_0_419" FileName="Sample419" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_420" FileName="Sample420" Offset="0x3C4D00" SampleRate="24000" BaseNote="BF2"/> <Sample Name="SAMPLE_0_420" FileName="Sample420" SampleRate="32000" BaseNote="A1"/>
<Sample Name="SAMPLE_0_421" FileName="Sample421" Offset="0x3C6BD0" SampleRate="32000" BaseNote="EF3"/> <Sample Name="SAMPLE_0_421" FileName="Sample421" SampleRate="24000" BaseNote="AF5"/>
<Sample Name="SAMPLE_0_422" FileName="Sample422" Offset="0x3CAC50" SampleRate="22050" BaseNote="C4"/> <Sample Name="SAMPLE_0_422" FileName="Sample422" SampleRate="24000" BaseNote="F4"/>
<Sample Name="SAMPLE_0_423" FileName="Sample423" Offset="0x3CF8A0" SampleRate="16000" BaseNote="DF6"/> <Sample Name="SAMPLE_0_423" FileName="Sample423" SampleRate="24000" BaseNote="BF2"/>
<Sample Name="SAMPLE_0_424" FileName="Sample424" Offset="0x3D0140" SampleRate="22050" BaseNote="B5"/> <Sample Name="SAMPLE_0_424" FileName="Sample424" SampleRate="32000" BaseNote="EF3"/>
<Sample Name="SAMPLE_0_425" FileName="Sample425" Offset="0x3D0C00" SampleRate="32000" BaseNote="BF4"/> <Sample Name="SAMPLE_0_425" FileName="Sample425" SampleRate="22050" BaseNote="C4"/>
<Sample Name="SAMPLE_0_426" FileName="Sample426" Offset="0x3D3A40" SampleRate="32000" BaseNote="EF4"/> <Sample Name="SAMPLE_0_426" FileName="Sample426" SampleRate="16000" BaseNote="DF6"/>
<Sample Name="SAMPLE_0_427" FileName="Sample427" Offset="0x3D62E0" SampleRate="16000" BaseNote="C2"/> <Sample Name="SAMPLE_0_427" FileName="Sample427" SampleRate="22050" BaseNote="B5"/>
<Sample Name="SAMPLE_0_428" FileName="Sample428" Offset="0x3E3F50" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_0_428" FileName="Sample428" SampleRate="32000" BaseNote="BF4"/>
<Sample Name="SAMPLE_0_429" FileName="Sample429" Offset="0x3E8BB0" SampleRate="32000" BaseNote="BF2"/> <Sample Name="SAMPLE_0_429" FileName="Sample429" SampleRate="32000" BaseNote="EF4"/>
<Sample Name="SAMPLE_0_430" FileName="Sample430" SampleRate="16000" BaseNote="C2" VersionExclude="ntsc-1.0,ntsc-1.1"/>
<Sample Name="SAMPLE_0_431" FileName="Sample431" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_0_432" FileName="Sample432" SampleRate="32000" BaseNote="BF2"/>
</SampleBank> </SampleBank>

View File

@ -1,4 +1,4 @@
<!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ --> <!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ -->
<SampleBank Name="SampleBank_2" Index="2"> <SampleBank Name="SampleBank_2" Index="2">
<Sample Name="SAMPLE_2_0" FileName="Sample0" Offset="0x000000" SampleRate="32000" BaseNote="F4"/> <Sample Name="SAMPLE_2_0" FileName="Sample0" SampleRate="32000" BaseNote="F4"/>
</SampleBank> </SampleBank>

View File

@ -1,8 +1,8 @@
<!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ --> <!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ -->
<SampleBank Name="SampleBank_3" Index="3"> <SampleBank Name="SampleBank_3" Index="3">
<Sample Name="SAMPLE_3_0" FileName="Sample0" Offset="0x000000" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_3_0" FileName="Sample0" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_3_1" FileName="Sample1" Offset="0x008BC0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_3_1" FileName="Sample1" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_3_2" FileName="Sample2" Offset="0x00A590" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_3_2" FileName="Sample2" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_3_3" FileName="Sample3" Offset="0x00B3B0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_3_3" FileName="Sample3" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_3_4" FileName="Sample4" Offset="0x016480" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_3_4" FileName="Sample4" SampleRate="32000" BaseNote="C4"/>
</SampleBank> </SampleBank>

View File

@ -1,8 +1,8 @@
<!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ --> <!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ -->
<SampleBank Name="SampleBank_4" Index="4"> <SampleBank Name="SampleBank_4" Index="4">
<Sample Name="SAMPLE_4_0" FileName="Sample0" Offset="0x000000" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_4_0" FileName="Sample0" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_4_1" FileName="Sample1" Offset="0x006410" SampleRate="32000" BaseNote="AF5"/> <Sample Name="SAMPLE_4_1" FileName="Sample1" SampleRate="32000" BaseNote="AF5"/>
<Sample Name="SAMPLE_4_2" FileName="Sample2" Offset="0x0072D0" SampleRate="32000" BaseNote="E4"/> <Sample Name="SAMPLE_4_2" FileName="Sample2" SampleRate="32000" BaseNote="E4"/>
<Sample Name="SAMPLE_4_3" FileName="Sample3" Offset="0x008230" SampleRate="32000" BaseNote="E3"/> <Sample Name="SAMPLE_4_3" FileName="Sample3" SampleRate="32000" BaseNote="E3"/>
<Sample Name="SAMPLE_4_4" FileName="Sample4" Offset="0x009030" SampleRate="32000" BaseNote="DF4"/> <Sample Name="SAMPLE_4_4" FileName="Sample4" SampleRate="32000" BaseNote="DF4"/>
</SampleBank> </SampleBank>

View File

@ -1,9 +1,9 @@
<!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ --> <!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ -->
<SampleBank Name="SampleBank_5" Index="5"> <SampleBank Name="SampleBank_5" Index="5">
<Sample Name="SAMPLE_5_0" FileName="Sample0" Offset="0x000000" SampleRate="16000" BaseNote="C4"/> <Sample Name="SAMPLE_5_0" FileName="Sample0" SampleRate="16000" BaseNote="C4"/>
<Sample Name="SAMPLE_5_1" FileName="Sample1" Offset="0x002540" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_5_1" FileName="Sample1" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_5_2" FileName="Sample2" Offset="0x004800" SampleRate="22050" BaseNote="BF4"/> <Sample Name="SAMPLE_5_2" FileName="Sample2" SampleRate="22050" BaseNote="BF4"/>
<Sample Name="SAMPLE_5_3" FileName="Sample3" Offset="0x0072D0" SampleRate="16000" BaseNote="DF6"/> <Sample Name="SAMPLE_5_3" FileName="Sample3" SampleRate="16000" BaseNote="DF6"/>
<Sample Name="SAMPLE_5_4" FileName="Sample4" Offset="0x007B70" SampleRate="22050" BaseNote="B5"/> <Sample Name="SAMPLE_5_4" FileName="Sample4" SampleRate="22050" BaseNote="B5"/>
<Sample Name="SAMPLE_5_5" FileName="Sample5" Offset="0x008630" SampleRate="22050" BaseNote="A3"/> <Sample Name="SAMPLE_5_5" FileName="Sample5" SampleRate="22050" BaseNote="A3"/>
</SampleBank> </SampleBank>

View File

@ -1,10 +1,10 @@
<!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ --> <!-- This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/ -->
<SampleBank Name="SampleBank_6" Index="6"> <SampleBank Name="SampleBank_6" Index="6">
<Sample Name="SAMPLE_6_0" FileName="Sample0" Offset="0x000000" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_6_0" FileName="Sample0" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_6_1" FileName="Sample1" Offset="0x00B0D0" SampleRate="32000" BaseNote="BF2"/> <Sample Name="SAMPLE_6_1" FileName="Sample1" SampleRate="32000" BaseNote="BF2"/>
<Sample Name="SAMPLE_6_2" FileName="Sample2" Offset="0x00E120" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_6_2" FileName="Sample2" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_6_3" FileName="Sample3" Offset="0x0103E0" SampleRate="22050" BaseNote="BF4"/> <Sample Name="SAMPLE_6_3" FileName="Sample3" SampleRate="22050" BaseNote="BF4"/>
<Sample Name="SAMPLE_6_4" FileName="Sample4" Offset="0x012EB0" SampleRate="32000" BaseNote="C4"/> <Sample Name="SAMPLE_6_4" FileName="Sample4" SampleRate="32000" BaseNote="C4"/>
<Sample Name="SAMPLE_6_5" FileName="Sample5" Offset="0x01D3E0" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_6_5" FileName="Sample5" SampleRate="24000" BaseNote="C4"/>
<Sample Name="SAMPLE_6_6" FileName="Sample6" Offset="0x022EE0" SampleRate="24000" BaseNote="C4"/> <Sample Name="SAMPLE_6_6" FileName="Sample6" SampleRate="24000" BaseNote="C4"/>
</SampleBank> </SampleBank>

View File

@ -5,16 +5,19 @@
<Envelope Name="Env1"/> <Envelope Name="Env1"/>
<Envelope Name="Env2"/> <Envelope Name="Env2"/>
<Envelope Name="Env3"/> <Envelope Name="Env3"/>
<Envelope Name="Env4"/> <Envelope Name="Env4" VersionExclude="ntsc-1.0,ntsc-1.1"/>
</Envelopes> </Envelopes>
<Instruments> <Instruments>
<Instrument ProgramNumber="0" Name="INST_0" VersionInclude="ntsc-1.0,ntsc-1.1"/>
<Instrument ProgramNumber="1" Name="INST_1" VersionInclude="ntsc-1.0,ntsc-1.1"/>
<Instrument ProgramNumber="2" Name="INST_2" VersionInclude="ntsc-1.0,ntsc-1.1"/>
<Instrument ProgramNumber="3" Name="INST_3"/> <Instrument ProgramNumber="3" Name="INST_3"/>
<Instrument ProgramNumber="5" Name="INST_5"/> <Instrument ProgramNumber="5" Name="INST_5"/>
<Instrument ProgramNumber="6" Name="INST_6"/> <Instrument ProgramNumber="6" Name="INST_6"/>
<Instrument ProgramNumber="10" Name="INST_10"/> <Instrument ProgramNumber="10" Name="INST_10" VersionExclude="ntsc-1.0,ntsc-1.1"/>
<Instrument ProgramNumber="11" Name="INST_11"/> <Instrument ProgramNumber="11" Name="INST_11" VersionExclude="ntsc-1.0,ntsc-1.1"/>
<Instrument ProgramNumber="12" Name="INST_12"/> <Instrument ProgramNumber="12" Name="INST_12" VersionExclude="ntsc-1.0,ntsc-1.1"/>
<Instrument ProgramNumber="13" Name="INST_13"/> <Instrument ProgramNumber="13" Name="INST_13" VersionExclude="ntsc-1.0,ntsc-1.1"/>
</Instruments> </Instruments>
<Drums> <Drums>
<Drum Name="DRUM_0"/> <Drum Name="DRUM_0"/>

View File

@ -8,17 +8,18 @@ import os, shutil, time
from dataclasses import dataclass from dataclasses import dataclass
from multiprocessing.pool import ThreadPool from multiprocessing.pool import ThreadPool
from typing import Dict, List, Tuple, Union from typing import Dict, List, Tuple, Union
from xml.etree import ElementTree
from xml.etree.ElementTree import Element
from .audio_tables import AudioCodeTable, AudioCodeTableEntry, AudioStorageMedium from .audio_tables import AudioCodeTable, AudioCodeTableEntry, AudioStorageMedium
from .audiotable import AudioTableData, AudioTableFile, AudioTableSample from .audiotable import AudioTableData, AudioTableFile, AudioTableSample
from .audiobank_file import AudiobankFile from .audiobank_file import AudiobankFile
from .disassemble_sequence import CMD_SPEC, SequenceDisassembler, SequenceTableSpec, MMLVersion from .disassemble_sequence import CMD_SPEC, SequenceDisassembler, SequenceTableSpec, MMLVersion
from .util import align, debugm, error, incbin, program_get, XMLWriter from .extraction_xml import ExtractionDescription, SampleBankExtractionDescription, SoundFontExtractionDescription, SequenceExtractionDescription
from .util import align, incbin, program_get, XMLWriter
@dataclass @dataclass
class GameVersionInfo: class GameVersionInfo:
# Version Name
version_name : str
# Music Macro Language Version # Music Macro Language Version
mml_version : MMLVersion mml_version : MMLVersion
# Soundfont table code offset # Soundfont table code offset
@ -49,7 +50,7 @@ BASEROM_DEBUG = False
# ====================================================================================================================== # ======================================================================================================================
def collect_sample_banks(audiotable_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo, def collect_sample_banks(audiotable_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo,
table : AudioCodeTable, samplebank_xmls : Dict[int, Tuple[str, Element]]): table : AudioCodeTable, samplebank_descs : Dict[int, SampleBankExtractionDescription]):
sample_banks : List[Union[AudioTableFile, int]] = [] sample_banks : List[Union[AudioTableFile, int]] = []
for i,entry in enumerate(table): for i,entry in enumerate(table):
@ -72,7 +73,7 @@ def collect_sample_banks(audiotable_seg : memoryview, extracted_dir : str, versi
bug = i in version_info.audiotable_buffer_bugs bug = i in version_info.audiotable_buffer_bugs
bank = AudioTableFile(i, audiotable_seg, entry, table.rom_addr, buffer_bug=bug, bank = AudioTableFile(i, audiotable_seg, entry, table.rom_addr, buffer_bug=bug,
extraction_xml=samplebank_xmls.get(i, None)) extraction_desc=samplebank_descs.get(i, None))
if BASEROM_DEBUG: if BASEROM_DEBUG:
bank.dump_bin(f"{extracted_dir}/baserom_audiotest/audiotable_files/{bank.file_name}.bin") bank.dump_bin(f"{extracted_dir}/baserom_audiotest/audiotable_files/{bank.file_name}.bin")
@ -90,7 +91,7 @@ def bank_data_lookup(sample_banks : List[Union[AudioTableFile, int]], e : Union[
return e return e
def collect_soundfonts(audiobank_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo, def collect_soundfonts(audiobank_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo,
sound_font_table : AudioCodeTable, soundfont_xmls : Dict[int, Tuple[str, Element]], sound_font_table : AudioCodeTable, soundfont_descs : Dict[int, SoundFontExtractionDescription],
sample_banks : List[Union[AudioTableFile, int]]): sample_banks : List[Union[AudioTableFile, int]]):
soundfonts = [] soundfonts = []
@ -104,7 +105,7 @@ def collect_soundfonts(audiobank_seg : memoryview, extracted_dir : str, version_
# Read the data # Read the data
soundfont = AudiobankFile(audiobank_seg, i, entry, sound_font_table.rom_addr, bank1, bank2, soundfont = AudiobankFile(audiobank_seg, i, entry, sound_font_table.rom_addr, bank1, bank2,
entry.sample_bank_id_1, entry.sample_bank_id_2, entry.sample_bank_id_1, entry.sample_bank_id_2,
extraction_xml=soundfont_xmls.get(i, None)) extraction_desc=soundfont_descs.get(i, None))
soundfonts.append(soundfont) soundfonts.append(soundfont)
if BASEROM_DEBUG: if BASEROM_DEBUG:
@ -186,7 +187,7 @@ def disassemble_one_sequence(extracted_dir : str, version_info : GameVersionInfo
def extract_sequences(audioseq_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo, write_xml : bool, def extract_sequences(audioseq_seg : memoryview, extracted_dir : str, version_info : GameVersionInfo, write_xml : bool,
sequence_table : AudioCodeTable, sequence_font_table : memoryview, sequence_table : AudioCodeTable, sequence_font_table : memoryview,
sequence_xmls : Dict[int, Element], soundfonts : List[AudiobankFile]): sequence_descs : Dict[int, SequenceExtractionDescription], soundfonts : List[AudiobankFile]):
sequence_font_table_cvg = [0] * len(sequence_font_table) sequence_font_table_cvg = [0] * len(sequence_font_table)
@ -237,13 +238,13 @@ def extract_sequences(audioseq_seg : memoryview, extracted_dir : str, version_in
with open(f"{extracted_dir}/baserom_audiotest/audioseq_files/seq_{i}{ext}.aseq", "wb") as outfile: with open(f"{extracted_dir}/baserom_audiotest/audioseq_files/seq_{i}{ext}.aseq", "wb") as outfile:
outfile.write(seq_data) outfile.write(seq_data)
extraction_xml = sequence_xmls.get(i, None) extraction_desc = sequence_descs.get(i, None)
if extraction_xml is None: if extraction_desc is None:
sequence_filename = f"seq_{i}" sequence_filename = f"seq_{i}"
sequence_name = f"Sequence_{i}" sequence_name = f"Sequence_{i}"
else: else:
sequence_filename = extraction_xml[0] sequence_filename = extraction_desc.file_name
sequence_name = extraction_xml[1].attrib["Name"] sequence_name = extraction_desc.name
# Write extraction xml entry # Write extraction xml entry
if write_xml: if write_xml:
@ -359,27 +360,22 @@ def extract_audio_for_version(version_info : GameVersionInfo, extracted_dir : st
# Collect extraction xmls # Collect extraction xmls
# ================================================================================================================== # ==================================================================================================================
samplebank_xmls : Dict[int, Tuple[str, Element]] = {} samplebank_descs : Dict[int, SampleBankExtractionDescription] = {}
soundfont_xmls : Dict[int, Tuple[str, Element]] = {} soundfont_descs : Dict[int, SoundFontExtractionDescription] = {}
sequence_xmls : Dict[int, Tuple[str, Element]] = {} sequence_descs : Dict[int, SequenceExtractionDescription] = {}
if read_xml: if read_xml:
# Read all present xmls # Read all present xmls
def walk_xmls(out_dict : Dict[int, Tuple[str, Element]], path : str, typename : str): def walk_xmls(T : type, out_dict : Dict[int, ExtractionDescription], path : str):
for root,_,files in os.walk(path): for root,_,files in os.walk(path):
for f in files: for f in files:
fullpath = os.path.join(root, f) desc : ExtractionDescription = T(os.path.join(root, f), f, version_info.version_name)
xml = ElementTree.parse(fullpath) out_dict[desc.index] = desc
xml_root = xml.getroot()
if xml_root.tag != typename or "Name" not in xml_root.attrib or "Index" not in xml_root.attrib: walk_xmls(SampleBankExtractionDescription, samplebank_descs, f"assets/xml/audio/samplebanks")
error(f"Malformed {typename} extraction xml: \"{fullpath}\"") walk_xmls(SoundFontExtractionDescription, soundfont_descs, f"assets/xml/audio/soundfonts")
out_dict[int(xml_root.attrib["Index"])] = (f.replace(".xml", ""), xml_root) walk_xmls(SequenceExtractionDescription, sequence_descs, f"assets/xml/audio/sequences")
walk_xmls(samplebank_xmls, f"assets/xml/audio/samplebanks", "SampleBank")
walk_xmls(soundfont_xmls, f"assets/xml/audio/soundfonts", "SoundFont")
walk_xmls(sequence_xmls, f"assets/xml/audio/sequences", "Sequence")
# TODO warn about any missing xmls or xmls with a bad index # TODO warn about any missing xmls or xmls with a bad index
@ -389,7 +385,7 @@ def extract_audio_for_version(version_info : GameVersionInfo, extracted_dir : st
if BASEROM_DEBUG: if BASEROM_DEBUG:
os.makedirs(f"{extracted_dir}/baserom_audiotest/audiotable_files", exist_ok=True) os.makedirs(f"{extracted_dir}/baserom_audiotest/audiotable_files", exist_ok=True)
sample_banks = collect_sample_banks(audiotable_seg, extracted_dir, version_info, sample_bank_table, samplebank_xmls) sample_banks = collect_sample_banks(audiotable_seg, extracted_dir, version_info, sample_bank_table, samplebank_descs)
# ================================================================================================================== # ==================================================================================================================
# Collect soundfonts # Collect soundfonts
@ -397,7 +393,7 @@ def extract_audio_for_version(version_info : GameVersionInfo, extracted_dir : st
if BASEROM_DEBUG: if BASEROM_DEBUG:
os.makedirs(f"{extracted_dir}/baserom_audiotest/audiobank_files", exist_ok=True) os.makedirs(f"{extracted_dir}/baserom_audiotest/audiobank_files", exist_ok=True)
soundfonts = collect_soundfonts(audiobank_seg, extracted_dir, version_info, sound_font_table, soundfont_xmls, soundfonts = collect_soundfonts(audiobank_seg, extracted_dir, version_info, sound_font_table, soundfont_descs,
sample_banks) sample_banks)
# ================================================================================================================== # ==================================================================================================================
@ -459,4 +455,4 @@ def extract_audio_for_version(version_info : GameVersionInfo, extracted_dir : st
print("Extracting sequences...") print("Extracting sequences...")
extract_sequences(audioseq_seg, extracted_dir, version_info, write_xml, sequence_table, sequence_font_table, extract_sequences(audioseq_seg, extracted_dir, version_info, write_xml, sequence_table, sequence_font_table,
sequence_xmls, soundfonts) sequence_descs, soundfonts)

View File

@ -5,13 +5,13 @@
# #
import struct import struct
from typing import Optional, Tuple from typing import Optional
from xml.etree.ElementTree import Element
from .audio_tables import AudioCodeTableEntry from .audio_tables import AudioCodeTableEntry
from .audiobank_structs import AdpcmBook, AdpcmLoop, Drum, Instrument, SoundFontSample, SoundFontSound from .audiobank_structs import AdpcmBook, AdpcmLoop, Drum, Instrument, SoundFontSample, SoundFontSound
from .envelope import Envelope
from .audiotable import AudioTableFile, AudioTableSample from .audiotable import AudioTableFile, AudioTableSample
from .envelope import Envelope
from .extraction_xml import SoundFontExtractionDescription
from .tuning import pitch_names from .tuning import pitch_names
from .util import XMLWriter, align, debugm, merge_like_ranges, merge_ranges from .util import XMLWriter, align, debugm, merge_like_ranges, merge_ranges
@ -183,7 +183,7 @@ class AudiobankFile:
def __init__(self, audiobank_seg : memoryview, index : int, table_entry : AudioCodeTableEntry, def __init__(self, audiobank_seg : memoryview, index : int, table_entry : AudioCodeTableEntry,
seg_offset : int, bank1 : AudioTableFile, bank2 : AudioTableFile, bank1_num : int, bank2_num : int, seg_offset : int, bank1 : AudioTableFile, bank2 : AudioTableFile, bank1_num : int, bank2_num : int,
extraction_xml : Tuple[str, Element] = None): extraction_desc : Optional[SoundFontExtractionDescription] = None):
self.bank_num = index self.bank_num = index
self.table_entry : AudioCodeTableEntry = table_entry self.table_entry : AudioCodeTableEntry = table_entry
self.num_instruments = self.table_entry.num_instruments self.num_instruments = self.table_entry.num_instruments
@ -193,7 +193,7 @@ class AudiobankFile:
self.bank1_num = bank1_num self.bank1_num = bank1_num
self.bank2_num = bank2_num self.bank2_num = bank2_num
if extraction_xml is None: if extraction_desc is None:
self.file_name = f"Soundfont_{self.bank_num}" self.file_name = f"Soundfont_{self.bank_num}"
self.name = f"Soundfont_{self.bank_num}" self.name = f"Soundfont_{self.bank_num}"
@ -201,32 +201,22 @@ class AudiobankFile:
self.extraction_instruments_info = None self.extraction_instruments_info = None
self.extraction_drums_info = None self.extraction_drums_info = None
self.extraction_effects_info = None self.extraction_effects_info = None
self.extraction_envelopes_info_versions = []
self.extraction_instruments_info_versions = {}
self.extraction_drums_info_versions = []
self.extraction_effects_info_versions = []
else: else:
self.file_name = extraction_xml[0] self.file_name = extraction_desc.file_name
self.name = extraction_xml[1].attrib["Name"] self.name = extraction_desc.name
self.extraction_envelopes_info = [] self.extraction_envelopes_info = extraction_desc.envelopes_info
self.extraction_instruments_info = {} self.extraction_instruments_info = extraction_desc.instruments_info
self.extraction_drums_info = [] self.extraction_drums_info = extraction_desc.drums_info
self.extraction_effects_info = [] self.extraction_effects_info = extraction_desc.effects_info
self.extraction_envelopes_info_versions = extraction_desc.envelopes_info_versions
for item in extraction_xml[1]: self.extraction_instruments_info_versions = extraction_desc.instruments_info_versions
if item.tag == "Envelopes": self.extraction_drums_info_versions = extraction_desc.drums_info_versions
for env in item: self.extraction_effects_info_versions = extraction_desc.effects_info_versions
assert env.tag == "Envelope"
self.extraction_envelopes_info.append(env.attrib["Name"])
elif item.tag == "Instruments":
for instr in item:
assert instr.tag == "Instrument"
self.extraction_instruments_info[int(instr.attrib["ProgramNumber"])] = instr.attrib["Name"]
elif item.tag == "Drums":
for drum in item:
self.extraction_drums_info.append(drum.attrib["Name"])
elif item.tag == "Effects":
for effect in item:
self.extraction_effects_info.append(effect.attrib["Name"])
else:
assert False, item.tag
# Coverage consists of a list of itervals of the form [[start,type],[end,type]] # Coverage consists of a list of itervals of the form [[start,type],[end,type]]
self.coverage = [] self.coverage = []
@ -755,25 +745,25 @@ class AudiobankFile:
# TODO resolve decay/release index overrides? # TODO resolve decay/release index overrides?
def envelope_name(self, index): def envelope_name(self, index):
if self.extraction_envelopes_info is not None: if self.extraction_envelopes_info is not None and index < len(self.extraction_envelopes_info):
return self.extraction_envelopes_info[index] return self.extraction_envelopes_info[index]
else: else:
return f"Env{index}" return f"Env{index}"
def instrument_name(self, program_number): def instrument_name(self, program_number):
if self.extraction_instruments_info is not None: if self.extraction_instruments_info is not None and program_number in self.extraction_instruments_info:
return self.extraction_instruments_info[program_number] return self.extraction_instruments_info[program_number]
else: else:
return f"INST_{program_number}" return f"INST_{program_number}"
def drum_grp_name(self, index): def drum_grp_name(self, index):
if self.extraction_drums_info is not None: if self.extraction_drums_info is not None and index < len(self.extraction_drums_info):
return self.extraction_drums_info[index] return self.extraction_drums_info[index]
else: else:
return f"DRUM_{index}" return f"DRUM_{index}"
def effect_name(self, index): def effect_name(self, index):
if self.extraction_effects_info is not None: if self.extraction_effects_info is not None and index < len(self.extraction_effects_info):
return self.extraction_effects_info[index] return self.extraction_effects_info[index]
else: else:
return f"EFFECT_{index}" return f"EFFECT_{index}"
@ -905,21 +895,41 @@ class AudiobankFile:
# add contents for names # add contents for names
if len(self.envelopes) != 0: if len(self.envelopes) != 0 or len(self.extraction_envelopes_info_versions) != 0:
xml.write_start_tag("Envelopes") xml.write_start_tag("Envelopes")
for i in range(len(self.envelopes)): # First write envelopes that were defined in the extraction xml, possibly interleaved with envelopes
# we ignored for this version
i = 0
for envelope_entry,in_version in self.extraction_envelopes_info_versions:
xml.write_element("Envelope", envelope_entry)
# Count how many envelopes we saw that were defined for this version
i += in_version
# Write any remaining envelopes that weren't defined in the xml
for j in range(i, len(self.envelopes)):
xml.write_element("Envelope", { xml.write_element("Envelope", {
"Name" : self.envelope_name(i) "Name" : self.envelope_name(j)
}) })
xml.write_end_tag() xml.write_end_tag()
if len(self.instruments) != 0: if len(self.instruments) != 0 or len(self.extraction_instruments_info_versions) != 0:
xml.write_start_tag("Instruments") xml.write_start_tag("Instruments")
# Write in struct order # Write in struct order
for instr in sorted(self.instruments, key=lambda instr : instr.struct_index): sorted_instruments = tuple(sorted(self.instruments, key=lambda instr : instr.struct_index))
# First write instruments that were defined in the extraction xml, possibly interleaved with instruments
# we ignored for this version
i = 0
for instr_entry,in_version in self.extraction_instruments_info_versions:
xml.write_element("Instrument", instr_entry)
# Count how many instruments we saw that were defined for this version
i += in_version
# Write any remaining instruments that weren't defined in the xml
for instr in sorted_instruments[i:]:
instr : Instrument instr : Instrument
if not instr.unused: if not instr.unused:
xml.write_element("Instrument", { xml.write_element("Instrument", {
@ -929,23 +939,39 @@ class AudiobankFile:
xml.write_end_tag() xml.write_end_tag()
if any(isinstance(dg, DrumGroup) for dg in self.drum_groups): if any(isinstance(dg, DrumGroup) for dg in self.drum_groups) or len(self.extraction_drums_info_versions):
xml.write_start_tag("Drums") xml.write_start_tag("Drums")
for i,drum_grp in enumerate(self.drum_groups): # First write drums that were defined in the extraction xml, possibly interleaved with drums
# we ignored for this version
i = 0
for drum_entry,in_version in self.extraction_drums_info_versions:
xml.write_element("Drum", drum_entry)
# Count how many drum groups we saw that were defined for this version
i += in_version
for j,drum_grp in enumerate(self.drum_groups[i:], i):
if isinstance(drum_grp, DrumGroup): if isinstance(drum_grp, DrumGroup):
xml.write_element("Drum", { xml.write_element("Drum", {
"Name" : self.drum_grp_name(i) "Name" : self.drum_grp_name(j)
}) })
xml.write_end_tag() xml.write_end_tag()
if len(self.sfx) != 0: if len(self.sfx) != 0 or len(self.extraction_effects_info_versions):
xml.write_start_tag("Effects") xml.write_start_tag("Effects")
for i,sfx in enumerate(self.sfx): # First write effects that were defined in the extraction xml, possibly interleaved with effects
# we ignored for this version
i = 0
for sfx_entry,in_version in self.extraction_effects_info_versions:
xml.write_element("Effect", sfx_entry)
# Count how many effects we saw that were defined for this version
i += in_version
for j,sfx in enumerate(self.sfx[i:], i):
xml.write_element("Effect", { xml.write_element("Effect", {
"Name" : self.effect_name(i) "Name" : self.effect_name(j)
}) })
xml.write_end_tag() xml.write_end_tag()

View File

@ -5,11 +5,11 @@
# #
import math, struct import math, struct
from typing import Dict, Tuple from typing import Dict, Optional
from xml.etree.ElementTree import Element
from .audio_tables import AudioCodeTableEntry from .audio_tables import AudioCodeTableEntry
from .audiobank_structs import AudioSampleCodec, SoundFontSample, AdpcmBook, AdpcmLoop from .audiobank_structs import AudioSampleCodec, SoundFontSample, AdpcmBook, AdpcmLoop
from .extraction_xml import SampleBankExtractionDescription
from .tuning import pitch_names, note_z64_to_midi, recalc_tuning, rate_from_tuning, rank_rates_notes, BAD_FLOATS from .tuning import pitch_names, note_z64_to_midi, recalc_tuning, rate_from_tuning, rank_rates_notes, BAD_FLOATS
from .util import align, error, XMLWriter, f32_to_u32 from .util import align, error, XMLWriter, f32_to_u32
@ -207,7 +207,7 @@ class AudioTableSample(AudioTableData):
def base_note_number(self): def base_note_number(self):
return note_z64_to_midi(pitch_names.index(self.base_note)) return note_z64_to_midi(pitch_names.index(self.base_note))
def resolve_basenote_rate(self, extraction_sample_info : Dict[int, Dict[str,str]]): def resolve_basenote_rate(self, extraction_sample_info : Optional[Dict[str,str]]):
assert len(self.notes_rates) != 0 assert len(self.notes_rates) != 0
# rate_3ds = None # rate_3ds = None
@ -285,13 +285,9 @@ class AudioTableSample(AudioTableData):
final_rate,(final_note,) = rank_rates_notes(finalists) final_rate,(final_note,) = rank_rates_notes(finalists)
if extraction_sample_info is not None: if extraction_sample_info is not None:
if self.start in extraction_sample_info: assert "SampleRate" in extraction_sample_info and "BaseNote" in extraction_sample_info
entry = extraction_sample_info[self.start] final_rate = int(extraction_sample_info["SampleRate"])
if "SampleRate" in entry and "BaseNote" in entry: final_note = extraction_sample_info["BaseNote"]
final_rate = int(entry["SampleRate"])
final_note = entry["BaseNote"]
else:
print(f"WARNING: Missing extraction xml entry for sample at offset=0x{self.start:X}")
# print(" ",len(FINAL_NOTES_RATES), FINAL_NOTES_RATES) # print(" ",len(FINAL_NOTES_RATES), FINAL_NOTES_RATES)
# if rate_3ds is not None and len(FINAL_NOTES_RATES) == 1: # if rate_3ds is not None and len(FINAL_NOTES_RATES) == 1:
@ -385,7 +381,8 @@ class AudioTableFile:
""" """
def __init__(self, bank_num : int, audiotable_seg : memoryview, table_entry : AudioCodeTableEntry, def __init__(self, bank_num : int, audiotable_seg : memoryview, table_entry : AudioCodeTableEntry,
seg_offset : int, buffer_bug : bool = False, extraction_xml : Tuple[str, Element] = None): seg_offset : int, buffer_bug : bool = False,
extraction_desc : Optional[SampleBankExtractionDescription] = None):
self.bank_num = bank_num self.bank_num = bank_num
self.table_entry : AudioCodeTableEntry = table_entry self.table_entry : AudioCodeTableEntry = table_entry
self.data = self.table_entry.data(audiotable_seg, seg_offset) self.data = self.table_entry.data(audiotable_seg, seg_offset)
@ -393,24 +390,18 @@ class AudioTableFile:
self.samples_final = None self.samples_final = None
if extraction_xml is None: if extraction_desc is None:
self.file_name = f"SampleBank_{self.bank_num}" self.file_name = f"SampleBank_{self.bank_num}"
self.name = f"SampleBank_{self.bank_num}" self.name = f"SampleBank_{self.bank_num}"
self.extraction_sample_info_versions = []
self.extraction_sample_info = None self.extraction_sample_info = None
self.extraction_blob_info = None self.extraction_blob_info = None
else: else:
self.file_name = extraction_xml[0] self.file_name = extraction_desc.file_name
self.name = extraction_xml[1].attrib["Name"] self.name = extraction_desc.name
self.extraction_sample_info_versions = extraction_desc.sample_info_versions
self.extraction_sample_info = {} self.extraction_sample_info = extraction_desc.sample_info
self.extraction_blob_info = {} self.extraction_blob_info = extraction_desc.blob_info
for item in extraction_xml[1]:
if item.tag == "Sample":
self.extraction_sample_info[int(item.attrib["Offset"], 16)] = item.attrib
elif item.tag == "Blob":
self.extraction_blob_info[int(item.attrib["Offset"], 16)] = item.attrib
else:
assert False
self.pointer_indices = [] self.pointer_indices = []
@ -461,28 +452,24 @@ class AudioTableFile:
return self.samples[offset] return self.samples[offset]
def sample_name(self, sample : AudioTableSample, index : int): def sample_name(self, sample : AudioTableSample, index : int):
if self.extraction_sample_info is not None: if self.extraction_sample_info is not None and index < len(self.extraction_sample_info):
if sample.start in self.extraction_sample_info: return self.extraction_sample_info[index]["Name"]
return self.extraction_sample_info[sample.start]["Name"]
print(f"WARNING: Missing extraction xml entry for sample at offset=0x{sample.start:X}")
return f"SAMPLE_{self.bank_num}_{index}" return f"SAMPLE_{self.bank_num}_{index}"
def sample_filename(self, sample : AudioTableSample, index : int): def sample_filename(self, sample : AudioTableSample, index : int):
ext = sample.codec_file_extension_compressed() ext = sample.codec_file_extension_compressed()
if self.extraction_sample_info is not None: if self.extraction_sample_info is not None and index < len(self.extraction_sample_info):
if sample.start in self.extraction_sample_info: return self.extraction_sample_info[index]["FileName"] + ext
return self.extraction_sample_info[sample.start]["FileName"] + ext
print(f"WARNING: Missing extraction xml entry for sample at offset=0x{sample.start:X}")
npad = int(math.floor(1 + math.log10(len(self.samples)))) if len(self.samples) != 0 else 0 npad = int(math.floor(1 + math.log10(len(self.samples)))) if len(self.samples) != 0 else 0
return f"Sample{index:0{npad}}{ext}" return f"Sample{index:0{npad}}{ext}"
def blob_filename(self, start, end): def blob_filename(self, start, end, index):
if self.extraction_blob_info is not None: if self.extraction_blob_info is not None and index < len(self.extraction_blob_info):
if start in self.extraction_blob_info: return self.extraction_blob_info[index]["Name"]
return self.extraction_blob_info[start]["Name"]
print(f"WARNING: Missing extraction xml entry for blob at offset=0x{start:X}")
return f"UNACCOUNTED_{start:X}_{end:X}" return f"UNACCOUNTED_{start:X}_{end:X}"
def finalize_samples(self): def finalize_samples(self):
@ -490,7 +477,7 @@ class AudioTableFile:
for i,sample in enumerate(self.samples_final): for i,sample in enumerate(self.samples_final):
sample : AudioTableSample sample : AudioTableSample
sample.resolve_basenote_rate(self.extraction_sample_info) sample.resolve_basenote_rate(self.extraction_sample_info[i] if self.extraction_sample_info is not None else None)
def finalize_coverage(self, all_sample_banks): def finalize_coverage(self, all_sample_banks):
if len(self.coverage) != 0: if len(self.coverage) != 0:
@ -577,6 +564,7 @@ class AudioTableFile:
def assign_names(self): def assign_names(self):
i = 0 i = 0
j = 0
for sample in self.samples_final: for sample in self.samples_final:
if isinstance(sample, AudioTableSample): if isinstance(sample, AudioTableSample):
sample : AudioTableSample sample : AudioTableSample
@ -587,9 +575,10 @@ class AudioTableFile:
else: else:
sample : AudioTableData sample : AudioTableData
name = self.blob_filename(sample.start, sample.end) name = self.blob_filename(sample.start, sample.end, j)
sample.name = name sample.name = name
sample.filename = f"{name}.bin" sample.filename = f"{name}.bin"
j += 1
def to_xml(self, base_path): def to_xml(self, base_path):
xml = XMLWriter() xml = XMLWriter()
@ -635,33 +624,36 @@ class AudioTableFile:
xml.write_comment("This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/") xml.write_comment("This file is only for extraction of vanilla data. For other purposes see assets/audio/samplebanks/")
start = { xml.write_start_tag("SampleBank", {
"Name" : self.name, "Name" : self.name,
"Index" : self.bank_num, "Index" : self.bank_num,
} })
xml.write_start_tag("SampleBank", start)
# Write elements from the old xml version verbatim
i = 0 i = 0
for sample in self.samples_final: for entry_name,entry_attrs,in_version in self.extraction_sample_info_versions:
xml.write_element(entry_name, entry_attrs)
i += in_version
# Write any new elements
for sample in self.samples_final[i:]:
if isinstance(sample, AudioTableSample): if isinstance(sample, AudioTableSample):
sample : AudioTableSample sample : AudioTableSample
xml.write_element("Sample", { attrs = {
"Name" : sample.name, "Name" : sample.name,
"FileName" : sample.filename.replace(sample.codec_file_extension_compressed(), ""), "FileName" : sample.filename.replace(sample.codec_file_extension_compressed(), ""),
"Offset" : f"0x{sample.start:06X}",
"SampleRate" : sample.sample_rate, "SampleRate" : sample.sample_rate,
"BaseNote" : sample.base_note, "BaseNote" : sample.base_note,
}) }
i += 1 xml.write_element("Sample", attrs)
else: else:
sample : AudioTableData sample : AudioTableData
xml.write_element("Blob", { attrs = {
"Name" : sample.name, "Name" : sample.name,
"Offset" : f"0x{sample.start:06X}", }
"Size" : f"0x{sample.end - sample.start:X}", xml.write_element("Blob", attrs)
})
xml.write_end_tag() xml.write_end_tag()

View File

@ -0,0 +1,135 @@
# SPDX-FileCopyrightText: © 2024 ZeldaRET
# SPDX-License-Identifier: CC0-1.0
#
#
#
from xml.etree import ElementTree
from xml.etree.ElementTree import Element
from .util import error
class ExtractionDescription:
def __init__(self, file_path : str, file_name : str, version_name : str) -> None:
self.type_name = type(self).__name__.replace("ExtractionDescription", "")
self.file_name = file_name.replace(".xml", "")
self.file_path = file_path
xml_root = ElementTree.parse(file_path).getroot()
if xml_root.tag != self.type_name or "Name" not in xml_root.attrib or "Index" not in xml_root.attrib:
error(f"Malformed {self.type_name} extraction xml: \"{file_path}\"")
self.name = xml_root.attrib["Name"]
self.index = int(xml_root.attrib["Index"])
self.post_init(xml_root, version_name)
def post_init(self, xml_root : Element, version_name : str):
raise NotImplementedError() # Implement in subclass
def in_version(self, version_include, version_exclude, version_name : str):
if version_include == "":
version_include = "All"
if version_exclude == "":
version_exclude = "None"
# Determine if this layout is the one we need
if version_include != "All":
version_include = version_include.split(",")
if version_exclude != "None":
version_exclude = version_exclude.split(",")
included = version_include == "All" or version_name in version_include
excluded = version_exclude != "None" and version_name in version_exclude
return included and not excluded
class SampleBankExtractionDescription(ExtractionDescription):
def post_init(self, xml_root : Element, version_name : str):
self.included_version = None
self.sample_info = []
self.sample_info_versions = []
self.blob_info = []
for item in xml_root:
if item.tag == "Sample":
version_include = item.attrib.get("VersionInclude", "")
version_exclude = item.attrib.get("VersionExclude", "")
in_version = self.in_version(version_include, version_exclude, version_name)
if in_version:
self.sample_info.append(item.attrib)
self.sample_info_versions.append((item.tag, item.attrib, in_version))
elif item.tag == "Blob":
version_include = item.attrib.get("VersionInclude", "")
version_exclude = item.attrib.get("VersionExclude", "")
in_version = self.in_version(version_include, version_exclude, version_name)
if in_version:
self.blob_info.append(item.attrib)
self.sample_info_versions.append((item.attrib, in_version))
else:
print(xml_root.attrib)
assert False, item.tag
class SoundFontExtractionDescription(ExtractionDescription):
def post_init(self, xml_root : Element, version_name : str):
self.envelopes_info = []
self.instruments_info = {}
self.drums_info = []
self.effects_info = []
self.envelopes_info_versions = []
self.instruments_info_versions = []
self.drums_info_versions = []
self.effects_info_versions = []
for item in xml_root:
if item.tag == "Envelopes":
for env in item:
assert env.tag == "Envelope"
version_include = env.attrib.get("VersionInclude", "")
version_exclude = env.attrib.get("VersionExclude", "")
in_version = self.in_version(version_include, version_exclude, version_name)
if in_version:
self.envelopes_info.append(env.attrib["Name"])
self.envelopes_info_versions.append((env.attrib, in_version))
elif item.tag == "Instruments":
for instr in item:
assert instr.tag == "Instrument"
prg_num = int(instr.attrib["ProgramNumber"])
version_include = instr.attrib.get("VersionInclude", "")
version_exclude = instr.attrib.get("VersionExclude", "")
in_version = self.in_version(version_include, version_exclude, version_name)
if in_version:
self.instruments_info[prg_num] = instr.attrib["Name"]
self.instruments_info_versions.append((instr.attrib, in_version))
elif item.tag == "Drums":
for drum in item:
assert drum.tag == "Drum"
version_include = drum.attrib.get("VersionInclude", "")
version_exclude = drum.attrib.get("VersionExclude", "")
in_version = self.in_version(version_include, version_exclude, version_name)
if in_version:
self.drums_info.append(drum.attrib["Name"])
self.drums_info_versions.append((drum.attrib, in_version))
elif item.tag == "Effects":
for effect in item:
assert effect.tag == "Effect"
version_include = effect.attrib.get("VersionInclude", "")
version_exclude = effect.attrib.get("VersionExclude", "")
in_version = self.in_version(version_include, version_exclude, version_name)
if in_version:
self.effects_info.append(effect.attrib["Name"])
self.effects_info_versions.append((effect.attrib, in_version))
else:
assert False, item.tag
class SequenceExtractionDescription(ExtractionDescription):
def post_init(self, xml_root : Element, version_name : str):
pass

View File

@ -184,7 +184,8 @@ if __name__ == '__main__':
), ),
} }
version_info = GameVersionInfo(MMLVersion.OOT, version_info = GameVersionInfo(version,
MMLVersion.OOT,
soundfont_table_code_offset, soundfont_table_code_offset,
seq_font_table_code_offset, seq_font_table_code_offset,
seq_table_code_offset, seq_table_code_offset,