//
//  DigitalPlayer.java
//  JavaPiano
//
//  Created by Eugen Yu on 11/2/04.
//

import com.apple.audio.*;
import com.apple.audio.hardware.*;
import com.apple.audio.toolbox.*;
import com.apple.audio.units.*;
import com.apple.audio.util.*;


public class DigitalPlayer implements AURenderCallback
{

	// Unit to play sound
	private OutputAudioUnit unit = null;
	
	// Implementation of AURenderCallback
	public int execute(AudioUnit renderUnit, int inActionFlags, AudioTimeStamp inTimeStamp, int inBusNumber, AudioBuffer inData)
    {
		CAMemoryObject buffer = inData.getData();
		int bufferSize = buffer.getSize();
		int numOfSamples = bufferSize / 8; //number of sample points, 4 byte per channel * 2 channels
		
		float[] tempBuffer = new float[numOfSamples*2];
        
        // tempBuffer is where your sound samples go
        // it is an interleaved float array (LRLRLR) samples should between -1 and 1 (preferably less than this, like -0.8 to 0.8)

		buffer.copyFromArray(0, tempBuffer, 0, numOfSamples*2);
		return 0;
	}
	

    //Constructor
	DigitalPlayer()
    {
		try
        {
			unit = AUComponent.openDefaultOutput();
			unit.initialize();
			unit.setInputCallback(this, 0);
			unit.start();
		}
		catch (CAException exp)
        {
			exp.printStackTrace();
		}
	}

	
	public void play(/* some arguments */)
    {
        // your stuff goes here
	}
}
