| 2115 | } |
| 2116 | |
| 2117 | void ImMidiCommand(ImMidiPlayer* player, s32 channelIndex, s32 midiCmd, s32 value) |
| 2118 | { |
| 2119 | ImMidiOutChannel* channel = &player->channels[channelIndex]; |
| 2120 | |
| 2121 | if (midiCmd == MID_MODULATIONWHEEL_MSB) |
| 2122 | { |
| 2123 | channel->modulation = value; |
| 2124 | if (channel->data) |
| 2125 | { |
| 2126 | ImMidiChannelSetModulation(channel->data, value); |
| 2127 | } |
| 2128 | } |
| 2129 | else if (midiCmd == MID_VOLUME_MSB) |
| 2130 | { |
| 2131 | channel->partVolume = value; |
| 2132 | ImHandleChannelVolumeChange(player, channel); |
| 2133 | } |
| 2134 | else if (midiCmd == MID_PAN_MSB) |
| 2135 | { |
| 2136 | channel->partPan = value; |
| 2137 | if (channel->data) |
| 2138 | { |
| 2139 | s32 pan = clamp(value + player->pan - imPanCenter, 0, imPanMax); |
| 2140 | ImMidiChannelSetPan(channel->data, pan); |
| 2141 | } |
| 2142 | } |
| 2143 | else if (midiCmd == MID_GPC1_MSB) |
| 2144 | { |
| 2145 | if (value < 12) |
| 2146 | { |
| 2147 | //channel->outChannelCount = value; |
| 2148 | ImMidiPitchBend(player, channelIndex, 0, imPanCenter); |
| 2149 | } |
| 2150 | } |
| 2151 | else if (midiCmd == MID_GPC2_MSB) |
| 2152 | { |
| 2153 | channel->partNoteReq = value; |
| 2154 | if (channel->data) |
| 2155 | { |
| 2156 | ImMidiChannelSetPartNoteReq(channel->data, value); |
| 2157 | } |
| 2158 | } |
| 2159 | else if (midiCmd == MID_GPC3_MSB) |
| 2160 | { |
| 2161 | channel->partPriority = value; |
| 2162 | ImHandleChannelPriorityChange(player, channel); |
| 2163 | ImMidiSetupParts(); |
| 2164 | } |
| 2165 | else if (midiCmd == MID_SUSTAIN_SWITCH) |
| 2166 | { |
| 2167 | channel->sustain = value; |
| 2168 | if (channel->data) |
| 2169 | { |
| 2170 | ImSetChannelSustain(channel->data, value); |
| 2171 | } |
| 2172 | } |
| 2173 | else if (midiCmd == MID_ALL_NOTES_OFF) |
| 2174 | { |
no test coverage detected