X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fdata%2FFilter.java;h=924ccee678fdeda36bc30ee123b2978919a9ef15;hb=48ff2dfc3ec8aafa119b8e25dade695c5d40312b;hp=94c986c9337b486ab0e3cea9dc8ad571341c86d2;hpb=367edf1b6da27a73e1f822d7087a3a764ebff3e8;p=sonitus.git
diff --git a/src/main/java/net/pterodactylus/sonitus/data/Filter.java b/src/main/java/net/pterodactylus/sonitus/data/Filter.java
index 94c986c..924ccee 100644
--- a/src/main/java/net/pterodactylus/sonitus/data/Filter.java
+++ b/src/main/java/net/pterodactylus/sonitus/data/Filter.java
@@ -17,31 +17,100 @@
package net.pterodactylus.sonitus.data;
+import java.io.IOException;
+import java.util.List;
+
/**
- * A filter processes an input to produce an output.
+ * A filter is both a source and a sink for audio data. It is used to process
+ * the audio date in whatever way seems appropriate.
*
* @author David âBombeâ Roden
*/
public interface Filter {
/**
- * Returns whether this filter understands the given format.
+ * Adds the given listener to the list of registered listeners.
+ *
+ * @param metadataListener
+ * The metadata listener to add
+ */
+ void addMetadataListener(MetadataListener metadataListener);
+
+ /**
+ * Removes the given listener from the list of registered listeners.
+ *
+ * @param metadataListener
+ * The metadata listener to remove
+ */
+ void removeMetadataListener(MetadataListener metadataListener);
+
+ /**
+ * Returns the name of this filter.
+ *
+ * @return The name of this filter
+ */
+ String name();
+
+ /**
+ * Returns the controllers offered by this filter.
+ *
+ * @return The controllers of this filter
+ */
+ List> controllers();
+
+ /**
+ * Returns the metadata of the audio stream.
+ *
+ * @return The metadata of the audio stream
+ */
+ Metadata metadata();
+
+ /**
+ * Notifies the filter that the metadata of the audio stream has changed. This
+ * method should return as fast as possible, i.e. every heavy lifting should be
+ * done from another thread.
*
- * @param format
- * The format to check for
- * @return {@code true} if this filter understands the given format, {@code
- * false} otherwise
+ * @param metadata
+ * The new metadata
*/
- boolean understands(Format format);
+ void metadataUpdated(Metadata metadata);
+
+ /**
+ * Retrieves data from the audio stream.
+ *
+ * @param bufferSize
+ * The maximum amount of bytes to retrieve from the audio stream
+ * @return A data packet containing the metadata of the stream (optional) and
+ * the buffer filled with up to {@code bufferSize} bytes of data; the
+ * returned buffer may contain less data than requested but will not
+ * contain excess elements (i.e. it can be smaller than the requested
+ * size)
+ * @throws IOException
+ * if an I/O error occurs
+ */
+ DataPacket get(int bufferSize) throws IOException;
+
+ /**
+ * Opens this filter using the format parameters of the given metadata.
+ *
+ * @param metadata
+ * The metadata of the stream
+ * @throws IOException
+ * if an I/O error occurs
+ */
+ void open(Metadata metadata) throws IOException;
+
+ /** Closes this filter. */
+ void close();
/**
- * Returns whether this filter can produce the given format.
+ * Processes the given data packet.
*
- * @param format
- * The format to check for
- * @return {@code true} if this filter can produce the given format, {@code
- * false} otherwise
+ * @param dataPacket
+ * The data to process
+ * @throws IOException
+ * if an I/O error occurs
*/
- boolean produces(Format format);
+ void process(DataPacket dataPacket) throws IOException;
}