45 votes

Enregistrement USB multicanal avec l'API Java Sound?

Je suis en train d'enregistrer/processus de l'audio à partir de trois microphones usb avec Java Sound sur Snow Leopard (mais peut passer à Windows si il résout des choses). Problème c'est que quand j'essaie d'utiliser la table de mixage qui correspond à la micro usb, Java Sound me dit que la ligne n'est pas pris en charge. Plus précisément, il dit ceci...

Disponible mélangeurs:

Java Son Moteur Audio

USBMIC Série# 041270067

Entrée intégrée Microphone Intégré

Soundflower (2ch)

Soundflower (16ch)

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Ligne non pris en charge: interface TargetDataLine appui format PCM_SIGNED 96 000.0 Hz, 8 bits, stéréo, 2 octets/image,

...quand je l'invite à sélectionner le USBMIC table de mixage:

  Mixer mixer = AudioSystem.
          getMixer(mixerInfo[1]);

J'ai essayé correspondant au format audio pour les spécifications exactes de l'microphones (16 bits, 44100 hz, stereo) et il n'a fait aucune différence.

Le problème est de culture jusqu'ici:

 final TargetDataLine line = (TargetDataLine)
        mixer.getLine(info);

Il semblerait que la table de mixage et le TargetDataLine n'aiment pas les uns les autres. Est-il un moyen d'obtenir ces deux vers "match" et de s'entendre?

Les micros que j'utilise sont certes un peu étrange. Ils ont été conçus pour être utilisés dans un karaoké vidéo de jeu de SingStar. Les micros eux-mêmes ont mono standard ligne-dans les connecteurs qui se branchent sur un petit concentrateur (de deux à un hub) qui convertit en un seul mâle connecteur usb. L'étrangeté de côté, cependant, ils semblent fonctionner parfaitement bien avec Audace que des canaux distincts, de sorte que l'enregistrement multicanal avec eux est bien évidemment possible, juste peut-être pas en Java.

J'ai aussi envisagé d'utiliser un programme comme Soundflower que les actions de l'audio entre différents programmes. Cependant, je ne suis pas sûr que cela va fonctionner car je ne vois pas comment faire les micros USB entrées à Soundflower et puis transférez-les dans un Java. Une rapide expérience m'a montré que je pouvais enregistrer de l'audio dans Audacity à partir de la mics, il pipe par Soundflower, puis de traiter dans mon programme Java. Encore, ce que je voudrais faire est de tout ce qui se passe en temps réel en Java.

Toute personne familière avec ce genre de problème?

4voto

Daniel Compton Points 343

Je pense qu'une simple façon de le faire serait d'utiliser Soundflower et Soundflowerbed.

Je ne vois pas comment faire les micros USB entrées à Soundflower et puis transférez-les dans un Java.

Il semble que vous avez Soundflower déjà installé. Soundflowerbed est trouvé dans la même image disque comme Soundflower et est une barre de menus de l'application. Il vous permet de router le son entre les applications qui n'ont pas de contrôle intégré pour la sélection des appareils sonores. Installer qu'à partir de l'image disque et cliquez dessus pour l'exécuter.

Tous les suivants seront à l'aide de mon Echo Audiofire 4 mais, en principe, devrait fonctionner sur n'importe quel appareil audio.

À L'Aide De Soundflowerbed

Ouvrir Soundflower et de cocher le périphérique audio que vous souhaitez utiliser sous Soundflower (16ch). Comme je suis un nouvel utilisateur, je ne peux pas poster des images, mais ils sont en lien ci-dessous. Si je reçois le bounty alors je vais éditer le post pour y inclure les images en ligne.

1

De là, vous utiliseriez Soundflower (16ch) que votre périphérique d'entrée audio en Java sound.

La création d'un périphérique audio agrégé

Une autre façon de résoudre ce qui ne fonctionne pas est de créer un périphérique agrégé. Ouvrir des Applications > Utilitaires > Configuration Audio et Midi " et cliquez sur le signe plus pour créer un nouveau périphérique agrégé.

2 Cocher le périphérique que vous voulez agréger. Vous ne voulez que votre USBMIC (Comme je suis nouvelle DONC je ne peux que poster deux images par répondre si les deux sont liés ici).

3

La partie de la clé qui peut vous donner de la difficulté est l'horloge de l'appareil. Si vous sélectionnez le Mac comme la source de l'horloge alors que peut être plus stable. 4

Si cela ne fonctionne toujours pas, alors vous pourriez essayer d'ajouter le Mac audio intégré à l'ensemble de l'appareil et de le rendre le maître de l'horloge par un clic droit sur le périphérique que vous voulez être le maître.

5

D'autres options

Enfin, je n'ai pas utilisé cela avant, mais Pulse Audio (Google, je ne peux pas insérer plus de liens dans ce post) pourrait être une solution possible pour le mixage de votre flux audio ensemble. Il semble assez lourd.

2voto

nmagerko Points 1079

Selon mes recherches, en particulier des fils comme cela, le microphone que vous utilisez est probablement la cause du problème. Le fil stipule que le microphone est même un problème quand il s'agit de jeux de commutation, donc je suppose que ce sera un problème lors de la commutation de plates-formes, trop.

Ma suggestion: si vous n'avez pas essayé ce déjà - pour utiliser un autre micro! La plupart des micros, j'ai foiré autour avec puce spéciale contrôleurs de convertir les données dans les données compatible pour le système de jeu. Que vous êtes en utilisant ce sur un système d'exploitation de l'ordinateur, vous êtes probablement obtenir quelques très des effets bizarres que vous ne seriez pas obtenir sur un système de jeu comme la Playstation ou autres.

Nous espérons que cette aide! Amusez-vous bien!

0voto

Kevin Bigler Points 145

AudioFormat ne correspond pas au format pris en charge par TargetDataLine. Je ne sais pas si c'était une faute de frappe ou pas, mais l'Exception levée indique que TargetDataLine prend en charge l'audio 8 bits et juste en dessous de cela, vous dites que vous utilisez un format audio 16 bits. Il prend également en charge jusqu'à 2 octets par image, à quelle vitesse et dans quelle taille essayez-vous de lire les données? Désolé si cela ne vous aide pas, mais je pensais le préciser au cas où cela serait négligé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X