Java examples for javax.sound.sampled:Audio
get Audio Mixer Hierarchy Info
/*/*www . j a v a 2s .c o m*/ * Copyright 2011 Witoslaw Koczewsi <wi@koczewski.de> * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero * General Public License as published by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public * License for more details. * * You should have received a copy of the GNU Affero General Public License along with this program. If not, * see <http://www.gnu.org/licenses/>. */ //package com.java2s; import java.util.ArrayList; import java.util.List; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.CompoundControl; import javax.sound.sampled.Control; import javax.sound.sampled.Line; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.Mixer; import javax.sound.sampled.Mixer.Info; public class Main { public static void main(String[] argv) throws Exception { System.out.println(getHierarchyInfo()); } public static String getHierarchyInfo() { StringBuilder sb = new StringBuilder(); for (Mixer mixer : getMixers()) { sb.append("Mixer: ").append(toString(mixer)).append("\n"); for (Line line : getAvailableOutputLines(mixer)) { sb.append(" OUT: ").append(toString(line)).append("\n"); boolean opened = open(line); for (Control control : line.getControls()) { sb.append(" Control: ").append(toString(control)) .append("\n"); if (control instanceof CompoundControl) { CompoundControl compoundControl = (CompoundControl) control; for (Control subControl : compoundControl .getMemberControls()) { sb.append(" Sub-Control: ") .append(toString(subControl)) .append("\n"); } } } if (opened) line.close(); } for (Line line : getAvailableOutputLines(mixer)) { sb.append(" IN: ").append(toString(line)).append("\n"); boolean opened = open(line); for (Control control : line.getControls()) { sb.append(" Control: ").append(toString(control)) .append("\n"); if (control instanceof CompoundControl) { CompoundControl compoundControl = (CompoundControl) control; for (Control subControl : compoundControl .getMemberControls()) { sb.append(" Sub-Control: ") .append(toString(subControl)) .append("\n"); } } } if (opened) line.close(); } sb.append("\n"); } return sb.toString(); } public static List<Mixer> getMixers() { Info[] infos = AudioSystem.getMixerInfo(); List<Mixer> mixers = new ArrayList<Mixer>(infos.length); for (Info info : infos) { Mixer mixer = AudioSystem.getMixer(info); mixers.add(mixer); } return mixers; } public static String toString(Control control) { if (control == null) return null; return control.toString() + " (" + control.getType().toString() + ")"; } public static String toString(Line line) { if (line == null) return null; Line.Info info = line.getLineInfo(); return info.toString();// + " (" + line.getClass().getSimpleName() + ")"; } public static String toString(Mixer mixer) { if (mixer == null) return null; StringBuilder sb = new StringBuilder(); Info info = mixer.getMixerInfo(); sb.append(info.getName()); sb.append(" (").append(info.getDescription()).append(")"); sb.append(mixer.isOpen() ? " [open]" : " [closed]"); return sb.toString(); } public static List<Line> getAvailableOutputLines(Mixer mixer) { return getAvailableLines(mixer, mixer.getTargetLineInfo()); } public static boolean open(Line line) { if (line.isOpen()) return false; try { line.open(); } catch (LineUnavailableException ex) { return false; } return true; } private static List<Line> getAvailableLines(Mixer mixer, Line.Info[] lineInfos) { List<Line> lines = new ArrayList<Line>(lineInfos.length); for (Line.Info lineInfo : lineInfos) { Line line; line = getLineIfAvailable(mixer, lineInfo); if (line != null) lines.add(line); } return lines; } public static Line getLineIfAvailable(Mixer mixer, Line.Info lineInfo) { try { return mixer.getLine(lineInfo); } catch (LineUnavailableException ex) { return null; } } }