Java Sound API sur OS X avec carte son USB


J'ai un programme de travail écrit en Java avec l'API Java Sound qui est capable de lire plusieurs fichiers audio mp3 en même temps sur différentes cartes son USB dans le même ordinateur. Cela fonctionne bien sous Linux. Dans Mac OS X, cependant, il ne le fait pas.

La liste de mes infos sound Mixer est:

[0] Java Sound Audio Engine
[1] Built-in Input
[2] USB Advanced Audio Device

Si je choisis mixer [0] pour lire le fichier, il le fait avec succès avec la carte son intégrée. Si je choisis mixer [2] pour lire le fichier, j'obtiens ce qui suit exception:

Exception in thread "Thread-1" java.lang.IllegalArgumentException: Line unsupported: interface SourceDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
at com.sun.media.sound.SimpleInputDevice.getLine(SimpleInputDevice.java:142)
at javax.sound.sampled.AudioSystem.getSourceDataLine(AudioSystem.java:633)
at pt.mobbit.sensorsloader.actuators.multiaudio.AudioPlayer$AudioPlayerThread.run(AudioPlayer.java:135)
at java.lang.Thread.run(Thread.java:613)

Cependant, si je change le Périphérique de sortie dans les Préférences système d'OS X pour être la carte son USB, puis dans mon application java, je choisis le mélangeur [0], le son sort via la carte son USB. Cela m'amène à croire que la carte son USB peut également lire les fichiers mp3 dans OS X, mais pas quand ce n'est pas le périphérique de sortie principal.

Est-ce que quelqu'un sait comment je peux produire du son sur ma carte son USB sous OS X sans que ce soit la sortie principale du système dispositif?

Author: Tiago Alves, 2010-01-20

1 answers

Pouvez-vous lire sur la carte USB avec d'autres taux d'échantillonnage/formats d'échantillon lorsque ce n'est pas le périphérique par défaut?

Mon est que OS X fait le mixage logiciel + taux d'échantillonnage + conversion de format d'échantillon sur la carte son par défaut (sinon plusieurs programmes ne seraient pas en mesure de jouer simultanément des sons à moins qu'ils ne soient tous d'accord sur un seul taux d'échantillonnage + format d'échantillon ce qui serait très peu pratique), mais Donc OS X convertit la sortie de votre programme à celui dont le matériel de la carte son USB a besoin lorsque la carte son USB est sélectionnée par défaut, mais il n'y a pas de conversion lorsque ce n'est pas la valeur par défaut, vous obtenez donc une erreur de format non prise en charge.

Regardez dans la documentation de la carte pour voir la fréquence d'échantillonnage et le format d'échantillon qu'elle prend en charge - très probablement ce sera comme 48000 Hz, 16 bits signé little endian, et 2 ou 6 ou 8 canaux.

 3
Author: Bandi-T, 2010-01-20 20:01:56