@@ -35,7 +35,7 @@ namespace openshot
3535 AudioDeviceManagerSingleton *AudioDeviceManagerSingleton::m_pInstance = NULL ;
3636
3737 // Create or Get an instance of the device manager singleton
38- AudioDeviceManagerSingleton *AudioDeviceManagerSingleton::Instance (int numChannels )
38+ AudioDeviceManagerSingleton *AudioDeviceManagerSingleton::Instance ()
3939 {
4040 if (!m_pInstance) {
4141 // Create the actual instance of device manager only once
@@ -44,16 +44,31 @@ namespace openshot
4444 // Initialize audio device only 1 time
4545 String error = m_pInstance->audioDeviceManager .initialise (
4646 0 , /* number of input channels */
47- numChannels , /* number of output channels */
47+ 2 , /* number of output channels */
4848 0 , /* no XML settings.. */
49- true /* select default device on failure */ );
49+ true , /* select default device on failure */
50+ Settings::Instance ()->PLAYBACK_AUDIO_DEVICE_NAME /* preferredDefaultDeviceName */ );
5051
5152 // Persist any errors detected
5253 if (error.isNotEmpty ()) {
5354 m_pInstance->initialise_error = error.toStdString ();
5455 } else {
5556 m_pInstance->initialise_error = " " ;
5657 }
58+
59+ // Get all audio device names
60+ for (int i = 0 ; i < m_pInstance->audioDeviceManager .getAvailableDeviceTypes ().size (); ++i)
61+ {
62+ const AudioIODeviceType* t = m_pInstance->audioDeviceManager .getAvailableDeviceTypes ()[i];
63+ const StringArray deviceNames = t->getDeviceNames ();
64+
65+ for (int j = 0 ; j < deviceNames.size (); ++j )
66+ {
67+ const String deviceName = deviceNames[j];
68+ AudioDeviceInfo deviceInfo = {deviceName.toStdString (), t->getTypeName ().toStdString ()};
69+ m_pInstance->audio_device_names .push_back (deviceInfo);
70+ }
71+ }
5772 }
5873
5974 return m_pInstance;
@@ -149,7 +164,7 @@ namespace openshot
149164
150165 // Start new audio device (or get existing one)
151166 // Add callback
152- AudioDeviceManagerSingleton::Instance (numChannels )->audioDeviceManager .addAudioCallback (&player);
167+ AudioDeviceManagerSingleton::Instance ()->audioDeviceManager .addAudioCallback (&player);
153168
154169 // Create TimeSliceThread for audio buffering
155170 time_thread.startThread ();
@@ -182,7 +197,7 @@ namespace openshot
182197 transport.setSource (NULL );
183198
184199 player.setSource (NULL );
185- AudioDeviceManagerSingleton::Instance (0 )->audioDeviceManager .removeAudioCallback (&player);
200+ AudioDeviceManagerSingleton::Instance ()->audioDeviceManager .removeAudioCallback (&player);
186201
187202 // Remove source
188203 delete source;
0 commit comments