2010-01-20 6 views
2

J'ai un programme de travail écrit en Java avec Java Sound API 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, ce n'est pas le cas.API Java Sound sur OS X avec carte son USB

La liste de mon son Mixer Infos est:

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

Si je choisis mélangeur [0] pour lire le fichier, il le fait avec succès avec la carte son intégrée. Si je choisis mélangeur [2] pour lire le fichier, je reçois l'exception suivante:

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 de Mac OS X à l'USB carte son, puis dans mon java application Je choisis le mélangeur [0], le son sort par la carte son USB. Cela m'amène à croire que la carte son USB peut également lire les fichiers mp3 sous OS X, mais pas quand elle n'est pas le périphérique de sortie principal.

Est-ce que quelqu'un sait comment je peux reproduire le son de ma carte son USB dans OS X sans que ce soit le périphérique de sortie principal du système?

+0

Je viens d'imprimer tout le SourceDataLine et le TargetDataLine que mes mélangeurs fournissent. Bizarrement, la carte son USB ne montre qu'un seul TargetDataLine (l'entrée microphone). Comment puis-je obtenir le SourceDataLine manifestement existant à apparaître? –

Répondre

3

Pouvez-vous lire sur la carte USB avec d'autres fréquences d'échantillonnage/formats d'échantillons lorsque ce n'est pas le périphérique par défaut? Mon OS X fait du mixage logiciel + taux d'échantillonnage + conversion du format d'échantillon sur la carte son par défaut (sinon plusieurs programmes ne pourraient pas jouer simultanément des sons à moins qu'ils ne se soient mis d'accord sur un seul taux d'échantillonnage + format d'échantillon être très peu pratique), mais cela ne le fait pas pour les autres cartes son. Ainsi, OS X convertit la sortie de votre programme en celle requise par la carte son USB lorsque la carte son USB est sélectionnée par défaut, mais il n'y a pas de conversion quand ce n'est pas la valeur par défaut, donc vous obtenez une erreur de format non supportée. Regardez dans la documentation de la carte pour voir la fréquence d'échantillonnage et le format de l'échantillon qu'elle prend en charge - très probablement comme 48000 Hz, 16 bit little endian signé, et 2 ou 6 ou 8 canaux.

+0

Merci pour votre réponse. J'ai essayé d'autres fichiers, y compris les fichiers .wav avec le format que la carte son attend (Asus Xonar U1 - fondamentalement, c'est celui que vous avez décrit) mais toujours pas de chance. J'ai aussi essayé de régler manuellement l'AudioFormat mais toujours rien. Je reçois toujours des choses comme: java.lang.IllegalArgumentException: Ligne non supportée: interface Format de support de SourceDataLine PCM_SIGNED 48000.0 Hz, 16 bits, stéréo, 4 octets/image, little-endian Avez-vous d'autres suggestions? Merci. –

+0

Hmm, peut-être essayer 6 canaux et 8 canaux. Vous pouvez également rechercher dans la documentation de la carte les formats pris en charge de manière native. En l'absence de documentation, essayez de trouver un pilote de carte son USB suffisamment détaillé (par exemple celui de Linux) qui répertorie les formats pris en charge par la carte. –