Browse Source

Made the WinRT MIDI service run on app startup

tags/2021-05-28
tpoole 8 years ago
parent
commit
112b88f289
3 changed files with 35 additions and 47 deletions
  1. +33
    -45
      modules/juce_audio_devices/native/juce_win32_Midi.cpp
  2. +1
    -1
      modules/juce_events/native/juce_win32_WinRTWrapper.cpp
  3. +1
    -1
      modules/juce_events/native/juce_win32_WinRTWrapper.h

+ 33
- 45
modules/juce_audio_devices/native/juce_win32_Midi.cpp View File

@@ -63,23 +63,6 @@ struct MidiServiceType
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MidiServiceType)
};
class MidiService : public DeletedAtShutdown
{
public:
~MidiService();
MidiServiceType* getService();
juce_DeclareSingleton (MidiService, false)
private:
MidiService();
ScopedPointer<MidiServiceType> internal;
};
juce_ImplementSingleton (MidiService)
//==============================================================================
class WindowsMidiService : public MidiServiceType
{
@@ -92,7 +75,7 @@ private:
MidiInCollector (WindowsMidiService& s,
MidiInput* const inputDevice,
MidiInputCallback& cb)
: midiService (s),
: service (s),
input (inputDevice),
callback (cb)
{
@@ -141,7 +124,7 @@ private:
{
if (deviceHandle != 0 && ! isStarted)
{
midiService.activeMidiCollectors.addIfNotAlreadyThere (this);
service.activeMidiCollectors.addIfNotAlreadyThere (this);
for (int i = 0; i < (int) numHeaders; ++i)
{
@@ -171,7 +154,7 @@ private:
isStarted = false;
midiInReset (deviceHandle);
midiInStop (deviceHandle);
midiService.activeMidiCollectors.removeFirstMatchingValue (this);
service.activeMidiCollectors.removeFirstMatchingValue (this);
unprepareAllHeaders();
concatenator.reset();
}
@@ -182,7 +165,7 @@ private:
{
MidiInCollector* const collector = reinterpret_cast<MidiInCollector*> (dwInstance);
if (collector->midiService.activeMidiCollectors.contains (collector))
if (collector->service.activeMidiCollectors.contains (collector))
{
if (uMsg == MIM_DATA)
collector->handleMessage ((const uint8*) &midiMessage, (uint32) timeStamp);
@@ -194,7 +177,7 @@ private:
HMIDIIN deviceHandle = 0;
private:
WindowsMidiService& midiService;
WindowsMidiService& service;
MidiInput* input;
MidiInputCallback& callback;
MidiDataConcatenator concatenator { 4096 };
@@ -1128,41 +1111,46 @@ public:
#endif // JUCE_USE_WINRT_MIDI
//==============================================================================
MidiServiceType* MidiService::getService()
{
return internal.get();
}
MidiService::MidiService()
class MidiService
{
#if JUCE_USE_WINRT_MIDI
try
public:
MidiService()
{
internal = new WinRTMidiService();
return;
#if JUCE_USE_WINRT_MIDI
try
{
internal = new WinRTMidiService();
return;
}
catch (std::runtime_error&)
{
}
#endif
internal = new WindowsMidiService();
}
catch (std::runtime_error&)
MidiServiceType* get()
{
return internal.get();
}
#endif
internal = new WindowsMidiService();
}
private:
ScopedPointer<MidiServiceType> internal;
};
MidiService::~MidiService()
{
clearSingletonInstance();
}
static MidiService midiService;
//==============================================================================
StringArray MidiInput::getDevices()
{
return MidiService::getInstance()->getService()->getDevices (true);
return midiService.get()->getDevices (true);
}
int MidiInput::getDefaultDeviceIndex()
{
return MidiService::getInstance()->getService()->getDefaultDeviceIndex (true);
return midiService.get()->getDefaultDeviceIndex (true);
}
MidiInput::MidiInput (const String& deviceName)
@@ -1179,7 +1167,7 @@ MidiInput* MidiInput::openDevice (const int index, MidiInputCallback* const call
ScopedPointer<MidiServiceType::InputWrapper> wrapper;
try
{
wrapper = MidiService::getInstance()->getService()->createInputWrapper (in, index, callback);
wrapper = midiService.get()->createInputWrapper (in, index, callback);
}
catch (std::runtime_error&)
{
@@ -1202,12 +1190,12 @@ void MidiInput::stop() { static_cast<MidiServiceType::InputWrapper*> (interna
//==============================================================================
StringArray MidiOutput::getDevices()
{
return MidiService::getInstance()->getService()->getDevices (false);
return midiService.get()->getDevices (false);
}
int MidiOutput::getDefaultDeviceIndex()
{
return MidiService::getInstance()->getService()->getDefaultDeviceIndex (false);
return midiService.get()->getDefaultDeviceIndex (false);
}
MidiOutput* MidiOutput::openDevice (const int index)
@@ -1215,7 +1203,7 @@ MidiOutput* MidiOutput::openDevice (const int index)
ScopedPointer<MidiServiceType::OutputWrapper> wrapper;
try
{
wrapper = MidiService::getInstance()->getService()->createOutputWrapper (index);
wrapper = midiService.get()->createOutputWrapper (index);
}
catch (std::runtime_error&)
{


+ 1
- 1
modules/juce_events/native/juce_win32_WinRTWrapper.cpp View File

@@ -28,4 +28,4 @@
==============================================================================
*/
juce_ImplementSingleton (WinRTWrapper)
juce_ImplementSingleton_SingleThreaded (WinRTWrapper)

+ 1
- 1
modules/juce_events/native/juce_win32_WinRTWrapper.h View File

@@ -33,7 +33,7 @@
class WinRTWrapper : public DeletedAtShutdown
{
public:
juce_DeclareSingleton (WinRTWrapper, true)
juce_DeclareSingleton_SingleThreaded (WinRTWrapper, true)
class ScopedHString
{


Loading…
Cancel
Save