views:

847

answers:

3

I realised this might be relatively niche, but maybe that's why this is good to ask anyway. I'm looking at a hardware multiple input recording console (such as the Alesis IO 26) to take in an Adat lightpipe 8 channel input to do signal processing. As I have yet to acquire the device and need to work out whether this is feasible (budgetary concerns), I'd like to ask if anyone has any experience tapping all these 8 inputs for data in Java? I've seen tons of examples of recording sound using the Javax.sound.sampled libraries but I couldn't find any information on multichannel that is more than 2. What I'm interested in is sampling the 8 channels individual as mono source to perform some simple DSP on them. Would the hardware device be treated as one mixer? And the 8 channels be represented as 8 lines? I hope I got my terminology right.

I would appreciate if someone can point me to any relevant information. Thanks!

A: 

I cannot give you an answer directly to whether the javax.sound API works with multi channels (But according to the API doc it should).

However, I've gone another way for multi channel audio processing with Java, that may be working for you as well. I used Jack (Jack Audio Connection Kit) to channel the signals from and to the audio device and then the JJack library to perform signal processing. You did not mention your target OS. I used this approach successfully under Linux. AFAIR there was a Windows port for Jack on the way.

ciao, elm

Elmar Weber
+1  A: 

I have implemented something similar with Terratec cards cascaded to 32 inputs, the only library at the time was Jsyn.

Its a really good library once you get to know it.

http://www.softsynth.com/jsyn

I am not sure if there is anything else that can help.

Fearstruck
+1  A: 

Multi-channel audio is supposed to be possible in Java depending on the version of Java you are running, the platform you are running on, and the type of soundcard you are running. See the excellent Java Audio Faq For more details. I've never been able to use this reliably across all platforms.

If you really care about doing robust multichannel audio, I would recommend using a C API, such as PortAudio, Juce, or PulseAudio.

I've had excellent luck with PortAudio and Juce both.

To use these in Java you would need to create a JNI interface to the C APIs.

This obviously is more work than just using javax.sound, but it gives you a lot more control over the audio hardware you are using. In my experience dealing with audio devices, being too far removed from the hardware (i.e. 4 layers of abstraction instead of 2) often removes your ability to do serious multi-channel, high bit depth, high sample rate audio.

Nick Haddad
Thanks Nick for pointing me the right way. java.sampled has a limitation of 2 channels. I currently have a working program in Java using PortAudio using JPAB (Java PortAudio Bindings).I'm running Windows Vista with M-Audio ProFire 2626 using ASIO drivers and I can get separate channels.
johncch
Sweet, I didn't even know about JPAB. Very nice wrapper around PortAudio.
Nick Haddad