package cc.winboll.studio.midiplayer;

/**
 * @Author ZhanGSKen<zhangsken@qq.com>
 * @Date 2025/06/29 10:24
 * @Describe Midi轨道类，用于存储和管理单条Midi轨道的事件
 */
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class MidiTrack {
	public static final String TAG = "MidiTrack";

	// 轨道事件列表（存储Midi事件字节数组）
	private List<byte[]> mEvents = new ArrayList<>();
	// 事件迭代器（用于播放时遍历事件）
	private Iterator<byte[]> mEventIterator;
	// 轨道是否静音
	private boolean isMuted = false;

	public MidiTrack() {
	}

	/**
	 * 添加Midi事件到轨道
	 */
	public void addEvent(byte[] event) {
		mEvents.add(event);
	}

	/**
	 * 重置轨道播放状态（回到起始位置）
	 */
	public void reset() {
		mEventIterator = mEvents.iterator();
	}

	/**
	 * 判断是否有下一个事件
	 */
	public boolean hasNextEvent() {
		// 如果静音，返回false不播放事件
		if (isMuted) {
			return false;
		}
		// 初始化迭代器（首次使用或重置后）
		if (mEventIterator == null) {
			reset();
		}
		return mEventIterator.hasNext();
	}

	/**
	 * 获取下一个Midi事件
	 */
	public byte[] nextEvent() {
		if (mEventIterator == null) {
			reset();
		}
		return mEventIterator.next();
	}

	/**
	 * 设置轨道静音状态
	 */
	public void setMute(boolean mute) {
		isMuted = mute;
	}

	/**
	 * 获取轨道事件数量
	 */
	public int getEventCount() {
		return mEvents.size();
	}
}

