/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.frame.speex.test;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.junit.Test;
import com.ttProject.frame.speex.sub.NarrowUnit;
import com.ttProject.frame.speex.sub.SubUnit;
import com.ttProject.frame.speex.sub.WideUnit;
import com.ttProject.frame.speex.type.Frame;
import com.ttProject.nio.channels.ByteReadChannel;
import com.ttProject.nio.channels.IReadChannel;
import com.ttProject.unit.extra.BitConnector;
import com.ttProject.unit.extra.BitLoader;
import com.ttProject.unit.extra.bit.Bit1;
import com.ttProject.unit.extra.bit.Bit2;
import com.ttProject.unit.extra.bit.Bit3;
import com.ttProject.unit.extra.bit.Bit4;
import com.ttProject.unit.extra.bit.Bit5;
import com.ttProject.unit.extra.bit.Bit6;
import com.ttProject.unit.extra.bit.Bit7;
import com.ttProject.util.HexUtil;
/**
* load test for subunit
* @author taktod
*/
public class SubUnitLoadTest {
private Logger logger = Logger.getLogger(SubUnitLoadTest.class);
@Test
public void test() throws Exception {
logger.info("start");
IReadChannel channel = new ByteReadChannel(
HexUtil.makeBuffer("2DD59A57347334C915566FD6FBABD08541C4E0D542DC9DE77F698D8FF4D85BA23A88772F7CFADE402DAD602C2C80B16D60B22162DC76160CF510F5152285920592D5BA9B077243A0A9443BCC00DDCEE7D135EEA99DB7F97D2FA9080B42D60B5B160B5AD80166D929C8E9996F55C39716A10CA1D6BCBFAE80FDF6664EB9ADB539BEBD0D5FF0E6CB321AAEABCAAA93F0B5AD60B5AC20B5AD60B5AD629D9CC978A67D22F932E6BF9D849229142FBEDBFF1CBDF57209FFFCDFFE5EF9B90B79B7F820A3B60B5AD60B5AD60B5AD60B5AD629D9CC9784015DFF7F3CDBFF3BB4AEB3A26B667247298739D03FF06FBD8A6B9532405BEC2CBA3B60B5AD60B5AD60B5AD60B5AD629D9CC9782475D0B6F3F975E11240EB5E39BC72CBB308745DE5A7FD969662BA2FF0AA3AF2EFA3B60B5AD60B5AD60B5AD60B5AD6")
// HexUtil.makeBuffer("0E9D67FC01F27008421013BDEE4003E4E8526211")
);
List<SubUnit> unitList = new ArrayList<SubUnit>();
BitLoader loader = new BitLoader(channel);
long readBitSize = 0;
try {
while(true) {
Bit1 firstBit = new Bit1();
loader.load(firstBit);
SubUnit unit = null;
switch(firstBit.get()) {
case 0:
{
if(unitList.size() != 0) {
logger.info("make new frame.");
int size = 0;
BitConnector connector = new BitConnector();
for(SubUnit su : unitList) {
size += su.getBitCount();
connector.feed(su.getBitList());
}
switch(size % 8) {
case 1:connector.feed(new Bit7(0x3F));break;
case 2:connector.feed(new Bit6(0x1F));break;
case 3:connector.feed(new Bit5(0x0F));break;
case 4:connector.feed(new Bit4(0x07));break;
case 5:connector.feed(new Bit3(0x03));break;
case 6:connector.feed(new Bit2(0x01));break;
case 7:connector.feed(new Bit1(0x00));break;
case 0:
default:
break;
}
Frame frame = new Frame();
frame.minimumLoad(new ByteReadChannel(connector.connect()));
unitList = new ArrayList<SubUnit>();
}
logger.info("narrowbandUnit");
unit = new NarrowUnit();
}
break;
case 1:
{
logger.info("widebandUnit");
unit = new WideUnit();
}
break;
default:
throw new Exception("ouchi");
}
unit.load(loader);
logger.info(unit.getBitCount());
readBitSize += unit.getBitCount();
unitList.add(unit);
}
}
catch(Exception e) {
logger.warn("exception is occured, maybe no more subUnit.");
if(unitList.size() != 0) {
logger.info("make new frame.");
int size = 0;
BitConnector connector = new BitConnector();
for(SubUnit su : unitList) {
size += su.getBitCount();
connector.feed(su.getBitList());
}
switch(size % 8) {
case 1:connector.feed(new Bit7(0x3F));break;
case 2:connector.feed(new Bit6(0x1F));break;
case 3:connector.feed(new Bit5(0x0F));break;
case 4:connector.feed(new Bit4(0x07));break;
case 5:connector.feed(new Bit3(0x03));break;
case 6:connector.feed(new Bit2(0x01));break;
case 7:connector.feed(new Bit1(0x00));break;
case 0:
default:
break;
}
Frame frame = new Frame();
frame.minimumLoad(new ByteReadChannel(connector.connect()));
}
logger.info(readBitSize);
}
}
}