Skip to main content

Radio (Part 1)

Posted by editor on October 11, 2006 at 6:46 AM PDT

Remarkable new Java Media apps

The podcasting world is rushing to embrace a new tool. And it's written in Java.

The Gigavox Levelator is an application which takes audio files and adjusts the sound levels to reduce volume (level) differences from one source to another. The obvious application is in interview and group-discussion podcasts, where different participants may naturally speak at different volumes, have better or worse microphones, be amplified more or less than one another, etc.

I first heard of it from Editor Emeritus and O'Reilly Network podcaster Daniel Steinberg (check out his Distributing the Future), and quickly saw references to it on other podcasts' pages, such as Anime World Order. And if you check out Levelator's support threads, you'll see the Java Posse's Dick Wall offering to help with a Linux version.

From reading around the various threads, it seems like Java is used primarily for the GUI, with native libraries to do the heavy lifting of working with the audio media. That's an interesting approach -- not unlike how Neo Office uses Java to provide Mac OS X integration to -- and answers the question of how you write a Java Media application given the lousy state of the platform's multimedia support. The answer is: you don't. You use cross-platform Java to get you as far as you can, and use another solution for the rest. It might seem more natural for some to just do everything as a platform-specific binary, but this approach has allowed Levelator to work on Mac and Windows, and with the interest level in porting the native bits to Linux, that version can't be far off.

In a similar vein, Cooper sent me a link to Freetar Hero, an early-in-development open-source clone of the music-action game Guitar Hero. While the requirements specify Java 5.0, it's a Windows-only game at this point. Again, it looks like the author went as far as Java could go, and then went native after that. In a section on Mac/Linux support he (I'm assuming Antonie is a man?) writes "As far as I know, the libraries required ARE available for these platforms, but I have no way of trying them out. If you are a Java programmer that is familiar with these platforms, and are willing to help me find and link the required libraries, please don't hesitate to contact me." Until it's open-sourced, I guess we won't know what those libraries are, but again, it might just be a matter of a recompile.

Of course, with better Java media libraries, we wouldn't even need a JNI step. For example, it would be fairly straightforward for a Levelator-like application to access and manipulate raw audio samples with something like QuickTime for Java, though this is just a wrapper around the native QuickTime library and thus wouldn't help with Linux. Freetar needs not only audio playback but access to the guitar controller, which is presumably a PlayStation device connected to the PC via a PlayStation-to-USB adapter. Again, the official libraries don't get us far enough in Java -- the Java USB API (JSR 80) lacks meaningful cross-platform implementations, and JInput is a mixed bag at best (I can tell you from experience that JInput has broken Ant build scripts and is effectively a no-op on Mac OS X anyways). For my own game controller needs, Cooper has suggested I look at sdljava, a wrapper around the native Simple DirectMedia Layer (SDL) framework. I haven't had time to check it out yet, but since it provides low-level access to game controllers, maybe that's one option that could speed up Freetar's cross-platform develpoment.

Speaking of Java Media, how can we leave out the server side (that's what Java's all about, right?). In Java Today, notes the recently-posted IBM Web Service Streaming Engine, a multimedia streaming server that serves audio, video, images, and text over standards-based protocols such as RTSP. The engine is a plug-in for a web service host, and the download includes fully-configured versions of Apache Axis and Tomcat for Windows and Linux, which expose the streaming engine as a web service. The package also includes administrative and viewer "Web service client" Web pages and servlets that reside and run on the included Tomcat.

Save the date... the JXTA team is holding a JXTA Kitchen on November 2nd and 3rd in Santa Clara, CA. Events will include updates on the Sun JXTA team's latest activities, opportunities to meet and work with JXTA experts from around the world, and one-on-one time with JXTA team members. The first day will feature an all-day group event, track sessions, and a group dinner, while the second will be based around more sessions and one-on-one time with staff.

The wiseman project "is an implementation of the WS-Management specification for the Java SE platform. The project scope includes the WS-Management specification and its dependent specifications." Its first binary release, 0.5, "provides good coverage of the DMTF 1.0 Version of the WS Management specification. This release features a tutorial on creating and exposing resources starting from your schema though generating a Java web application. It also contains sample client and server applications."

David Van Couvering covers Tutorial days at ApacheCon in today's Weblogs.
"The first two days of ApacheCon are over, and it's been a lot of fun so far. On Monday I gave a tutorial on embedding a database in a browser. Man, what I lot of work I put into that tutorial, but it was worth it - I learned a lot and I think so did the attendees."

Changshin Lee describes
What I found during struggling for REST on GlassFish:
"Maybe I need to post these issues to GF or JAX-WS projects, but would like to share first with this blog. I simply wanted to demonstrate a service exposed as both SOAP and REST."

Finally, John O'Conner calls for a
Layout Manager Showdown:
"Several UI power thinkers have agreed to present their arguments for their favorite layout manager. I'm announcing a Layout Manager Showdown, and you're invited."

In today's Forums,
bmesserer seeks a more practical way to seal with
glassfish JPA (Toplink Essentials) with large ResultSets:
"I have the problem that I want to display a large ResultSet within a JTable - I already figured out I can 'paginate' it via Query.setFirstResult() and Query.setMaxResults(). I just don't understand why I can't configure glassfish-persistence/TopLink Essentials in a way so I can simply use a normal query ('select c from Customer c') and TopLink will instantiate JPA-entity objects 'on demand', say in pages of 100, why does it insist mapping the complete result into entities at once instead of only retrieving the objects I requested? Why do I need to implement pagination myself for such a simple case? - since this means putting an abstraction layer above JPA-Queries, first testing whether there are a lot of results via 'select COUNT()...' and then using either a 'normal' or paginated query. I think that it is quite common to display large resultsets in tables showing only the first X rows, isn't it?"

stitzl is trying to extend a Swing look-and-feel but otherwise maintain platform fidelity, a tall order, in
Re: Synth PLAF: How to define a fallback Look and Feel?
"Hi Scott, thanks for your concise reply which means, as I take it, that -- when using Synth -- it is impossible to slightly modify the look of existing applications that use the system L&F without reverse engineering that L&F first and reimplementing it as a Synth XML file. Sadly, as our application uses the Windows L&F (to "fit in"), simply extending the existing look and feel classes is out of question. Using the Multiplexing Look and Feel does not seem to be working either, as I need to override (and not only extend) certain look elements -- see my second post. Do you have other suggestions on how to modify an look of an existing L&F?"

In today's
News Headlines

Registered users can submit news items for the href=""> News Page using our
news submission
. All submissions go through an editorial review before being
posted to the site. You can also subscribe to the href=""> News RSS

Current and upcoming Java