Hi Mark, Even though the javadoc points to the Java Tutorials, the OpenJDK project doesn't have any way of updating them. So much has changed since it was written <https://docs.oracle.com/javase/tutorial/information/history.html>, and any effort to make things better for developers to understand should be redirected to improving the javadoc itself. Still, I would agree that the documentation needs to be improved greatly, especially the package-info files whose only message is to point to the increasingly-obsolete Java Tutorials. Code-wise, better things are possible.
FWIW, I found AudioAction, a subclass of BasicLookAndFeel, which I hope helps in any way possible. I've never touched this part of java.desktop, so I can't be of much help. SWinxy On Sat, Dec 23, 2023 at 4:07 PM <mark.yagnatin...@barclays.com> wrote: > Also: the discouraged methods (applet-based and sun.audio.Player) are > friendly enough to call Toolkit. getPCMConvertedAudioInputStream() for you. > > Of course, you could do that yourself, except… this is ALSO not exposed. > > So we need to re-implement that method. Sigh. > > The “official” way to do things should NOT be this hard! > > > > *From:* Yagnatinsky, Mark : Markets Pre Trade > *Sent:* Saturday, December 23, 2023 12:02 AM > *To:* 'client-libs-dev@openjdk.org' <client-libs-dev@openjdk.org> > *Subject:* the easiest ways to play an audio clip are the discouraged ones > > > > Sorry for double-post; I think my fist attempt got blocked because I > wasn’t subscribed. > > Also sorry if this is the wrong list; please redirect me if so. > > ALSO ALSO sorry if this is a bit of a disorganized rant, but I’m a bit > frustrated. > > > > Suppose I have a sound file on my hard disk and want Java to play it. > > By copying random code snippets off the internet, we can discover > > sun.audio.AudioPlayer.player.start(java.io.InputStream file) > > > > Easy! But wait, the sun.* packages are not officially exported and javac > 8 complains, and with modules it likely complains even louder. > > Then we discover JavaFX has a nifty MediaPlayer which is almost as easy. > But JavaFX is “de-bundled” so that’s a bit annoying. > > > > No matter, we can use Applet.newAudioClip()! We don’t want an applet, > this API works fine without them. Nice! > > But the entire applet namespace is deprecated, and even worse, it is > deprecated for removal. > > (For the record, I think deprecating it makes sense, but deprecating it > for removal was a bad idea and should be undone. But I’m an outsider, so > whatever.) > > Depending on things that are threatened to go away on possibly short > notice seems risky, so let’s not. > > > > I see something called JMF (Java Media Framework) but that’s also not > bundled, and hard to even find docs for. Sigh. > > > > Let’s looks at something nice and official: the sound tutorial: > > https://docs.oracle.com/javase/tutorial/sound/playing.html > > Oh dear, that looks complicated. I guess we need to somehow get Clip? > How to do that? > > The tutorial has a big warning on top that it hasn’t been updated since > Java 8 but I suspect it hasn’t been touched since Java 5 or longer. > > Well, in must have been touched a bit, since it uses Clip.class syntax > which was added in Java 5. But what it doesn’t have is any mention of > these methods: > > https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4896221 > > My best explanation is that they got added after the tutorial was written, > and then the tutorial was never updated, which I think reduces the amount > of good those methods do. > > But that’s okay because we found those methods, one of which is called > getClip(). Yay, we have Clip! > > Now all we need to do is clip.open(AudioInputStream)… hmm. Where do I get > one of those? The tutorial doesn’t seem to say. > > The official Javadocs have a neat feature where each interface lists all > public classes that implement it. > > What it does NOT have is a list of all methods whose return type “matches” > the interface. > > But that’s okay, we have nice IDEs, so I can just “find usages” of > AudioInputStream and filter down to those where it appears as a return type! > > And there we go: I need AudioSystem.getAudioInputStream(). > > And then we’re ready: we can call start() and it will play our clip! > > Hmm… I wonder if the call returns when playback starts or only when it > ends… maybe we need a scratch thread so it doesn’t block us? > > Oh and let’s not forget to close() the clip when we’re done! > > > > This API seems to try pretty hard to give experts everything they need. > > But it doesn’t cater very well to the use case of “I don’t know what a > mixer is, and I wish I didn’t have to care!” > > The highly-nonofficial sun.audio.AudioPlayer does a pretty good job for > this use-case; there should ideally be something at LEAST that easy in an > official, non-deprecated API. > > > > Just my two cents. > > Mark > > This message is for information purposes only. It is not a recommendation, > advice, offer or solicitation to buy or sell a product or service, nor an > official confirmation of any transaction. It is directed at persons who are > professionals and is intended for the recipient(s) only. It is not directed > at retail customers. This message is subject to the terms at: > https://www.cib.barclays/disclosures/web-and-email-disclaimer.html. > > For important disclosures, please see: > https://www.cib.barclays/disclosures/sales-and-trading-disclaimer.html > regarding marketing commentary from Barclays Sales and/or Trading desks, > who are active market participants; > https://www.cib.barclays/disclosures/barclays-global-markets-disclosures.html > regarding our standard terms for Barclays Corporate and Investment Bank > where we trade with you in principal-to-principal wholesale markets > transactions; and in respect to Barclays Research, including disclosures > relating to specific issuers, see: http://publicresearch.barclays.com. > __________________________________________________________________________________ > > If you are incorporated or operating in Australia, read these important > disclosures: > https://www.cib.barclays/disclosures/important-disclosures-asia-pacific.html > . > > __________________________________________________________________________________ > For more details about how we use personal information, see our privacy > notice: https://www.cib.barclays/disclosures/personal-information-use.html. > > > __________________________________________________________________________________ >