X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fdata%2FFilter.java;h=ec8fb94d74da19e6305f63e78760a543341af3e4;hb=633a841142f978235ed9f745b6ba16c278963e62;hp=794c82a17966885ba4e6b021f47e18094070fa52;hpb=9a5bbdb694cda8f4bc0794aea136b993399961dd;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 794c82a..ec8fb94 100644 --- a/src/main/java/net/pterodactylus/sonitus/data/Filter.java +++ b/src/main/java/net/pterodactylus/sonitus/data/Filter.java @@ -17,12 +17,98 @@ package net.pterodactylus.sonitus.data; +import java.io.IOException; +import java.util.List; + /** - * A filter is both a {@link Source} and a {@link Sink}. It is used to process + * 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 extends Controlled, Source, Sink { +public interface Filter { + + /** + * 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 sink 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 metadata + * The new metadata + */ + 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 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 + * @throws IOException + * if an I/O error occurs + */ + byte[] get(int bufferSize) throws IOException; + + /** + * Opens this sink 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 sink. */ + void close(); + + /** + * Processes the given buffer of data. + * + * @param buffer + * The data to process + * @throws IOException + * if an I/O error occurs + */ + void process(byte[] buffer) throws IOException; }