aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/com/jsyn/devices/AudioDeviceManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/jsyn/devices/AudioDeviceManager.java')
-rw-r--r--src/main/java/com/jsyn/devices/AudioDeviceManager.java120
1 files changed, 120 insertions, 0 deletions
diff --git a/src/main/java/com/jsyn/devices/AudioDeviceManager.java b/src/main/java/com/jsyn/devices/AudioDeviceManager.java
new file mode 100644
index 0000000..ac8d47c
--- /dev/null
+++ b/src/main/java/com/jsyn/devices/AudioDeviceManager.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2010 Phil Burk, Mobileer Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.jsyn.devices;
+
+/**
+ * Interface for an audio system. This may be implemented using JavaSound, or a native device
+ * wrapper.
+ *
+ * @author Phil Burk (C) 2010 Mobileer Inc
+ */
+public interface AudioDeviceManager {
+ /**
+ * Pass this value to the start method to request the default device ID.
+ */
+ public final static int USE_DEFAULT_DEVICE = -1;
+
+ /**
+ * @return The number of devices available.
+ */
+ public int getDeviceCount();
+
+ /**
+ * Get the name of an audio device.
+ *
+ * @param deviceID An index between 0 to deviceCount-1.
+ * @return A name that can be shown to the user.
+ */
+ public String getDeviceName(int deviceID);
+
+ /**
+ * @return A name of the device manager that can be shown to the user.
+ */
+ public String getName();
+
+ /**
+ * The user can generally select a default device using a control panel that is part of the
+ * operating system.
+ *
+ * @return The ID for the input device that the user has selected as the default.
+ */
+ public int getDefaultInputDeviceID();
+
+ /**
+ * The user can generally select a default device using a control panel that is part of the
+ * operating system.
+ *
+ * @return The ID for the output device that the user has selected as the default.
+ */
+ public int getDefaultOutputDeviceID();
+
+ /**
+ * @param deviceID
+ * @return The maximum number of channels that the device will support.
+ */
+ public int getMaxInputChannels(int deviceID);
+
+ /**
+ * @param deviceID An index between 0 to numDevices-1.
+ * @return The maximum number of channels that the device will support.
+ */
+ public int getMaxOutputChannels(int deviceID);
+
+ /**
+ * This the lowest latency that the device can support reliably. It should be used for
+ * applications that require low latency such as live processing of guitar signals.
+ *
+ * @param deviceID An index between 0 to numDevices-1.
+ * @return Latency in seconds.
+ */
+ public double getDefaultLowInputLatency(int deviceID);
+
+ /**
+ * This the highest latency that the device can support. High latency is recommended for
+ * applications that are not time critical, such as recording.
+ *
+ * @param deviceID An index between 0 to numDevices-1.
+ * @return Latency in seconds.
+ */
+ public double getDefaultHighInputLatency(int deviceID);
+
+ public double getDefaultLowOutputLatency(int deviceID);
+
+ public double getDefaultHighOutputLatency(int deviceID);
+
+ /**
+ * Set latency in seconds for the audio device. If set to zero then the DefaultLowLatency value
+ * for the device will be used. This is just a suggestion that will be used when the
+ * AudioDeviceInputStream is started.
+ **/
+ public int setSuggestedInputLatency(double latency);
+
+ public int setSuggestedOutputLatency(double latency);
+
+ /**
+ * Create a stream that can be used internally by JSyn for outputting audio data. Applications
+ * should not call this directly.
+ */
+ AudioDeviceOutputStream createOutputStream(int deviceID, int frameRate, int numOutputChannels);
+
+ /**
+ * Create a stream that can be used internally by JSyn for acquiring audio input data.
+ * Applications should not call this directly.
+ */
+ AudioDeviceInputStream createInputStream(int deviceID, int frameRate, int numInputChannels);
+
+}