/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.chunk.mp3; import java.util.ArrayList; import java.util.List; import com.ttProject.media.mp3.frame.Mp3; /** * mp3のframeをためる動作、ここにデータをためておくと、mp3ChunkManagerが必要に応じてmp3frameを取り出してchunk化する。 * とりあえずmp3のコーデックデータは一定であることを期待します。 * コーデックデータがかわったらEXT-DISCONTINUITYかけて、別のファイルとしてやり直した方がいいと思う。 * @author taktod */ public class Mp3DataList { /** 保持データリスト */ private final List<Mp3> mp3DataList = new ArrayList<Mp3>(); /** 取得フレーム数 */ private long counter; /** 転送済みフレーム数 */ private long sendedCounter = 0; /** サンプルレート */ private int sampleRate = -1; /** * 保持データリストサイズ参照 * @return */ public int getListCount() { return mp3DataList.size(); } /** * データを追加する * @param data */ public void addMp3Data(Mp3 frame) { counter += frame.getSampleNum(); sampleRate = frame.getSampleRate(); mp3DataList.add(frame); } /** * 保持データの終端のframeカウント * @return */ public long getCounter() { return counter; } /** * 保持データの先頭のframeカウント * @return */ public long getFirstCounter() { return sendedCounter; } /** * 動作サンプルレートを応答 * @return */ public int getSampleRate() { return sampleRate; } /** * 先頭データを取り出す * @return */ public Mp3 shift() { if(mp3DataList.size() == 0) { return null; } Mp3 frame = mp3DataList.remove(0); sendedCounter += frame.getSampleNum(); return frame; } /** * 先頭にデータを戻す * @param frame */ public void unshift(Mp3 frame) { if(frame == null) { return; } sendedCounter -= frame.getSampleNum(); mp3DataList.add(0, frame); } /** * {@inheritDoc} */ @Override public String toString() { StringBuilder data = new StringBuilder(); data.append("mp3DataList:").append(mp3DataList.size()); return data.toString(); } }