| 754 | // FIXME: some default MIDI instruments for INDY3/MI1 |
| 755 | static char OLD256_MIDI_HACK[] = |
| 756 | // 0 |
| 757 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 758 | "\x00\x00\x03" // part/channel |
| 759 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 760 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 761 | "\x00" // part/channel |
| 762 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 763 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 764 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 765 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 766 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 767 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 768 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 769 | "\x04\x00\x00\xf7" |
| 770 | "\x00\xb0\x07\x64" // Controller 7 = 100 |
| 771 | // 1 |
| 772 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 773 | "\x01\x00\x03" // part/channel |
| 774 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 775 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 776 | "\x01" // part/channel |
| 777 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 778 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 779 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 780 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 781 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 782 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 783 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 784 | "\x04\x00\x00\xf7" |
| 785 | "\x00\xb1\x07\x64" // Controller 7 = 100 |
| 786 | // 2 |
| 787 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 788 | "\x02\x00\x03" // part/channel |
| 789 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 790 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 791 | "\x02" // part/channel |
| 792 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 793 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 794 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 795 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 796 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 797 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 798 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 799 | "\x04\x00\x00\xf7" |
| 800 | "\x00\xb2\x07\x64" // Controller 7 = 100 |
| 801 | // 3 |
| 802 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 803 | "\x03\x00\x03" // part/channel |
| 804 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 805 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 806 | "\x03" // part/channel |
| 807 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 808 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 809 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 810 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 811 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 812 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 813 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 814 | "\x04\x00\x00\xf7" |
| 815 | "\x00\xb3\x07\x64" // Controller 7 = 100 |
| 816 | // 4 |
| 817 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 818 | "\x04\x00\x03" // part/channel |
| 819 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 820 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 821 | "\x04" // part/channel |
| 822 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 823 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 824 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 825 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 826 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 827 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 828 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 829 | "\x04\x00\x00\xf7" |
| 830 | "\x00\xb4\x07\x64" // Controller 7 = 100 |
| 831 | // 5 |
| 832 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 833 | "\x05\x00\x03" // part/channel |
| 834 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 835 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 836 | "\x05" // part/channel |
| 837 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 838 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 839 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 840 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 841 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 842 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 843 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 844 | "\x04\x00\x00\xf7" |
| 845 | "\x00\xb5\x07\x64" // Controller 7 = 100 |
| 846 | // 6 |
| 847 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 848 | "\x06\x00\x03" // part/channel |
| 849 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 850 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 851 | "\x06" // part/channel |
| 852 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 853 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 854 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 855 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 856 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 857 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 858 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 859 | "\x04\x00\x00\xf7" |
| 860 | "\x00\xb6\x07\x64" // Controller 7 = 100 |
| 861 | // 7 |
| 862 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 863 | "\x07\x00\x03" // part/channel |
| 864 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 865 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 866 | "\x07" // part/channel |
| 867 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 868 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 869 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 870 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 871 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 872 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 873 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 874 | "\x04\x00\x00\xf7" |
| 875 | "\x00\xb7\x07\x64" // Controller 7 = 100 |
| 876 | // 8 |
| 877 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 878 | "\x08\x00\x03" // part/channel |
| 879 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 880 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 881 | "\x08" // part/channel |
| 882 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 883 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 884 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 885 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 886 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 887 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 888 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 889 | "\x04\x00\x00\xf7" |
| 890 | "\x00\xb8\x07\x64" // Controller 7 = 100 |
| 891 | // 9 |
| 892 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 893 | "\x09\x00\x03" // part/channel |
| 894 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 895 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 896 | "\x09" // part/channel |
| 897 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 898 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 899 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 900 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 901 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 902 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 903 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 904 | "\x04\x00\x00\xf7" |
| 905 | "\x00\xb9\x07\x64" // Controller 7 = 100 |
| 906 | // Channels after 9 realy necessary ?!? |
| 907 | // A |
| 908 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 909 | "\x0A\x00\x03" // part/channel |
| 910 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 911 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 912 | "\x0A" // part/channel |
| 913 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 914 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 915 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 916 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 917 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 918 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 919 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 920 | "\x04\x00\x00\xf7" |
| 921 | "\x00\xbA\x07\x64" // Controller 7 = 100 |
| 922 | // B |
| 923 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 924 | "\x0B\x00\x03" // part/channel |
| 925 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 926 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 927 | "\x0B" // part/channel |
| 928 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 929 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 930 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 931 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 932 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 933 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 934 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 935 | "\x04\x00\x00\xf7" |
| 936 | "\x00\xbB\x07\x64" // Controller 7 = 100 |
| 937 | // C |
| 938 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 939 | "\x0C\x00\x03" // part/channel |
| 940 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 941 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 942 | "\x0C" // part/channel |
| 943 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 944 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 945 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 946 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 947 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 948 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 949 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 950 | "\x04\x00\x00\xf7" |
| 951 | "\x00\xbC\x07\x64" // Controller 7 = 100 |
| 952 | // D |
| 953 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 954 | "\x0D\x00\x03" // part/channel |
| 955 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 956 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 957 | "\x0D" // part/channel |
| 958 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 959 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 960 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 961 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 962 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 963 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 964 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 965 | "\x04\x00\x00\xf7" |
| 966 | "\x00\xbD\x07\x64" // Controller 7 = 100 |
| 967 | // E |
| 968 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 969 | "\x0E\x00\x03" // part/channel |
| 970 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 971 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 972 | "\x0E" // part/channel |
| 973 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 974 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 975 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 976 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 977 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 978 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 979 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 980 | "\x04\x00\x00\xf7" |
| 981 | "\x00\xbE\x07\x64" // Controller 7 = 100 |
| 982 | // F |
| 983 | "\x00\xf0\x14\x7d\x00" // sysex 00: part on/off |
| 984 | "\x0F\x00\x03" // part/channel |
| 985 | "\x00\x00\x07\x0f\x00\x00\x08\x00\x00\x00\x00\x02\x00\x00\xf7" |
| 986 | "\x04\xf0\x41\x7d\x10" // sysex 16: set instrument |
| 987 | "\x0F" // part/channel |
| 988 | "\x01\x06\x02\x0a\x08\x09\x0d\x08\x04\x04" |
| 989 | "\x04\x06\x02\x02\x03\x07\x0f\x0d" |
| 990 | "\x05\x04\x0c\x00\x03\x0a\x01\x00" |
| 991 | "\x00\x00\x01\x01\x0e\x00\x02\x02" |
| 992 | "\x01\x00\x01\x00\x01\x02\x00\x0a" |
| 993 | "\x08\x00\x00\x00\x01\x02\x04\x00" |
| 994 | "\x06\x02\x00\x00\x04\x00\x03\x02" |
| 995 | "\x04\x00\x00\xf7" |
| 996 | "\x00\xbF\x07\x64"; // Controller 7 = 100 |
| 997 | |
| 998 | int Scumm::readSoundResourceSmallHeader(int type, int idx) |
| 999 | { |
| 1000 | uint32 pos, total_size, size, dw, tag; |
| 1001 | uint32 best_size = 0, best_offs = 0; |
| 1002 | byte *ptr, *track; |
| 1003 | uint16 ticks, skip; |
| 1004 | |
| 1005 | debug(4, "readSoundResourceSmallHeader(%s,%d)", resTypeFromId(type), idx); |
| 1006 | |
| 1007 | //if (_rescache->readResource(roomNr, type, idx)) |
| 1008 | // return 1; |
| 1009 | |
| 1010 | total_size = size = _fileHandle.readDwordLE(); |
| 1011 | tag = _fileHandle.readWordLE(); |
| 1012 | debug(4, " tag='%c%c', size=%d", |
| 1013 | (char) (tag & 0xff), |
| 1014 | (char) ((tag >> 8) & 0xff), size); |
| 1015 | |
| 1016 | pos = 6; |
| 1017 | while (pos < total_size) { |
| 1018 | size = _fileHandle.readDwordLE(); |
| 1019 | tag = _fileHandle.readWordLE(); |
| 1020 | debug(4, " tag='%c%c', size=%d", |
| 1021 | (char) (tag & 0xff), |
| 1022 | (char) ((tag >> 8) & 0xff), size); |
| 1023 | pos += size; |
| 1024 | |
| 1025 | // MI1 and Indy3 uses one or more nested SO resources, which contains AD and WA |
| 1026 | // resources. |
| 1027 | if ((tag == 0x4441) && !(best_offs)) { // AD |
| 1028 | best_size = size; |
| 1029 | best_offs = _fileHandle.pos(); |
| 1030 | } else { // other AD, WA and nested SO resources |
| 1031 | if (tag == 0x4F53) { |
| 1032 | pos -= size; |
| 1033 | size = 6; |
| 1034 | pos += 6; |
| 1035 | } |
| 1036 | } |
| 1037 | _fileHandle.seek(size - 6, SEEK_CUR); |
| 1038 | } |
| 1039 | |
| 1040 | // AD resources have a header, instrument definitions and one MIDI track. |
| 1041 | // We build an 'ADL ' resource from that: |
| 1042 | // 8 bytes resource header |
| 1043 | // 16 bytes MDhd header |
| 1044 | // 14 bytes MThd header |
| 1045 | // 8 bytes MTrk header |
| 1046 | // 7 MIDI speed event |
| 1047 | // + some default instruments |
| 1048 | // TODO: - make some real MIDI instrument definitions |
| 1049 | // - no sound looping |
| 1050 | // - proper handling of the short AD resources format |
| 1051 | // - check the LE/BE handling for platforms other than PC |
| 1052 | |
| 1053 | if (best_offs != 0) { |
| 1054 | _fileHandle.seek(best_offs - 6, SEEK_SET); |
| 1055 | |
| 1056 | ptr = createResource(type, idx, best_size); |
| 1057 | _fileHandle.read(ptr, best_size); |
| 1058 | |
| 1059 | ticks = READ_BE_UINT16(ptr + 9); |
| 1060 | size = best_size; |
| 1061 | if (size < 0x98) { |
| 1062 | // FIXME: OLD256 music file w/o instruments |
| 1063 | // perhaps we should use then the other "WA" resource in the "SO" resource |
| 1064 | // and play it raw |
| 1065 | skip = 0x0a; // let's give it a try |
| 1066 | } else { |
| 1067 | skip = 0x98; |
| 1068 | } |
| 1069 | ptr += skip; // size + instruments |
| 1070 | size -= skip; // drop instruments for now |
| 1071 | CHECK_HEAP track = (byte *)calloc(size, 1); |
| 1072 | if (track == NULL) { |
| 1073 | error("Out of memory while allocating %d", size); |
| 1074 | } |
| 1075 | memcpy(track, ptr, size); // saving MIDI track data |
| 1076 | nukeResource(type, idx); |
| 1077 | |
| 1078 | total_size = 8 + 16 + 14 + 8 + 7 + sizeof(OLD256_MIDI_HACK) - 1 + size; |
| 1079 | ptr = createResource(type, idx, total_size); |
| 1080 | memcpy(ptr, "ADL ", 4); ptr += 4; |
| 1081 | dw = READ_BE_UINT32(&total_size); |
| 1082 | memcpy(ptr, &dw, 4); ptr += 4; |
| 1083 | memcpy(ptr, "MDhd", 4); ptr += 4; |
| 1084 | ptr[0] = 0; ptr[1] = 0; ptr[2] = 0; ptr[3] = 8; |
| 1085 | ptr += 4; |
| 1086 | dw = 0; |
| 1087 | memcpy(ptr, &dw, 4); ptr += 4; |
| 1088 | memcpy(ptr, &dw, 4); ptr += 4; |
| 1089 | memcpy(ptr, "MThd", 4); ptr += 4; |
| 1090 | ptr[0] = 0; ptr[1] = 0; ptr[2] = 0; ptr[3] = 6; |
| 1091 | ptr += 4; |
| 1092 | ptr[0] = 0; ptr[1] = 0; ptr[2] = 0; ptr[3] = 1; // MIDI format 0 with 1 track |
| 1093 | ptr += 4; |
| 1094 | memcpy(ptr, &ticks, 2); ptr += 2; // FIXME: care of BE/LE needed ? |
| 1095 | memcpy(ptr, "MTrk", 4); ptr += 4; |
| 1096 | *ptr++ = ((sizeof(OLD256_MIDI_HACK) - 1 + size + 7) >> 24) & 0xFF; |
| 1097 | *ptr++ = ((sizeof(OLD256_MIDI_HACK) - 1 + size + 7) >> 16) & 0xFF; |
| 1098 | *ptr++ = ((sizeof(OLD256_MIDI_HACK) - 1 + size + 7) >> 8) & 0xFF; |
| 1099 | *ptr++ = ((sizeof(OLD256_MIDI_HACK) - 1 + size + 7) ) & 0xFF; |
| 1100 | // speed hacks |
| 1101 | dw = 1100000 - (ticks * 10); |
| 1102 | if ((dw > 900000) || (dw < 200000)) |
| 1103 | dw = 500000; // for sanity |
| 1104 | debug(4, " ticks = %d, speed = %ld", ticks, dw); |
| 1105 | memcpy(ptr, "\x00\xFF\x51\x03", 4); ptr += 4; |
| 1106 | *ptr++ = (dw >> 16) & 0xFF; |
| 1107 | *ptr++ = (dw >> 8) & 0xFF; |
| 1108 | *ptr++ = dw & 0xFF; |
| 1109 | memcpy(ptr, OLD256_MIDI_HACK, sizeof(OLD256_MIDI_HACK) - 1); |
| 1110 | ptr += sizeof(OLD256_MIDI_HACK) - 1; |
| 1111 | memcpy(ptr, track, size); |
| 1112 | free(track); |
| 1113 | //hexdump(ptr = getResourceAddress(type, idx), 32); |
| 1114 | return 1; |
| 1115 | } |
| 1116 | res.roomoffs[type][idx] = 0xFFFFFFFF; |
| 1117 | return 0; |
| 1118 | } |
| 1119 | |
| 1120 | |