SplitmediaLabsLimited / xjs

XSplit JS Framework. Make plugins for XSplit Broadcaster, quickly and easily.
Other
39 stars 11 forks source link

Setting the Primary Microphone/Speaker seems to destroy the primary audio devices #41

Closed LtSquigs closed 8 years ago

LtSquigs commented 8 years ago

Hey there,

When trying to set the Primary Mic/Speaker in order to increase/decrease their volume from an extension, the functions seem to destroy the primary audio devices.

I dug around a bit to cut down on the debugging, and I'm not sure if this is a problem with xjs or with xsplit's exported functions. It looks like setting "microphonedev2" just sometimes messes up.

An example of what I mean boiled down to using window.external directly, the same thing happens if you use setPrimaryMicropohone/setPrimarySpeaker: http://i.imgur.com/nnNnM8i.png

In that example I have the Default Microphone/Default Speaker selected for input/output. I do not have an Audio Preview device selected. The last device in that XML array appears to be the "XSplit Stream Audio Renderer".

As you can see, even just echoing back in the value from getting it destroys the Device array. After that happens the only way to fix it is to go manually into xsplit, change the device to something else, and save the settings. This happens for me with any combination of devices in the microphone/speaker area.

Not sure if this is an issue with the API or XSplit itself, but it makes it impossible as far as I can tell to adjust the volume of those devices. (Using Xsplit v. 2.6.1509.3002)

SML-MeSo commented 8 years ago

Upon, checking, there seems to be a bug on the method itself on the application side. This may have been introduced due to some improvements for XBC 2.6 and the core developers have already been notified of it.

You can try the methods for setting Primary Mic/Speaker via the latest XBC 2.5 version available in the XSplit website, as it is tested to be working in there. (The downside, 2.5 still does not support remote debugging). Needless to say, updates will be posted once resolved in the core application.

LtSquigs commented 8 years ago

I downgraded my XSplit version to 2.5.1509.0823 and the problem still happens, perhaps its something unique to my audio devices?

SML-MeSo commented 8 years ago

Oh, sorry about the misinformation regarding the public 2.5 release. It seems the one I first tested upon is an internal build which is mislabeled higher than the public build (but is in fact earlier). This one is definitely on the core application so I'll post once an update/fix is available.

mikeybanez commented 8 years ago

@SML-MeSo I think the fixes are good for release, but just some comments before this will be ready for merging:

  1. I think we should find a place in our documentation to warn that setting application's microphone/speaker properties does not reflect in the application UI.
  2. Since setting these properties will be done from the context of the App instance, it probably makes sense to have a clearer documentation for these functions. For example, setDelay needs to indicate what time units are being used (right now these are in AudioDevice which is not used for this purpose any more).
  3. Because we cannot force an audio device XML to be used by the application, it makes no more sense to allow any kind of setProperty in our public API for AudioDevice objects. We can probably still expose AudioDevice but I think we should consider converting the non-essential methods into private ones, to avoid confusing consumers of the framework.
  4. If we accomplish the above points, perhaps we should also consider how System.getAudioDevices() is going to be used now. This will affect how we are documenting the AudioDevice class. Are the returned objects only to be used for some comparison operations, or can we do something more with them?
SML-MeSo commented 8 years ago

Notable breaking change: