/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.frame.adpcmimawav.test; import java.nio.ByteBuffer; import org.apache.log4j.Logger; import com.ttProject.nio.channels.FileReadChannel; import com.ttProject.nio.channels.IReadChannel; import com.ttProject.util.BufferUtil; /** * 最近学習したRangeCoderを使えばもっと圧縮効くのでは? * @author taktod */ public class RcTest { /** ロガー */ private Logger logger = Logger.getLogger(RcTest.class); // @Test public void test() throws Exception { logger.info("test start"); IReadChannel channel = FileReadChannel.openFileReadChannel( Thread.currentThread().getContextClassLoader(). getResource("test_mono.wav") // getResource("rtype_mono.wav") ); channel.position(0x5C); long length = 0; while(channel.position() < channel.size()) { ByteBuffer buffer = BufferUtil.safeRead(channel, 0x400); buffer.position(4); while(buffer.remaining() > 0) { @SuppressWarnings("unused") byte data = buffer.get(); length ++; } } logger.info("original size:" + Long.toHexString(length)); } /* * range coderの処理を実施します。 * 出現頻度は以下から適当にきめます。 13:09:21,369 [main] INFO [ChcTest] - 最終1位回数メモ 13:09:21,369 [main] INFO [ChcTest] - 0:16352 1:4217 2:4747 3:2926 4:0 5:0 6:0 7:0 8:11209 9:4878 10:5688 11:2906 12:0 13:0 14:0 15:0 0 8 10 9 2 1 3 11 4 5 6 7 12 13 14 15 13:25:41,307 [main] INFO [ChcTest] - 最終15位回数メモ 13:25:41,307 [main] INFO [ChcTest] - 0:0 1:2 2:2079 3:253 4:7 5:23 6:10873 7:16504 8:0 9:0 10:0 11:0 12:0 13:7 14:9391 15:13784 0 8 9 10 11 12 1 4 13 5 3 2 14 6 15 7 18:39:57,141 [main] INFO [ChcTest] - 最終1位回数メモ 18:39:57,142 [main] INFO [ChcTest] - 0:47170 1:21390 2:7042 3:5067 4:0 5:0 6:0 7:0 8:42730 9:23854 10:7446 11:4980 12:1 13:0 14:0 15:0 0 8 9 1 11 10 2 3 12 4 5 6 7 13 14 15 18:38:38,436 [main] INFO [ChcTest] - 最終15位回数メモ 18:38:38,436 [main] INFO [ChcTest] - 0:0 1:67 2:55 3:35 4:36 5:84 6:33375 7:50789 8:0 9:0 10:0 11:0 12:0 13:2 14:29492 15:45745 0 8 9 10 11 12 13 3 4 2 1 5 14 6 15 7 とりあえずテーブルは [0 8 9] [1 2 10 11] [3 4 5 12 13] [6 7 14 15] ←でやすい →でにくい 出現頻度的にいくとこうなるか * こっちもhuffmanと同じように、デフォルトのテーブルを決めたあとに、それぞれのframeについて1位と15位になるデータを入れ替えることにします。 * とりあえずデフォルトは * 0: 4 * 8: 4 * 9: 4 * 1: 3 * 2: 3 * 10: 3 * 11: 3 * 3: 2 * 4: 2 * 5: 2 * 12: 2 * 13: 2 * 6: 1 * 7: 1 * 14: 1 * 15: 1 * としておいて計算します。 */ }