001/*******************************************************************************
002 * Copyright (c) 2024, 2026, Olivier Ayache.  All rights reserved.
003 *
004 * This file is part of AVPKit.
005 *
006 * AVPKit is free software: you can redistribute it and/or modify
007 * it under the terms of the GNU Lesser General Public License as published by
008 * the Free Software Foundation, either version 3 of the License, or
009 * (at your option) any later version.
010 *
011 * AVPKit is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014 * GNU Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public License
017 * along with AVPKit.  If not, see <http://www.gnu.org/licenses/>.
018 *******************************************************************************/
019package com.avpkit.mediatool.demos;
020
021import java.awt.image.BufferedImage;
022
023/**
024 * An API for getting images and sounds representing {@link Balls} that
025 * are to be encoded into a video.
026 * 
027 * @author trebor
028 *
029 */
030public interface Balls
031{
032
033  /**
034   * Get a picture of a set of balls. Each new call should provide the right
035   * picture assuming elapsedTime, in MICROSECONDS, has passed.
036   * 
037   * @param elapsedTime the time in MICROSECONDS which has elapsed since the
038   *        last video frame
039   */
040
041  public abstract BufferedImage getVideoFrame(long elapsedTime);
042
043  /**
044   * Get the next set of audio for the balls.  Samples returned
045   * should assume they are contiguous to the last samples returned.
046   * 
047   * @param sampleRate the number of samples in a second
048   */
049
050  public abstract short[] getAudioFrame(int sampleRate);
051
052}