/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under GNU GENERAL PUBLIC LICENSE Version 3. */ package com.ttProject.xuggle.frameutil.test; import java.nio.ByteBuffer; import org.apache.log4j.Logger; import com.ttProject.frame.IAudioFrame; import com.ttProject.frame.IFrame; import com.ttProject.util.HexUtil; import com.ttProject.xuggle.frameutil.Depacketizer; import com.xuggle.xuggler.IAudioSamples; import com.xuggle.xuggler.ICodec; import com.xuggle.xuggler.IPacket; import com.xuggle.xuggler.IRational; import com.xuggle.xuggler.IStreamCoder; import com.xuggle.xuggler.IStreamCoder.Direction; /** * 無音frameを作る動作テスト * @author taktod */ public class SilentFrameTest { /** ロガー */ private Logger logger = Logger.getLogger(SilentFrameTest.class); /** * テスト動作 * @throws Exception */ // @Test public void test() throws Exception { logger.info("test start"); IStreamCoder encoder = IStreamCoder.make(Direction.ENCODING, ICodec.ID.CODEC_ID_VORBIS); encoder.setSampleRate(32000); encoder.setBitRate(48000); encoder.setChannels(1); if(encoder.open(null, null) < 0) { throw new Exception("failed to open encoder."); } ByteBuffer buffer = encoder.getExtraData().getByteBuffer(0, encoder.getExtraDataSize()); logger.info(HexUtil.toHex(buffer, true)); ICodec codec = encoder.getCodec(); Depacketizer depacketizer = new Depacketizer(); IAudioSamples.Format findFormat = null; for(IAudioSamples.Format format : codec.getSupportedAudioSampleFormats()) { if(findFormat == null) { findFormat = format; } if(format == IAudioSamples.Format.FMT_S16) { findFormat = format; break; } } if(findFormat == null) { throw new Exception("supported format is unknown."); } encoder.setSampleFormat(findFormat); if(encoder.open(null, null) < 0) { throw new Exception("failed to open audioEncoder."); } logger.info(encoder.getSampleRate()); logger.info(encoder.getChannels()); IAudioSamples samples = IAudioSamples.make(44100, encoder.getChannels(), findFormat); samples.setComplete(true, 44100, encoder.getSampleRate(), encoder.getChannels(), findFormat, 0); samples.setTimeBase(IRational.make(1, encoder.getSampleRate())); int sampleConsumed = 0; int lastCount = 0; IPacket packet = IPacket.make(); while(sampleConsumed < samples.getNumSamples()) { int retval = encoder.encodeAudio(packet, samples, sampleConsumed); if(retval < 0) { throw new Exception("failed to encode."); } sampleConsumed += retval; if(packet.isComplete()) { IFrame frame = depacketizer.getFrame(encoder, packet); logger.info(frame.getCodecType()); logger.info(HexUtil.toHex(frame.getData())); logger.info(frame.getData().remaining()); IAudioFrame aFrame = (IAudioFrame) frame; logger.info(aFrame.getSampleNum() + " : " + (sampleConsumed - lastCount)); lastCount = sampleConsumed; } } logger.info("end"); } }