--- jsampler/trunk/src/org/jsampler/view/fantasia/AudioDevicePane.java 2007/09/22 17:27:06 1357 +++ jsampler/trunk/src/org/jsampler/view/fantasia/AudioDevicePane.java 2007/12/31 17:17:22 1606 @@ -65,6 +65,7 @@ import org.linuxsampler.lscp.AudioOutputChannel; import org.linuxsampler.lscp.AudioOutputDevice; import org.linuxsampler.lscp.Parameter; +import org.linuxsampler.lscp.ParameterFactory; import static org.jsampler.view.fantasia.FantasiaI18n.i18n; import static org.jsampler.view.fantasia.FantasiaPrefs.preferences; @@ -89,7 +90,8 @@ setOptionsPane(optionsPane); int id = model.getDeviceId(); - setDeviceName(i18n.getLabel("AudioDevicePane.lDevName", id)); + String s = model.getDeviceInfo().getDriverName(); + setDeviceName(i18n.getLabel("AudioDevicePane.lDevName", id, s)); } protected void @@ -117,8 +119,7 @@ private final JLabel lChannels = new JLabel(i18n.getLabel("AudioDevicePane.lChannels")); - private final JSpinner spinnerChannels - = new JSpinner(new SpinnerNumberModel(1, 1, 50, 1)); + private final JSpinner spinnerChannels; private final JLabel lChannel = new JLabel(i18n.getLabel("AudioDevicePane.lChannel")); @@ -153,6 +154,16 @@ p.add(Box.createRigidArea(new Dimension(12, 0))); p.add(lChannels); p.add(Box.createRigidArea(new Dimension(5, 0))); + + Parameter prm = + audioDeviceModel.getDeviceInfo().getChannelsParameter(); + int min = 1; + if(prm.getRangeMin() != null) min = prm.getRangeMin().intValue(); + int max = 10000; + if(prm.getRangeMax() != null) max = prm.getRangeMax().intValue(); + + spinnerChannels = new JSpinner(new SpinnerNumberModel(1, min, max, 1)); + if(prm.isFixed()) spinnerChannels.setEnabled(false); p.add(spinnerChannels); p.setOpaque(false); @@ -212,8 +223,7 @@ cbChannel.addItem(chn); } - Parameter[] pS = audioDeviceModel.getDeviceInfo().getAdditionalParameters(); - additionalParamsTable.getModel().setParameters(pS); + updateParams(audioDeviceModel.getDeviceInfo()); additionalParamsTable.getModel().addParameterListener(new ParameterListener() { public void parameterChanged(ParameterEvent e) { @@ -276,9 +286,7 @@ if(a != na) checkActive.setSelected(na); AudioOutputDevice d = e.getAudioDeviceModel().getDeviceInfo(); - - Parameter[] params = d.getAdditionalParameters(); - additionalParamsTable.getModel().setParameters(params); + updateParams(d); int idx = cbChannel.getSelectedIndex(); cbChannel.removeAllItems(); @@ -299,6 +307,22 @@ audioDeviceModel.setBackendChannelParameter(c, e.getParameter()); } + + private void + updateParams(AudioOutputDevice d) { + Parameter p = d.getSampleRateParameter(); + boolean b = p == null || p.getName() == null || p.getValue() == null; + Parameter[] params = d.getAdditionalParameters(); + Parameter[] p2s; + if(b) p2s = new Parameter[params.length]; + else p2s = new Parameter[params.length + 1]; + + for(int i = 0; i < params.length; i++) p2s[i] = params[i]; + + if(!b) p2s[params.length] = p; + + additionalParamsTable.getModel().setParameters(p2s); + } } }