API Example

This example demonstrates how to use the JSIDPlay2 Player API to play a SID tune and process the audio output.

package sidplay;

import libsidplay.common.CPUClock;
import libsidplay.common.EventScheduler;
import libsidplay.config.IAudioSection;
import libsidplay.config.IConfig;
import libsidplay.sidtune.SidTune;
import libsidplay.sidtune.SidTuneError;
import sidplay.audio.AudioConfig;
import sidplay.audio.AudioDriver;
import sidplay.ini.IniConfig;

import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class Test {

    public static void main(String[] args) throws IOException, SidTuneError {
        IConfig config = new IniConfig();
        Player player = new Player(config);
        player.setAudioDriver(new AudioDriver() {

            private ByteBuffer sampleBuffer;

            @Override
            public void open(IAudioSection audioSection, String recordingFilename, CPUClock cpuClock, EventScheduler context) {
                AudioConfig cfg = new AudioConfig(audioSection);

                sampleBuffer = ByteBuffer.allocate(cfg.getChunkFrames() * Short.BYTES * cfg.getChannels()).order(ByteOrder.LITTLE_ENDIAN);
            }

            @Override
            public void write() {
                for (int i = 0; i < sampleBuffer.position(); i++) {
                    System.out.printf("%02X, ", sampleBuffer.array()[i]);
                }
                System.out.println();
            }

            @Override
            public void close() {
            }

            @Override
            public boolean isRecording() {
                return false;
            }

            @Override
            public ByteBuffer buffer() {
                return sampleBuffer;
            }
        });
        player.setTune(SidTune.load(new File(args[0])));
        player.startC64();
        player.stopC64(false);
    }

}