mirror of
https://github.com/cookiengineer/audacity
synced 2025-04-29 23:29:41 +02:00
Fixes MIDI playback on 64 bit Windows
Fix is based https://www.mail-archive.com/media_api@create.ucsb.edu/msg00514.html
This commit is contained in:
parent
7a0de2ee23
commit
07187ad789
@ -37,16 +37,16 @@
|
||||
#define MIDI_EOX 0xf7
|
||||
|
||||
/* callback routines */
|
||||
static void CALLBACK winmm_in_callback(HMIDIIN hMidiIn,
|
||||
WORD wMsg, DWORD dwInstance,
|
||||
DWORD dwParam1, DWORD dwParam2);
|
||||
static void CALLBACK winmm_streamout_callback(HMIDIOUT hmo, UINT wMsg,
|
||||
DWORD dwInstance, DWORD dwParam1,
|
||||
DWORD dwParam2);
|
||||
static void CALLBACK winmm_in_callback(
|
||||
HMIDIIN hMidiIn, UINT wMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1,
|
||||
DWORD_PTR dwParam2);
|
||||
static void CALLBACK winmm_streamout_callback(
|
||||
HMIDIOUT hmo, UINT wMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1,
|
||||
DWORD_PTR dwParam2);
|
||||
#ifdef USE_SYSEX_BUFFERS
|
||||
static void CALLBACK winmm_out_callback(HMIDIOUT hmo, UINT wMsg,
|
||||
DWORD dwInstance, DWORD dwParam1,
|
||||
DWORD dwParam2);
|
||||
static void CALLBACK winmm_out_callback(
|
||||
HMIDIOUT hmo, UINT wMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1,
|
||||
DWORD_PTR dwParam2);
|
||||
#endif
|
||||
|
||||
extern pm_fns_node pm_winmm_in_dictionary;
|
||||
@ -666,10 +666,10 @@ static PmError winmm_in_close(PmInternal *midi)
|
||||
/* Callback function executed via midiInput SW interrupt (via midiInOpen). */
|
||||
static void FAR PASCAL winmm_in_callback(
|
||||
HMIDIIN hMidiIn, /* midiInput device Handle */
|
||||
WORD wMsg, /* midi msg */
|
||||
DWORD dwInstance, /* application data */
|
||||
DWORD dwParam1, /* MIDI data */
|
||||
DWORD dwParam2) /* device timestamp (wrt most recent midiInStart) */
|
||||
UINT wMsg, /* midi msg */
|
||||
DWORD_PTR dwInstance, /* application data */
|
||||
DWORD_PTR dwParam1, /* MIDI data */
|
||||
DWORD_PTR dwParam2) /* device timestamp (wrt most recent midiInStart) */
|
||||
{
|
||||
static int entry = 0;
|
||||
PmInternal *midi = (PmInternal *) dwInstance;
|
||||
@ -688,7 +688,6 @@ static void FAR PASCAL winmm_in_callback(
|
||||
* hardware interrupt? -- but I've seen reentrant behavior
|
||||
* using a debugger, so it happens.
|
||||
*/
|
||||
long new_driver_time;
|
||||
EnterCriticalSection(&m->lock);
|
||||
|
||||
/* dwParam1 is MIDI data received, packed into DWORD w/ 1st byte of
|
||||
@ -697,8 +696,6 @@ static void FAR PASCAL winmm_in_callback(
|
||||
in [ms] from when midiInStart called.
|
||||
each message is expanded to include the status byte */
|
||||
|
||||
new_driver_time = dwParam2;
|
||||
|
||||
if ((dwParam1 & 0x80) == 0) {
|
||||
/* not a status byte -- ignore it. This happened running the
|
||||
sysex.c test under Win2K with MidiMan USB 1x1 interface,
|
||||
@ -709,8 +706,8 @@ static void FAR PASCAL winmm_in_callback(
|
||||
PmEvent event;
|
||||
if (midi->time_proc)
|
||||
dwParam2 = (*midi->time_proc)(midi->time_info);
|
||||
event.timestamp = dwParam2;
|
||||
event.message = dwParam1;
|
||||
event.timestamp = (PmTimestamp)dwParam2;
|
||||
event.message = (PmMessage)dwParam1;
|
||||
pm_read_short(midi, &event);
|
||||
}
|
||||
LeaveCriticalSection(&m->lock);
|
||||
@ -731,7 +728,7 @@ static void FAR PASCAL winmm_in_callback(
|
||||
/* assume yes and iterate through them */
|
||||
while (remaining > 0) {
|
||||
unsigned int amt = pm_read_bytes(midi, data + processed,
|
||||
remaining, dwParam2);
|
||||
remaining, (PmTimestamp)dwParam2);
|
||||
remaining -= amt;
|
||||
processed += amt;
|
||||
}
|
||||
@ -1327,8 +1324,9 @@ static void CALLBACK winmm_out_callback(HMIDIOUT hmo, UINT wMsg,
|
||||
#endif
|
||||
|
||||
/* winmm_streamout_callback -- unprepare (free) buffer header */
|
||||
static void CALLBACK winmm_streamout_callback(HMIDIOUT hmo, UINT wMsg,
|
||||
DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
|
||||
static void CALLBACK winmm_streamout_callback(
|
||||
HMIDIOUT hmo, UINT wMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1,
|
||||
DWORD_PTR dwParam2)
|
||||
{
|
||||
PmInternal *midi = (PmInternal *) dwInstance;
|
||||
midiwinmm_type m = (midiwinmm_type) midi->descriptor;
|
||||
|
Loading…
x
Reference in New Issue
Block a user