Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make AudioDeviceManager and Engine public - enable Sound.getOutputDevices() #94

Open
trackme518 opened this issue Dec 13, 2023 · 1 comment

Comments

@trackme518
Copy link

Engine.AudioDeviceManager audioManager = Sound.getAudioDeviceManager();
Get me an error: The type Engine is not visible

I would like to list and filter audio devices myself - specifically I want to list only output devices so I can create GUI for the user with list of devices to choose from.

I also want to be able to retrieve the individual device and for that I need to know the type - input or output.
AudioDevice device = Engine.getEngine().outputDevice(i);

So ideally there would be method Sound.getOutputDevices() and Sound.getInputDevices() that would return the array of AudioDevice type. I can than loop through them, check their properties and decide what to do (like checking how many outputs it has, name, id, samplerate).

@trackme518 trackme518 changed the title make AudioDeviceManager public make AudioDeviceManager public - enable Sound.getOutputDevices() Dec 13, 2023
@trackme518 trackme518 changed the title make AudioDeviceManager public - enable Sound.getOutputDevices() make AudioDeviceManager and Engine public - enable Sound.getOutputDevices() Dec 13, 2023
@kevinstadler
Copy link
Collaborator

kevinstadler commented Dec 13, 2023

Hello,

reading the number of output channels for a device is already possible through the MultiChannel.availableChannels(deviceId) method (all programmatic low-level information methods are in the MultiChannel class, in order not to overload the Sound class which has all options/settings that should suffice for basic users).

Just to clarify: there is no categorical distinction between input devices and output devices -- there is only one global list of audio devices, where any audio device has 0 or more input channels as well as 0 or more output channels. So it's possible that a device (notably most basic sound cards) are both an input and an output device at the same time. To test whether a given device from the global list is an "output device", one just needs to check whether the number of output channels is > 0, which can be done with the method above.

If you want to handle the AudioDeviceManager yourself, it doesn't actually make filtering for "output devices" any easier, but you can already do that -- it's not actually an internal class, it's the underlying JSyn object, so you'll just need to use the correct import (I will make sure to add that to the existing LowLevelEngine example, thanks!):

import com.jsyn.devices.AudioDeviceManager;

...

AudioDeviceManager audioManager = Sound.getAudioDeviceManager();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants