/*
*
      
_______
                       
_____
   
_____ _____
  

*
     
|__
   
__|
                     
|
  
__ \ / ____|__ \
 

*
        
| | __ _ _ __ ___
  
______| || | (___ | |__) |
*
        
| |/ _` | '__/ __|/ _ \/ __| |
  
| |\___ \|___/
 

*
        
| | (_| | |
  
\__ \ (_) \__ \ |__| |____) | |
     

*
        
|_|\__,_|_|
  
|___/\___/|___/_____/|_____/|_|
     

*
                                                         

* -------------------------------------------------------------
*
* TarsosDSP is developed by Joren Six at IPEM, University Ghent
*
  

* -------------------------------------------------------------
*
*
  
Info:
 
http://0110.be/tag/TarsosDSP
*
  
Github:
 
https://github.com/JorenSix/TarsosDSP
*
  
Releases:
 
http://0110.be/releases/TarsosDSP/
*
  

*
  
TarsosDSP includes modified source code by various authors,
*
  
for credits and info, see README.
*
 

*/

package be.tarsos.dsp.io;

import java.io.IOException;

/**
 
* Decouples the audio input stream
 
* @author Joren Six
 
*/

public interface TarsosDSPAudioInputStream {

	
/**
	 
* Skip a number of bytes before reading the remaining bytes.
	 
* @param bytesToSkip The number of bytes to skip.
	 
* @return The number of bytes skipped.
	 
* @throws IOException If the underlying
  
if an input or output error occurs
	 
* #see read
 

	 
*/

	
long skip(long bytesToSkip) throws IOException;

	 
/**
     
* Reads up to a specified maximum number of bytes of data from the audio
     
* stream, putting them into the given byte array.
     
* <p>This method will always read an integral number of frames.
     
* If <code>len</code> does not specify an integral number
     
* of frames, a maximum of <code>len - (len % frameSize)
     
* </code> bytes will be read.
     
*
     
* @param b the buffer into which the data is read
     
* @param off the offset, from the beginning of array <code>b</code>, at which
     
* the data will be written
     
* @param len the maximum number of bytes to read
     
* @return the total number of bytes read into the buffer, or -1 if there
     
* is no more data because the end of the stream has been reached
     
* @throws IOException if an input or output error occurs
     
* @see #skip
     
*/

	
int read(byte[] b, int off, int len) throws IOException ;

	 
/**
     
* Closes this audio input stream and releases any system resources associated
     
* with the stream.
     
* @throws IOException if an input or output error occurs
     
*/

    
public void close() throws IOException;
    

	
/**
	 
*
 

	 
* @return The format of the underlying audio
	 
*/
	
TarsosDSPAudioFormat getFormat();

	
long getFrameLength();
}