package com.newmine.phone.comm;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Environment;
import android.util.Log;
import android.content.*;
/** a-law 格式录音类 */
public class ALawRecord {
private static final String tag = "a-law Record";
/** a-Law 编码表 */
private static byte[] ALawCompressTable =
{
1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
};
/** a-Law 解码表 */
private static int[] ALawDecompressTable =
{
0xEA80, 0xEB80, 0xE880, 0xE980, 0xEE80, 0xEF80, 0xEC80, 0xED80,
0xE280, 0xE380, 0xE080, 0xE180, 0xE680, 0xE780, 0xE480, 0xE580,
0xF540, 0xF5C0, 0xF440, 0xF4C0, 0xF740, 0xF7C0, 0xF640, 0xF6C0,
0xF140, 0xF1C0, 0xF040, 0xF0C0, 0xF340, 0xF3C0, 0xF240, 0xF2C0,
0xAA00, 0xAE00, 0xA200, 0xA600, 0xBA00, 0xBE00, 0xB200, 0xB600,
0x8A00, 0x8E00, 0x8200, 0x8600, 0x9A00, 0x9E00, 0x9200, 0x9600,
0xD500, 0xD700, 0xD100, 0xD300, 0xDD00, 0xDF00, 0xD900, 0xDB00,
0xC500, 0xC700, 0xC100, 0xC300, 0xCD00, 0xCF00, 0xC900, 0xCB00,
0xFEA8, 0xFEB8, 0xFE88, 0xFE98, 0xFEE8, 0xFEF8, 0xFEC8, 0xFED8,
0xFE28, 0xFE38, 0xFE08, 0xFE18, 0xFE68, 0xFE78, 0xFE48, 0xFE58,
0xFFA8, 0xFFB8, 0xFF88, 0xFF98, 0xFFE8, 0xFFF8, 0xFFC8, 0xFFD8,
0xFF28, 0xFF38, 0xFF08, 0xFF18, 0xFF68, 0xFF78, 0xFF48, 0xFF58,
0xFAA0, 0xFAE0, 0xFA20, 0xFA60, 0xFBA0, 0xFBE0, 0xFB20, 0xFB60,
0xF8A0, 0xF8E0, 0xF820, 0xF860, 0xF9A0, 0xF9E0, 0xF920, 0xF960,
0xFD50, 0xFD70, 0xFD10, 0xFD30, 0xFDD0, 0xFDF0, 0xFD90, 0xFDB0,
0xFC50, 0xFC70, 0xFC10, 0xFC30, 0xFCD0, 0xFCF0, 0xFC90, 0xFCB0,
0x1580, 0x1480, 0x1780, 0x1680, 0x1180, 0x1080, 0x1380, 0x1280,
0x1D80, 0x1C80, 0x1F80, 0x1E80, 0x1980, 0x1880, 0x1B80, 0x1A80,
0x0AC0, 0x0A40, 0x0BC0, 0x0B40, 0x08C0, 0x0840, 0x09C0, 0x0940,
0x0EC0, 0x0E40, 0x0FC0, 0x0F40, 0x0CC0, 0x0C40, 0x0DC0, 0x0D40,
0x5600, 0x5200, 0x5E00, 0x5A00, 0x4600, 0x4200, 0x4E00, 0x4A00,
0x7600, 0x7200, 0x7E00, 0x7A00, 0x6600, 0x6200, 0x6E00, 0x6A00,
0x2B00, 0x2900, 0x2F00, 0x2D00, 0x2300, 0x2100, 0x2700, 0x2500,
0x3B00, 0x3900, 0x3F00, 0x3D00, 0x3300, 0x3100, 0x3700, 0x3500,
0x0158, 0x0148, 0x0178, 0x0168, 0x0118, 0x0108, 0x0138, 0x0128,
0x01D8, 0x01C8, 0x01F8, 0x01E8, 0x0198, 0x0188, 0x01B8, 0x01A8,
0x0058, 0x0048, 0x0078, 0x0068, 0x0018, 0x0008, 0x0038, 0x0028,
0x00D8, 0x00C8, 0x00F8, 0x00E8, 0x0098, 0x0088, 0x00B8, 0x00A8,
0x0560, 0x0520, 0x05E0, 0x05A0, 0x0460, 0x0420, 0x04E0, 0x04A0,
0x0760, 0x0720, 0x07E0, 0x07A0, 0x0660, 0x0620, 0x06E0, 0x06A0,
0x02B0, 0x0290, 0x02F0, 0x02D0, 0x0230, 0x0210, 0x0270, 0x0250,
0x03B0, 0x0390, 0x03F0, 0x03D0, 0x0330, 0x0310, 0x0370, 0x0350
};
//插入一个 16bit 分辨率的 滴滴 脉冲音表示用户暂停了录音
private static short[] didiraw =
{
0x0000, 0x0000, 0x0086,0x0000, 0x00FC,0x0000, 0x0025,0x0000,
0x0011, 0x00FF, 0x005E,0x00FF, 0x000D,0x0000, 0x00F6,0x00FE,
0x002D, 0x00FD, 0x0094,0x00FE, 0x00AF,0x0003, 0x00E8,0x0006,
0x0039, 0x0003, 0x00D2,0x00FB, 0x00F1,0x00F8, 0x000A,0x00FD,
0x00A3, 0x0001, 0x0000,0x0001, 0x00C0,0x00FE, 0x00D8,0x0001,
0x004A, 0x0008, 0x00CB,0x0007, 0x00B8,0x00FC, 0x0001,0x00F2,
0x008F, 0x00F4, 0x00EA,0x0001, 0x00C4,0x000A, 0x001B,0x0007,
0x00E1, 0x00FF, 0x006E,0x0000, 0x0003,0x0005, 0x00DD,0x0000,
0x00C1, 0x00F3, 0x0055,0x00EE, 0x00F6,0x00FB, 0x0054,0x0010,
0x00DA, 0x0014, 0x00A4,0x0005, 0x0025,0x00F6, 0x0074,0x00F6,
0x00B9, 0x00FE, 0x00D6,0x00FD, 0x001B,0x00F5, 0x0057,0x00F7,
0x00EF, 0x000A, 0x001D,0x001B, 0x003B,0x0011, 0x00F7,0x00F4,
0x0023, 0x00E5, 0x0096,0x00F0, 0x008A,0x0004, 0x0098,0x0008,
0x0029, 0x0000, 0x0077,0x0001, 0x0054,0x0010, 0x00C7,0x0014,
0x0037, 0x00FE, 0x00CD,0x00E0, 0x009A,0x00DF, 0x001F,0x00FE,
0x00FC, 0x0019, 0x003E,0x0017, 0x00AB,0x0002, 0x0039,0x00FB,
0x006E, 0x0004, 0x002E,0x0004, 0x009E,0x00EE, 0x0039,0x00DE,
0x00F3, 0x00F0, 0x00EA,0x0019, 0x0006,0x002C, 0x0048,0x0013,
0x00B0, 0x00EE, 0x004F,0x00E6, 0x00D5,0x00F7, 0x00C2,0x0000,
0x00EA, 0x00F4, 0x0086,0x00F0, 0x0070,0x000A, 0x005D,0x002A,
0x0027, 0x0024, 0x0002,0x00F6, 0x0012,0x00D1, 0x001E,0x00DC,
0x000E, 0x0003, 0x00A0,0x0015, 0x0003,0x0009, 0x00E4,0x00FF,
0x0031, 0x0010, 0x0048,0x001E, 0x00FC,0x0005, 0x00CF,0x00D6,
0x008C, 0x00C8, 0x00D7,0x00F1, 0x004E,0x0026, 0x0022,0x002E,
0x003B, 0x000C, 0x002E,0x00F3, 0x007F,0x00FB, 0x0096,0x0005,
0x00D1, 0x00F0, 0x00B5,0x00D4, 0x00A9,0x00E2, 0x0033,0x001A,
0x008B, 0x003F, 0x00DD,0x0026, 0x000A,0x00EE, 0x00B1,0x00D4,
0x0062, 0x00EA, 0x0024,0x0003, 0x0028,0x00FD, 0x0050,0x00F0,
0x0006, 0x0004, 0x00D4,0x002B, 0x0004,0x0031, 0x00C1,0x00FF,
0x00F3, 0x00C9, 0x0093,0x00CA, 0x00A6,0x00FA, 0x006C,0x001E,
0x002B, 0x0016, 0x006E,0x0001, 0x0095,0x0007, 0x0067,0x001A,
0x0043, 0x000D, 0x003E,0x00DE, 0x00AF,0x00C3, 0x0031,0x00E5,
0x0014, 0x0022, 0x0038,0x0038, 0x00B5,0x0017, 0x0066,0x00F1,
0x00C3, 0x00EF, 0x008C,0x0000, 0x00A6,0x00F9, 0x00CF,0x00DE,
0x0079, 0x00DF, 0x0027,0x000E, 0x00C5,0x003B, 0x00C2,0x0030,
0x0085, 0x00F7, 0x0052,0x00D0, 0x008A,0x00DE, 0x00D3,0x0000,
0x009F, 0x0007, 0x0075,0x00F8, 0x000F,0x00FE, 0x003C,0x0020,
0x006C, 0x0030, 0x0020,0x000B, 0x0026,0x00D1, 0x0060,0x00C3,
0x005A, 0x00EF, 0x0019,0x001F, 0x00B6,0x0021, 0x0037,0x0007,
0x0051, 0x00FF, 0x00FF,0x000F, 0x00C1,0x000F, 0x002F,0x00EA,
0x0007, 0x00C8, 0x00A8,0x00DB, 0x0031,0x0018, 0x0000,0x003C,
0x00AD, 0x0023, 0x0075,0x00F4, 0x00A6,0x00E5, 0x00E0,0x00F7,
0x00EB, 0x00FE, 0x0078,0x00EA, 0x00BD,0x00E0, 0x0011,0x0003,
0x001B, 0x0034, 0x0078,0x0037, 0x0013,0x0003, 0x0051,0x00D0,
0x0018, 0x00D3, 0x005C,0x00FA, 0x0054,0x000F, 0x002D,0x0003,
0x0051, 0x00FC, 0x0075,0x0014, 0x0080,0x002B, 0x0038,0x0014,
0x0060, 0x00DB, 0x002E,0x00C0, 0x004E,0x00E3, 0x0058,0x001B,
0x007E, 0x002B, 0x006D,0x0010, 0x00C1,0x00FA, 0x0047,0x0004,
0x00C8, 0x000D, 0x00E6,0x00F4, 0x0022,0x00D0, 0x007D,0x00D5,
0x0074, 0x000C, 0x005E,0x003B, 0x00FE,0x002E, 0x008F,0x00FB,
0x007B, 0x00DE, 0x00D6,0x00EC, 0x00E4,0x00FF, 0x000E,0x00F6,
0x0040, 0x00E6, 0x007B,0x00FA, 0x009B,0x0029, 0x0012,0x003A,
0x0021, 0x000F, 0x00B4,0x00D4, 0x00A7,0x00C9, 0x00A5,0x00F0,
0x0030, 0x0013, 0x00F5,0x000E, 0x0006,0x00FF, 0x0025,0x000A,
0x00F7, 0x0022, 0x00CA,0x0019, 0x0036,0x00E7, 0x006D,0x00C1,
0x0029, 0x00D8, 0x00AB,0x0013, 0x0020,0x0032, 0x00C6,0x001B,
0x008C, 0x00FA, 0x00E4,0x00F8, 0x00A6,0x0007, 0x00E9,0x00FC,
0x00DD, 0x00DA, 0x0085,0x00D3, 0x0079,0x0000, 0x0066,0x0036,
0x0015, 0x0038, 0x00B9,0x0005, 0x004A,0x00DB, 0x00FB,0x00E0,
0x006E, 0x00FC, 0x00ED,0x00FF, 0x0039,0x00EF, 0x0092,0x00F5,
0x00BD, 0x001D, 0x0037,0x0038, 0x0006,0x001A, 0x00E2,0x00DC,
0x0088, 0x00C3, 0x0006,0x00E5, 0x00A6,0x0012, 0x0024,0x001A,
0x00CC, 0x0005, 0x00BF,0x0002, 0x0006,0x0018, 0x0015,0x001B,
0x0006, 0x00F3, 0x00F0,0x00C6, 0x0079,0x00CF, 0x001E,0x0009,
0x00AF, 0x0034, 0x00AC,0x0027, 0x00BE,0x00FE, 0x0075,0x00EF,
0x003A, 0x00FE, 0x001D,0x0001, 0x00B7,0x00E6, 0x0000,0x00D6,
0x00E9, 0x00F5, 0x00C7,0x002D, 0x00AE,0x003D, 0x0091,0x0011,
0x0089, 0x00DC, 0x00FD,0x00D5, 0x0005,0x00F5, 0x00B3,0x0006,
0x0062, 0x00FA, 0x0002,0x00F5, 0x0026,0x0012, 0x002C,0x0032,
0x0042, 0x0022, 0x00BE,0x00E7, 0x0097,0x00C1, 0x001A,0x00D9,
0x00C2, 0x000D, 0x0028,0x0023, 0x00AF,0x000F, 0x004A,0x00FF,
0x0034, 0x000C, 0x00F0,0x0017, 0x0031,0x00FD, 0x00F3,0x00CF,
0x006C, 0x00CA, 0x0023,0x00FD, 0x00C9,0x0032, 0x0077,0x0032,
0x00C4, 0x0006, 0x004C,0x00E9, 0x00D7,0x00F2, 0x00EA,0x0000,
0x0009, 0x00F2, 0x0093,0x00DC, 0x0035,0x00EE, 0x00B1,0x0022,
0x0005, 0x003F, 0x0071,0x001D, 0x0011,0x00E2, 0x0065,0x00CD,
0x00B1, 0x00EA, 0x006B,0x0009, 0x002A,0x0006, 0x00D9,0x00F8,
0x0073, 0x0008, 0x00CD,0x0028, 0x00B5,0x0026, 0x00C7,0x00F3,
0x001B, 0x00C4, 0x008A,0x00CE, 0x002F,0x0005, 0x00B8,0x0028,
0x004A, 0x001B, 0x0042,0x0000, 0x002E,0x0001, 0x00CF,0x0010,
0x004C, 0x0004, 0x0034,0x00DB, 0x00B5,0x00C9, 0x0061,0x00F1,
0x00AE, 0x002C, 0x00A7,0x003A, 0x0081,0x0011, 0x004D,0x00E7,
0x0018, 0x00E7, 0x005B,0x00FC, 0x003B,0x00FB, 0x004E,0x00E6,
0x006B, 0x00EA, 0x00AE,0x0016, 0x00E9,0x003B, 0x00B8,0x0027,
0x0022, 0x00EB, 0x0067,0x00C8, 0x00E1,0x00DE, 0x00AF,0x0007,
0x00E4, 0x0010, 0x008C,0x0000, 0x00FE,0x0001, 0x0069,0x001D,
0x00C4, 0x0026, 0x0056,0x00FF, 0x00BB,0x00CA, 0x00CB,0x00C6,
0x0018, 0x00FA, 0x0008,0x002A, 0x00FE,0x0026, 0x0089,0x0005,
0x0081, 0x00F8, 0x00B7,0x0006, 0x0060,0x0007, 0x0022,0x00E7,
0x0068, 0x00CD, 0x0075,0x00E7, 0x0033,0x0023, 0x0014,0x003F,
0x007B, 0x001D, 0x00C2,0x00E9, 0x00A6,0x00DC, 0x0015,0x00F4,
0x0004, 0x0001, 0x00D1,0x00F1, 0x000D,0x00EB, 0x0066,0x000B,
0x00CC, 0x0034, 0x00FD,0x002E, 0x007D,0x00F6, 0x00BB,0x00C7,
0x0039, 0x00D3, 0x00BB,0x0001, 0x0010,0x0019, 0x0002,0x000B,
0x00AB, 0x00FF, 0x009B,0x0011, 0x0075,0x0022, 0x00D4,0x0008,
0x008E, 0x00D4, 0x00F0,0x00C2, 0x0005,0x00EE, 0x00E8,0x0026,
0x0028, 0x0031, 0x005F,0x000E, 0x0066,0x00F3, 0x0016,0x00FB,
0x0001, 0x0006, 0x0013,0x00F2, 0x00FE,0x00D4, 0x00BB,0x00E0,
0x00A8, 0x0017, 0x0021,0x003F, 0x0009,0x0029, 0x005A,0x00F0,
0x00F9, 0x00D4, 0x003E,0x00E9, 0x0091,0x0002, 0x007B,0x00FD,
0x0000, 0x00F0, 0x006A,0x0002, 0x00AC,0x002A, 0x003D,0x0032,
0x0093, 0x0002, 0x007D,0x00CB, 0x005B,0x00C9, 0x005C,0x00F8,
0x0081, 0x001D, 0x00C5,0x0016, 0x00CD,0x0001, 0x000A,0x0007,
0x0065, 0x001A, 0x00F0,0x000E, 0x0037,0x00E0, 0x007F,0x00C3,
0x00A0, 0x00E2, 0x00BD,0x001F, 0x005A,0x0038, 0x008F,0x0019,
0x0098, 0x00F2, 0x008E,0x00EF, 0x0063,0x0000, 0x007F,0x00FA,
0x0064, 0x00DF, 0x001F,0x00DE, 0x00A2,0x000B, 0x00CC,0x003A,
0x0093, 0x0032, 0x002E,0x00FA, 0x002A,0x00D1, 0x005D,0x00DD,
0x00AD, 0x00FF, 0x00AA,0x0007, 0x008F,0x00F8, 0x00F7,0x00FC,
0x00F3, 0x001E, 0x000E,0x0031, 0x00BB,0x000D, 0x0026,0x00D3,
0x00A5, 0x00C2, 0x00E0,0x00EC, 0x0097,0x001D, 0x002A,0x0022,
0x0017, 0x0008, 0x0032,0x00FF, 0x00B9,0x000F, 0x00D9,0x0010,
0x0019, 0x00EC, 0x0062,0x00C8, 0x0079,0x00D9, 0x0086,0x0015,
0x0090, 0x003B, 0x0089,0x0025, 0x0037,0x00F6, 0x00C1,0x00E5,
0x0052, 0x00F7, 0x003C,0x00FF, 0x0026,0x00EB, 0x00F8,0x00DF,
0x00CC, 0x0000, 0x00AF,0x0032, 0x00C6,0x0038, 0x00E7,0x0005,
0x00C0, 0x00D1, 0x001A,0x00D2, 0x00BA,0x00F8, 0x00EC,0x000E,
0x0083, 0x0003, 0x00CF,0x00FB, 0x0045,0x0013, 0x009B,0x002B,
0x006E, 0x0016, 0x00AE,0x00DD, 0x0007,0x00C0, 0x00DA,0x00E0,
0x0048, 0x0019, 0x009A,0x002B, 0x00A8,0x0011, 0x002F,0x00FB,
0x00F2, 0x0003, 0x004E,0x000E, 0x008B,0x00F6, 0x00EB,0x00D0,
0x00D3, 0x00D3, 0x00A7,0x0009, 0x0056,0x003A, 0x00A3,0x0030,
0x00C9, 0x00FD, 0x0011,0x00DF, 0x0017,0x00EC, 0x00A0,0x00FF,
0x0098, 0x00F6, 0x00FF,0x00E5, 0x00A1,0x00F8, 0x00E8,0x0027,
0x00CB, 0x003A, 0x00E5,0x0011, 0x00B0,0x00D6, 0x0009,0x00C9,
0x00AF, 0x00EE, 0x0039,0x0012, 0x004E,0x000F, 0x0015,0x00FF,
0x0043, 0x0009, 0x00AC,0x0022, 0x0077,0x001B, 0x009E,0x00E9,
0x00DD, 0x00C1, 0x00F5,0x00D5, 0x0027,0x0011, 0x00BD,0x0031,
0x0029, 0x001D, 0x0090,0x00FB, 0x00BB,0x00F8, 0x00AD,0x0007,
0x001D, 0x00FE, 0x00E5,0x00DB, 0x0071,0x00D2, 0x00C5,0x00FD,
0x00D5, 0x0034, 0x0053,0x0039, 0x0043,0x0008, 0x0073,0x00DC,
0x0044, 0x00E0, 0x009D,0x00FB, 0x0024,0x0000, 0x0056,0x00EF,
0x0044, 0x00F4, 0x00F9,0x001B, 0x0059,0x0038, 0x0085,0x001C,
0x004D, 0x00DF, 0x006F,0x00C3, 0x00EF,0x00E2, 0x0018,0x0011,
0x004B, 0x001A, 0x0052,0x0006, 0x0054,0x0002, 0x0083,0x0017,
0x002B, 0x001C, 0x004F,0x00F5, 0x00E6,0x00C7, 0x00B2,0x00CD,
0x0053, 0x0006, 0x00B6,0x0033, 0x0002,0x0029, 0x004E,0x0000,
0x00A8, 0x00EF, 0x00EA,0x00FD, 0x00C2,0x0001, 0x00C7,0x00E7,
0x0080, 0x00D5, 0x0081,0x00F3, 0x00CC,0x002B, 0x0063,0x003E,
0x0032, 0x0014, 0x0048,0x00DE, 0x0082,0x00D5, 0x00C1,0x00F3,
0x006E, 0x0006, 0x00AD,0x00FA, 0x004A,0x00F4, 0x008A,0x0010,
0x00CE, 0x0031, 0x004E,0x0024, 0x0069,0x00EA, 0x0016,0x00C2,
0x001B, 0x00D7, 0x00AC,0x000B, 0x00E9,0x0022, 0x0084,0x0010,
0x006E, 0x00FF, 0x00B3,0x000B, 0x0076,0x0018, 0x0025,0x00FF,
0x004C, 0x00D1, 0x0031,0x00C9, 0x0047,0x00FA, 0x0039,0x0031,
0x0089, 0x0033, 0x00BF,0x0008, 0x0003,0x00EA, 0x0062,0x00F2,
0x00FA, 0x0000, 0x00E8,0x00F2, 0x008F,0x00DC, 0x0043,0x00EC,
0x007F, 0x0020, 0x0020,0x003F, 0x00F3,0x001F, 0x0054,0x00E4,
0x0054, 0x00CD, 0x0026,0x00E9, 0x0092,0x0008, 0x0069,0x0006,
0x00AE, 0x00F8, 0x0032,0x0007, 0x0014,0x0028, 0x0032,0x0028,
0x007B, 0x00F6, 0x002D,0x00C5, 0x00D7,0x00CC, 0x00B0,0x0002,
0x00F1, 0x0027, 0x003B,0x001C, 0x00FD,0x0000, 0x00E7,0x0000,
0x00E1, 0x0010, 0x00C6,0x0005, 0x00BD,0x00DC, 0x0012,0x00C9,
0x00AD, 0x00EE, 0x009C,0x002A, 0x0044,0x003B, 0x00BD,0x0013,
0x0098, 0x00E8, 0x00BA,0x00E6, 0x00E2,0x00FB, 0x00B9,0x00FB,
0x009D, 0x00E6, 0x000A,0x00E9, 0x007A,0x0014, 0x0072,0x003B,
0x00E7, 0x0029, 0x00C8,0x00ED, 0x00E3,0x00C8, 0x0044,0x00DD,
0x0042, 0x0006, 0x00E3,0x0010, 0x00CE,0x0000, 0x003C,0x0001,
0x0088, 0x001C, 0x00AA,0x0027, 0x00DB,0x0001, 0x004C,0x00CC,
0x0090, 0x00C5, 0x0062,0x00F7, 0x00AC,0x0028, 0x00D1,0x0027,
0x00C8, 0x0006, 0x00A1,0x00F8, 0x007E,0x0006, 0x0047,0x0008,
0x00A4, 0x00E8, 0x0055,0x00CD, 0x001A,0x00E5, 0x00C7,0x0020,
0x0022, 0x003F, 0x00C0,0x001F, 0x00A1,0x00EB, 0x0092,0x00DC,
0x0033, 0x00F3, 0x00FD,0x0000, 0x003D,0x00F2, 0x0042,0x00EA,
0x006A, 0x0009, 0x00DD,0x0033, 0x00AE,0x0030, 0x0054,0x00F9,
0x00CF, 0x00C8, 0x00C3,0x00D1, 0x00CC,0x00FF, 0x009F,0x0018,
0x0088, 0x000B, 0x007D,0x00FF, 0x00CB,0x0010, 0x00CF,0x0022,
0x00F7, 0x000A, 0x0075,0x00D6, 0x0045,0x00C2, 0x004E,0x00EB,
0x00F9, 0x0024, 0x00A9,0x0031, 0x0000,0x0010, 0x000F,0x00F4,
0x00C7, 0x00FA, 0x0053,0x0006, 0x0055,0x00F3, 0x005E,0x00D5,
0x00E1, 0x00DE, 0x0011,0x0015, 0x0097,0x003E, 0x001F,0x002B,
0x00B5, 0x00F2, 0x005C,0x00D5, 0x0024,0x00E8, 0x00F6,0x0001,
0x00CE, 0x00FD, 0x00BC,0x00EF, 0x00D4,0x0000, 0x006F,0x0029,
0x005C, 0x0033, 0x0064,0x0005, 0x001F,0x00CD, 0x0040,0x00C8,
0x0013, 0x00F6, 0x0083,0x001C, 0x0056,0x0017, 0x0031,0x0002,
0x0081, 0x0006, 0x0011,0x001A, 0x003B,0x0010, 0x0023,0x00E3,
0x00DA, 0x00C5, 0x00B7,0x00E1, 0x0092,0x001B, 0x006C,0x0034,
0x0030, 0x0019, 0x00EF,0x00F4, 0x000C,0x00F1, 0x002E,0x0000,
0x00E5, 0x00FB, 0x0031,0x00E4, 0x00C5,0x00E1, 0x00BD,0x0007,
0x007B, 0x0030, 0x0066,0x002B, 0x0070,0x00FD, 0x00D3,0x00DA,
0x0066, 0x00E3, 0x00D2,0x00FE, 0x00FE,0x0005, 0x005E,0x00FA,
0x00E4, 0x00FC, 0x0036,0x0016, 0x00B2,0x0024, 0x00E7,0x000B,
0x0037, 0x00E1, 0x0002,0x00D4, 0x00E6,0x00F0, 0x0053,0x0013,
0x007F, 0x0017, 0x0003,0x0006, 0x0069,0x00FF, 0x0005,0x000A,
0x0073, 0x000B, 0x00AE,0x00F4, 0x00D0,0x00DD, 0x0038,0x00E7,
0x0049, 0x000B, 0x00D0,0x0022, 0x00CF,0x0016, 0x0074,0x00FB,
0x0065, 0x00F1, 0x00ED,0x00FA, 0x00BF,0x00FF, 0x0052,0x00F5,
0x00FC, 0x00EE, 0x0042,0x00FF, 0x0095,0x0018, 0x0067,0x001C,
0x002F, 0x0004, 0x00FD,0x00EA, 0x0078,0x00EA, 0x00FD,0x00FB,
0x005E, 0x0006, 0x00A6,0x0001, 0x000A,0x00FE, 0x0068,0x0007,
0x0072, 0x0011, 0x0095,0x0009, 0x00DB,0x00F3, 0x0052,0x00E8,
0x00EE, 0x00F3, 0x001A,0x0008, 0x00D4,0x000E, 0x003A,0x0006,
0x009B, 0x00FE, 0x001F,0x0001, 0x006F,0x0004, 0x00BC,0x00FD,
0x0010, 0x00F3, 0x00A6,0x00F3, 0x00C7,0x0001, 0x004B,0x000E,
0x000B, 0x000C, 0x0003,0x0000, 0x00E6,0x00F8, 0x00AB,0x00FB,
0x00DE, 0x00FF, 0x0051,0x00FE, 0x0049,0x00FB, 0x0071,0x00FE,
0x001A, 0x0006, 0x00E9,0x0008, 0x00E3,0x0002, 0x00E6,0x00FA,
0x0058, 0x00F9, 0x00E2,0x00FD, 0x00B9,0x0001, 0x0068,0x0001,
0x00EF, 0x00FF, 0x0096,0x0000, 0x000F,0x0002, 0x0074,0x0001,
0x0034, 0x00FF, 0x0028,0x00FE, 0x001D,0x00FF, 0x0024,0x0000,
0x0000, 0x0000, 0x0000,0x0000, 0x0001,0x0000, 0x0000,0x0000,
0x00FB, 0x00FF, 0x00FA,0x00FF, 0x0000,0x0000, 0x00ED,0x00FF,
0x00BB, 0x00FF, 0x00D6,0x00FF, 0x008A,0x0000, 0x0034,0x0001,
0x00AA, 0x0000, 0x0001,0x00FF, 0x0013,0x00FE, 0x0017,0x00FF,
0x0090, 0x0000, 0x0062,0x0000, 0x007A,0x00FF, 0x00D9,0x0000,
0x0025, 0x0004, 0x0033,0x0004, 0x001B,0x00FE, 0x005F,0x00F7,
0x0084, 0x00F8, 0x0052,0x0001, 0x00D3,0x0007, 0x0068,0x0005,
0x00E8, 0x00FF, 0x005A,0x0000, 0x0047,0x0004, 0x00C2,0x0000,
0x00ED, 0x00F4, 0x00A3,0x00EF, 0x002F,0x00FC, 0x00B4,0x000F,
0x0057, 0x0014, 0x0090,0x0005, 0x0035,0x00F6, 0x0078,0x00F6,
0x00B9, 0x00FE, 0x00D6,0x00FD, 0x001B,0x00F5, 0x0057,0x00F7,
0x00EF, 0x000A, 0x001D,0x001B, 0x003B,0x0011, 0x00F7,0x00F4,
0x0023, 0x00E5, 0x0096,0x00F0, 0x008A,0x0004, 0x0098,0x0008,
0x0029, 0x0000, 0x0077,0x0001, 0x0054,0x0010, 0x00C7,0x0014,
0x0037, 0x00FE, 0x00CD,0x00E0, 0x009A,0x00DF, 0x001F,0x00FE,
0x00FC, 0x0019, 0x003E,0x0017, 0x00AB,0x0002, 0x0039,0x00FB,
0x006E, 0x0004, 0x002E,0x0004, 0x009E,0x00EE, 0x0039,0x00DE,
0x00F3, 0x00F0, 0x00EA,0x0019, 0x0006,0x002C, 0x0048,0x0013,
0x00B0, 0x00EE, 0x004F,0x00E6, 0x00D5,0x00F7, 0x00C2,0x0000,
0x00EA, 0x00F4, 0x0086,0x00F0, 0x0070,0x000A, 0x005D,0x002A,
0x0027, 0x0024, 0x0002,0x00F6, 0x0012,0x00D1, 0x001E,0x00DC,
0x000E, 0x0003, 0x00A0,0x0015, 0x0003,0x0009, 0x00E4,0x00FF,
0x0031, 0x0010, 0x0048,0x001E, 0x00FC,0x0005, 0x00CF,0x00D6,
0x008C, 0x00C8, 0x00D7,0x00F1, 0x004E,0x0026, 0x0022,0x002E,
0x003B, 0x000C, 0x002E,0x00F3, 0x007F,0x00FB, 0x0096,0x0005,
0x00D1, 0x00F0, 0x00B5,0x00D4, 0x00A9,0x00E2, 0x0033,0x001A,
0x008B, 0x003F, 0x00DD,0x0026, 0x000A,0x00EE, 0x00B1,0x00D4,
0x0062, 0x00EA, 0x0024,0x0003, 0x0028,0x00FD, 0x0050,0x00F0,
0x0006, 0x0004, 0x00D4,0x002B, 0x0004,0x0031, 0x00C1,0x00FF,
0x00F3, 0x00C9, 0x0093,0x00CA, 0x00A6,0x00FA, 0x006C,0x001E,
0x002B, 0x0016, 0x006E,0x0001, 0x0095,0x0007, 0x0067,0x001A,
0x0043, 0x000D, 0x003E,0x00DE, 0x00AF,0x00C3, 0x0031,0x00E5,
0x0014, 0x0022, 0x0038,0x0038, 0x00B5,0x0017, 0x0066,0x00F1,
0x00C3, 0x00EF, 0x008C,0x0000, 0x00A6,0x00F9, 0x00CF,0x00DE,
0x0079, 0x00DF, 0x0027,0x000E, 0x00C5,0x003B, 0x00C2,0x0030,
0x0085, 0x00F7, 0x0052,0x00D0, 0x008A,0x00DE, 0x00D3,0x0000,
0x009F, 0x0007, 0x0075,0x00F8, 0x000F,0x00FE, 0x003C,0x0020,
0x006C, 0x0030, 0x0020,0x000B, 0x0026,0x00D1, 0x0060,0x00C3,
0x005A, 0x00EF, 0x0019,0x001F, 0x00B6,0x0021, 0x0037,0x0007,
0x0051, 0x00FF, 0x00FF,0x000F, 0x00C1,0x000F, 0x002F,0x00EA,
0x0007, 0x00C8, 0x00A8,0x00DB, 0x0031,0x0018, 0x0000,0x003C,
0x00AD, 0x0023, 0x0075,0x00F4, 0x00A6,0x00E5, 0x00E0,0x00F7,
0x00EB, 0x00FE, 0x0078,0x00EA, 0x00BD,0x00E0, 0x0011,0x0003,
0x001B, 0x0034, 0x0078,0x0037, 0x0013,0x0003, 0x0051,0x00D0,
0x0018, 0x00D3, 0x005C,0x00FA, 0x0054,0x000F, 0x002D,0x0003,
0x0051, 0x00FC, 0x0075,0x0014, 0x0080,0x002B, 0x0038,0x0014,
0x0060, 0x00DB, 0x002E,0x00C0, 0x004E,0x00E3, 0x0058,0x001B,
0x007E, 0x002B, 0x006D,0x0010, 0x00C1,0x00FA, 0x0047,0x0004,
0x00C8, 0x000D, 0x00E6,0x00F4, 0x0022,0x00D0, 0x007D,0x00D5,
0x0074, 0x000C, 0x005E,0x003B, 0x00FE,0x002E, 0x008F,0x00FB,
0x007B, 0x00DE, 0x00D6,0x00EC, 0x00E4,0x00FF, 0x000E,0x00F6,
0x0040, 0x00E6, 0x007B,0x00FA, 0x009B,0x0029, 0x0012,0x003A,
0x0021, 0x000F, 0x00B4,0x00D4, 0x00A7,0x00C9, 0x00A5,0x00F0,
0x0030, 0x0013, 0x00F5,0x000E, 0x0006,0x00FF, 0x0025,0x000A,
0x00F7, 0x0022, 0x00CA,0x0019, 0x0036,0x00E7, 0x006D,0x00C1,
0x0029, 0x00D8, 0x00AB,0x0013, 0x0020,0x0032, 0x00C6,0x001B,
0x008C, 0x00FA, 0x00E4,0x00F8, 0x00A6,0x0007, 0x00E9,0x00FC,
0x00DD, 0x00DA, 0x0085,0x00D3, 0x0079,0x0000, 0x0066,0x0036,
0x0015, 0x0038, 0x00B9,0x0005, 0x004A,0x00DB, 0x00FB,0x00E0,
0x006E, 0x00FC, 0x00ED,0x00FF, 0x0039,0x00EF, 0x0092,0x00F5,
0x00BD, 0x001D, 0x0037,0x0038, 0x0006,0x001A, 0x00E2,0x00DC,
0x0088, 0x00C3, 0x0006,0x00E5, 0x00A6,0x0012, 0x0024,0x001A,
0x00CC, 0x0005, 0x00BF,0x0002, 0x0006,0x0018, 0x0015,0x001B,
0x0006, 0x00F3, 0x00F0,0x00C6, 0x0079,0x00CF, 0x001E,0x0009,
0x00AF, 0x0034, 0x00AC,0x0027, 0x00BE,0x00FE, 0x0075,0x00EF,
0x003A, 0x00FE, 0x001D,0x0001, 0x00B7,0x00E6, 0x0000,0x00D6,
0x00E9, 0x00F5, 0x00C7,0x002D, 0x00AE,0x003D, 0x0091,0x0011,
0x0089, 0x00DC, 0x00FD,0x00D5, 0x0005,0x00F5, 0x00B3,0x0006,
0x0062, 0x00FA, 0x0002,0x00F5, 0x0026,0x0012, 0x002C,0x0032,
0x0042, 0x0022, 0x00BE,0x00E7, 0x0097,0x00C1, 0x001A,0x00D9,
0x00C2, 0x000D, 0x0028,0x0023, 0x00AF,0x000F, 0x004A,0x00FF,
0x0034, 0x000C, 0x00F0,0x0017, 0x0031,0x00FD, 0x00F3,0x00CF,
0x006C, 0x00CA, 0x0023,0x00FD, 0x00C9,0x0032, 0x0077,0x0032,
0x00C4, 0x0006, 0x004C,0x00E9, 0x00D7,0x00F2, 0x00EA,0x0000,
0x0009, 0x00F2, 0x0093,0x00DC, 0x0035,0x00EE, 0x00B1,0x0022,
0x0005, 0x003F, 0x0071,0x001D, 0x0011,0x00E2, 0x0065,0x00CD,
0x00B1, 0x00EA, 0x006B,0x0009, 0x002A,0x0006, 0x00D9,0x00F8,
0x0073, 0x0008, 0x00CD,0x0028, 0x00B5,0x0026, 0x00C7,0x00F3,
0x001B, 0x00C4, 0x008A,0x00CE, 0x002F,0x0005, 0x00B8,0x0028,
0x004A, 0x001B, 0x0042,0x0000, 0x002E,0x0001, 0x00CF,0x0010,
0x004C, 0x0004, 0x0034,0x00DB, 0x00B5,0x00C9, 0x0061,0x00F1,
0x00AE, 0x002C, 0x00A7,0x003A, 0x0081,0x0011, 0x004D,0x00E7,
0x0018, 0x00E7, 0x005B,0x00FC, 0x003B,0x00FB, 0x004E,0x00E6,
0x006B, 0x00EA, 0x00AE,0x0016, 0x00E9,0x003B, 0x00B8,0x0027,
0x0022, 0x00EB, 0x0067,0x00C8, 0x00E1,0x00DE, 0x00AF,0x0007,
0x00E4, 0x0010, 0x008C,0x0000, 0x00FE,0x0001, 0x0069,0x001D,
0x00C4, 0x0026, 0x0056,0x00FF, 0x00BB,0x00CA, 0x00CB,0x00C6,
0x0018, 0x00FA, 0x0008,0x002A, 0x00FE,0x0026, 0x0089,0x0005,
0x0081, 0x00F8, 0x00B7,0x0006, 0x0060,0x0007, 0x0022,0x00E7,
0x0068, 0x00CD, 0x0075,0x00E7, 0x0033,0x0023, 0x0014,0x003F,
0x007B, 0x001D, 0x00C2,0x00E9, 0x00A6,0x00DC, 0x0015,0x00F4,
0x0004, 0x0001, 0x00D1,0x00F1, 0x000D,0x00EB, 0x0066,0x000B,
0x00CC, 0x0034, 0x00FD,0x002E, 0x007D,0x00F6, 0x00BB,0x00C7,
0x0039, 0x00D3, 0x00BB,0x0001, 0x0010,0x0019, 0x0002,0x000B,
0x00AB, 0x00FF, 0x009B,0x0011, 0x0075,0x0022, 0x00D4,0x0008,
0x008E, 0x00D4, 0x00F0,0x00C2, 0x0005,0x00EE, 0x00E8,0x0026,
0x0028, 0x0031, 0x005F,0x000E, 0x0066,0x00F3, 0x0016,0x00FB,
0x0001, 0x0006, 0x0013,0x00F2, 0x00FE,0x00D4, 0x00BB,0x00E0,
0x00A8, 0x0017, 0x0021,0x003F, 0x0009,0x0029, 0x005A,0x00F0,
0x00F9, 0x00D4, 0x003E,0x00E9, 0x0091,0x0002, 0x007B,0x00FD,
0x0000, 0x00F0, 0x006A,0x0002, 0x00AC,0x002A, 0x003D,0x0032,
0x0093, 0x0002, 0x007D,0x00CB, 0x005B,0x00C9, 0x005C,0x00F8,
0x0081, 0x001D, 0x00C5,0x0016, 0x00CD,0x0001, 0x000A,0x0007,
0x0065, 0x001A, 0x00F0,0x000E, 0x0037,0x00E0, 0x007F,0x00C3,
0x00A0, 0x00E2, 0x00BD,0x001F, 0x005A,0x0038, 0x008F,0x0019,
0x0098, 0x00F2, 0x008E,0x00EF, 0x0063,0x0000, 0x007F,0x00FA,
0x0064, 0x00DF, 0x001F,0x00DE, 0x00A2,0x000B, 0x00CC,0x003A,
0x0093, 0x0032, 0x002E,0x00FA, 0x002A,0x00D1, 0x005D,0x00DD,
0x00AD, 0x00FF, 0x00AA,0x0007, 0x008F,0x00F8, 0x00F7,0x00FC,
0x00F3, 0x001E, 0x000E,0x0031, 0x00BB,0x000D, 0x0026,0x00D3,
0x00A5, 0x00C2, 0x00E0,0x00EC, 0x0097,0x001D, 0x002A,0x0022,
0x0017, 0x0008, 0x0032,0x00FF, 0x00B9,0x000F, 0x00D9,0x0010,
0x0019, 0x00EC, 0x0062,0x00C8, 0x0079,0x00D9, 0x0086,0x0015,
0x0090, 0x003B, 0x0089,0x0025, 0x0037,0x00F6, 0x00C1,0x00E5,
0x0052, 0x00F7, 0x003C,0x00FF, 0x0026,0x00EB, 0x00F8,0x00DF,
0x00CC, 0x0000, 0x00AF,0x0032, 0x00C6,0x0038, 0x00E7,0x0005,
0x00C0, 0x00D1, 0x001A,0x00D2, 0x00BA,0x00F8, 0x00EC,0x000E,
0x0083, 0x0003, 0x00CF,0x00FB, 0x0045,0x0013, 0x009B,0x002B,
0x006E, 0x0016, 0x00AE,0x00DD, 0x0007,0x00C0, 0x00DA,0x00E0,
0x0048, 0x0019, 0x009A,0x002B, 0x00A8,0x0011, 0x002F,0x00FB,
0x00F2, 0x0003, 0x004E,0x000E, 0x008B,0x00F6, 0x00EB,0x00D0,
0x00D3, 0x00D3, 0x00A7,0x0009, 0x0056,0x003A, 0x00A3,0x0030,
0x00C9, 0x00FD, 0x0011,0x00DF, 0x0017,0x00EC, 0x00A0,0x00FF,
0x0098, 0x00F6, 0x00FF,0x00E5, 0x00A1,0x00F8, 0x00E8,0x0027,
0x00CB, 0x003A, 0x00E5,0x0011, 0x00B0,0x00D6, 0x0009,0x00C9,
0x00AF, 0x00EE, 0x0039,0x0012, 0x004E,0x000F, 0x0015,0x00FF,
0x0043, 0x0009, 0x00AC,0x0022, 0x0077,0x001B, 0x009E,0x00E9,
0x00DD, 0x00C1, 0x00F5,0x00D5, 0x0027,0x0011, 0x00BD,0x0031,
0x0029, 0x001D, 0x0090,0x00FB, 0x00BB,0x00F8, 0x00AD,0x0007,
0x001D, 0x00FE, 0x00E5,0x00DB, 0x0071,0x00D2, 0x00C5,0x00FD,
0x00D5, 0x0034, 0x0053,0x0039, 0x0043,0x0008, 0x0073,0x00DC,
0x0044, 0x00E0, 0x009D,0x00FB, 0x0024,0x0000, 0x0056,0x00EF,
0x0044, 0x00F4, 0x00F9,0x001B, 0x0059,0x0038, 0x0085,0x001C,
0x004D, 0x00DF, 0x006F,0x00C3, 0x00EF,0x00E2, 0x0018,0x0011,
0x004B, 0x001A, 0x0052,0x0006, 0x0054,0x0002, 0x0083,0x0017,
0x002B, 0x001C, 0x004F,0x00F5, 0x00E6,0x00C7, 0x00B2,0x00CD,
0x0053, 0x0006, 0x00B6,0x0033, 0x0002,0x0029, 0x004E,0x0000,
0x00A8, 0x00EF, 0x00EA,0x00FD, 0x00C2,0x0001, 0x00C7,0x00E7,
0x0080, 0x00D5, 0x0081,0x00F3, 0x00CC,0x002B, 0x0063,0x003E,
0x0032, 0x0014, 0x0048,0x00DE, 0x0082,0x00D5, 0x00C1,0x00F3,
0x006E, 0x0006, 0x00AD,0x00FA, 0x004A,0x00F4, 0x008A,0x0010,
0x00CE, 0x0031, 0x004E,0x0024, 0x0069,0x00EA, 0x0016,0x00C2,
0x001B, 0x00D7, 0x00AC,0x000B, 0x00E9,0x0022, 0x0084,0x0010,
0x006E, 0x00FF, 0x00B3,0x000B, 0x0076,0x0018, 0x0025,0x00FF,
0x004C, 0x00D1, 0x0031,0x00C9, 0x0047,0x00FA, 0x0039,0x0031,
0x0089, 0x0033, 0x00BF,0x0008, 0x0003,0x00EA, 0x0062,0x00F2,
0x00FA, 0x0000, 0x00E8,0x00F2, 0x008F,0x00DC, 0x0043,0x00EC,
0x007F, 0x0020, 0x0020,0x003F, 0x00F3,0x001F, 0x0054,0x00E4,
0x0054, 0x00CD, 0x0026,0x00E9, 0x0092,0x0008, 0x0069,0x0006,
0x00AE, 0x00F8, 0x0032,0x0007, 0x0014,0x0028, 0x0032,0x0028,
0x007B, 0x00F6, 0x002D,0x00C5, 0x00D7,0x00CC, 0x00B0,0x0002,
0x00F1, 0x0027, 0x003B,0x001C, 0x00FD,0x0000, 0x00E7,0x0000,
0x00E1, 0x0010, 0x00C6,0x0005, 0x00BD,0x00DC, 0x0012,0x00C9,
0x00AD, 0x00EE, 0x009C,0x002A, 0x0044,0x003B, 0x00BD,0x0013,
0x0098, 0x00E8, 0x00BA,0x00E6, 0x00E2,0x00FB, 0x00B9,0x00FB,
0x009D, 0x00E6, 0x000A,0x00E9, 0x007A,0x0014, 0x0072,0x003B,
0x00E7, 0x0029, 0x00C8,0x00ED, 0x00E3,0x00C8, 0x0044,0x00DD,
0x0042, 0x0006, 0x00E3,0x0010, 0x00CE,0x0000, 0x003C,0x0001,
0x0088, 0x001C, 0x00AA,0x0027, 0x00DB,0x0001, 0x004C,0x00CC,
0x0090, 0x00C5, 0x0062,0x00F7, 0x00AC,0x0028, 0x00D1,0x0027,
0x00C8, 0x0006, 0x00A1,0x00F8, 0x007E,0x0006, 0x0047,0x0008,
0x00A4, 0x00E8, 0x0055,0x00CD, 0x001A,0x00E5, 0x00C7,0x0020,
0x0022, 0x003F, 0x00C0,0x001F, 0x00A1,0x00EB, 0x0092,0x00DC,
0x0033, 0x00F3, 0x00FD,0x0000, 0x003D,0x00F2, 0x0042,0x00EA,
0x006A, 0x0009, 0x00DD,0x0033, 0x00AE,0x0030, 0x0054,0x00F9,
0x00CF, 0x00C8, 0x00C3,0x00D1, 0x00CC,0x00FF, 0x009F,0x0018,
0x0088, 0x000B, 0x007D,0x00FF, 0x00CB,0x0010, 0x00CF,0x0022,
0x00F7, 0x000A, 0x0075,0x00D6, 0x0045,0x00C2, 0x004E,0x00EB,
0x00F9, 0x0024, 0x00A9,0x0031, 0x0000,0x0010, 0x000F,0x00F4,
0x00C7, 0x00FA, 0x0053,0x0006, 0x0055,0x00F3, 0x005E,0x00D5,
0x00E1, 0x00DE, 0x0011,0x0015, 0x0097,0x003E, 0x001F,0x002B,
0x00B5, 0x00F2, 0x005C,0x00D5, 0x0024,0x00E8, 0x00F6,0x0001,
0x00CE, 0x00FD, 0x00BC,0x00EF, 0x00D4,0x0000, 0x006F,0x0029,
0x005C, 0x0033, 0x0064,0x0005, 0x001F,0x00CD, 0x0040,0x00C8,
0x0013, 0x00F6, 0x0083,0x001C, 0x0056,0x0017, 0x0031,0x0002,
0x0081, 0x0006, 0x0011,0x001A, 0x003B,0x0010, 0x0023,0x00E3,
0x00DA, 0x00C5, 0x00B7,0x00E1, 0x0092,0x001B, 0x006C,0x0034,
0x0030, 0x0019, 0x00EF,0x00F4, 0x000C,0x00F1, 0x002E,0x0000,
0x00E5, 0x00FB, 0x0031,0x00E4, 0x00C5,0x00E1, 0x00BD,0x0007,
0x007B, 0x0030, 0x0066,0x002B, 0x0070,0x00FD, 0x00D3,0x00DA,
0x0066, 0x00E3, 0x00D2,0x00FE, 0x00FE,0x0005, 0x005E,0x00FA,
0x00E4, 0x00FC, 0x0036,0x0016, 0x00B2,0x0024, 0x00E7,0x000B,
0x0037, 0x00E1, 0x0002,0x00D4, 0x00E6,0x00F0, 0x0053,0x0013,
0x007F, 0x0017, 0x0003,0x0006, 0x0069,0x00FF, 0x0005,0x000A,
0x0073, 0x000B, 0x00AE,0x00F4, 0x00D0,0x00DD, 0x0038,0x00E7,
0x0049, 0x000B, 0x00D0,0x0022, 0x00CF,0x0016, 0x0074,0x00FB,
0x0065, 0x00F1, 0x00ED,0x00FA, 0x00BF,0x00FF, 0x0052,0x00F5,
0x00FC, 0x00EE, 0x0042,0x00FF, 0x0095,0x0018, 0x0067,0x001C,
0x002F, 0x0004, 0x00FD,0x00EA, 0x0078,0x00EA, 0x00FD,0x00FB,
0x005E, 0x0006, 0x00A6,0x0001, 0x000A,0x00FE, 0x0068,0x0007,
0x0072, 0x0011, 0x0094,0x0009, 0x00DC,0x00F3, 0x0053,0x00E8,
0x00EF, 0x00F3, 0x0019,0x0008, 0x00D3,0x000E, 0x0039,0x0006,
0x009C, 0x00FE, 0x001E,0x0001, 0x006E,0x0004, 0x00BD,0x00FD,
0x0011, 0x00F3, 0x00A7,0x00F3, 0x00C6,0x0001, 0x004A,0x000E,
0x000A, 0x000C, 0x0002,0x0000, 0x00E7,0x00F8, 0x00AC,0x00FB,
0x00DF, 0x00FF, 0x0052,0x00FE, 0x004A,0x00FB, 0x0072,0x00FE,
0x0019, 0x0006, 0x00E8,0x0008, 0x00E2,0x0002, 0x00E7,0x00FA,
0x0059, 0x00F9, 0x00E3,0x00FD, 0x00B8,0x0001, 0x0067,0x0001,
0x00F0, 0x00FF, 0x0095,0x0000, 0x000E,0x0002, 0x0073,0x0001,
0x0035, 0x00FF, 0x0029,0x00FE, 0x001E,0x00FF, 0x0023,0x0000,
};
/** 设置录音的格式 */
public WaveFormat format;
/** 录音文件保存位置 可选项为 sdcard 和 flash */
public SaveTarget saveTarget;
/** 音源 (固定为麦克风) */
private static final int audioSource = MediaRecorder.AudioSource.MIC;
/** PCM 采样率 (音频采样级别)*/
private static final int sampleRateInHz = 8000;
/** 声道个数 (单声道)*/
private static final int channelConfig = AudioFormat.CHANNEL_IN_MONO;
/** PCM 格式 音频采样大小 分辨率 (16bit)*/
private static final int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
/** 缓冲区字节大小 */
private static final int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz,
channelConfig, audioFormat);
/** 调用程序的上下文,用于获取程序数据路径 */
private Context content;
//如果不使用文件流,当录音比较大的时候内存会溢出,考虑设备内存情况,还是采用文件流
/**声音文件的文件名 */
private String wavName;
/**缓存数据的文件名 */
private String rawName;
/** 录音缓存文件流 */
private FileOutputStream rawWrite;
/** 通过查表将一个16bit PCM采样换算成 8bit a-law采样 */
private static byte LinearToAlawSample(short sample)
{
int sign = 0;
int exponent = 0;
int mantissa = 0;
byte compressedByte = 0;
sign = ((~sample) >> 8) & 0x80;
if (sign == 0)
{
sample = (short)-sample;
}
if (sample > 0x7F7B)
{
sample = 0x7F7B;
}
if (sample >= 0x100)
{
exponent = (int)ALawCompressTable[(sample >> 8) & 0x7F];
mantissa = (sample >> (exponent + 3)) & 0x0F;
compressedByte = (byte)((exponent << 4) | mantissa);
}
else
{
compressedByte = (byte)(sample >> 4);
}
compressedByte ^= (byte)(sign ^ 0x55);
return compressedByte;
}
/** 通过查表将一个8bit a-law采样换算回 16bit PCM采样 */
private static short AlawToLinearSample(byte sample)
{
return (short)ALawDecompressTable[sample];
}
/** 构造函数,必须调用此方法传入content */
public ALawRecord(Context appContext){
content = appContext;
rawName = content.getCacheDir().getAbsolutePath() + '/' + "temp.raw";
saveTarget = SaveTarget.SDCARD;
}
private AudioRecord audioRecord;
private boolean recording;
private boolean paused;
/** 是否正在录音 */
public boolean isRecord(){
return recording;
}
/** 设置保存声音文件的文件名并根据存储卡是否插入决定最终保存路径,返回最终保存路径和文件名 */
public String setFileName(String wavFileName){
String savePath;
switch (saveTarget){
case SDCARD:
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
savePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Record/";
wavName = savePath + changeFileExtensionName(wavFileName, "wav");
}
else
{
Log.d(tag, "没有检测到已经挂载sdcard,保存目标自动切换到flash");
savePath = content.getFilesDir().getAbsolutePath() + '/';
saveTarget = SaveTarget.FLASH;
wavName = changeFileExtensionName(wavFileName, "wav");
}
break;
default:
savePath = content.getFilesDir().getAbsolutePath() + '/';
saveTarget = SaveTarget.FLASH;
wavName = changeFileExtensionName(wavFileName, "wav");
break;
}
File dir = new File(savePath);
if (!dir.isDirectory()){
dir.mkdirs();
}
Log.d(tag,"rawName:"+ rawName);
Log.d(tag,"wavName:"+ wavName);
return new String(savePath + changeFileExtensionName(wavFileName, "wav"));
}
private class PCMRecordThread extends Thread{
public void run(){
Log.d(tag, "录音线程开始");
try{
int readsize = 0;
byte [] audioBuffer = new byte[bufferSizeInBytes];
//将录音数据写入文件流
while (recording){
if (!paused){
readsize = audioRecord.read(audioBuffer,0, bufferSizeInBytes);
if (readsize != AudioRecord.ERROR_INVALID_OPERATION){
rawWrite.write(audioBuffer);
}
}else
{
Thread.sleep(100);
}
}
//为了防止文件读写耗时操作造成录音的 buffer overflow ,当停止时,应该立即停止录音
audioRecord.stop();
audioRecord.release();
//录音结束,处理数据并写入到wav文件
rawWrite.close();
FileInputStream rawRead = new FileInputStream(rawName);
long dataLen = rawRead.getChannel().size();
Log.d(tag, "PCM Raw DataLen:" + Long.toString(dataLen));
File wavFile = new File(wavName);
if (wavFile.exists()){
wavFile.delete();
}
FileOutputStream wavWrite = null;
switch (saveTarget){
case SDCARD:
{
wavWrite = new FileOutputStream(wavFile);
break;
}
case FLASH:
{
wavWrite = content.openFileOutput(wavName, Context.MODE_WORLD_READABLE);
break;
}
default:
wavWrite = content.openFileOutput(wavName, Context.MODE_WORLD_READABLE);
break;
}
switch (format){
case WAVE_PCM:
{
writeLinearPCMHeader(wavWrite, dataLen);
byte[] data = new byte[bufferSizeInBytes];
while (rawRead.read(data) != -1){
wavWrite.write(data);
}
break;
}
default:
{
writeALawHeader(wavWrite, dataLen / 2);
byte[] data = new byte[2];
short[] sdata = new short[2];
short pdata = 0;
byte adata = 0;
while (rawRead.read(data) != -1){
sdata[0] = (short)(data[0] & 0xFF);
sdata[1] = (short)(data[1] & 0xFF);
pdata = (short) ( sdata[0] | (sdata[1] << 8) );
adata = LinearToAlawSample(pdata);
wavWrite.write(adata);
}
break;
}
}
rawRead.close();
wavWrite.close();
File rawFile = new File(rawName);
if (rawFile.exists()){
rawFile.delete();
}
}catch(Exception e){
e.printStackTrace();
}
audioRecord = null;
Log.d(tag, "录音线程结束");
}
}
/** 开始录音 */
public void startRecord(){
//先开始耗时的文件操作,然后再开始录音
try{
File rawFile = new File(rawName);
if (rawFile.exists()){
rawFile.delete();
}
rawWrite = new FileOutputStream(rawFile);
}catch(Exception e){
e.printStackTrace();
}
audioRecord = new AudioRecord(audioSource, sampleRateInHz,
channelConfig, audioFormat, bufferSizeInBytes);
audioRecord.startRecording();
recording = true;
new PCMRecordThread().start();
}
/** 停止录音 */
public void stopRecord(){
recording = false;
}
/** 暂停录音 */
public void pauseRecord(){
paused = true;
audioRecord.stop();
try{
for (int i=0; i < didiraw.length; i++){
rawWrite.write(didiraw[i]);
}
}catch(Exception e){
e.printStackTrace();
}
}
/** 恢复录音 */
public void resumeRecord(){
paused = false;
audioRecord.startRecording();
}
/** 为a-law编码后的data添加 a-law 文件头 */
private void writeALawHeader(FileOutputStream out, long dataLen){
long riffChunkSize = dataLen + 46 - 8;
byte [] head = new byte[46];
//RIFF ChunkID
head[0] = 'R';
head[1] = 'I';
head[2] = 'F';
head[3] = 'F';
//RIFF ChunkSize UINT32 , 文件的总长度 - 8 ,即文件的总长度 - ('RIFF' + chunksize)
head[4] = (byte)(riffChunkSize & 0xFF);
head[5] = (byte)((riffChunkSize >> 8 ) & 0xFF);
head[6] = (byte)((riffChunkSize >> 16) & 0xFF);
head[7] = (byte)((riffChunkSize >> 24) & 0xFF);
//RIFF formatID
head[8] = 'W';
head[9] = 'A';
head[10] = 'V';
head[11] = 'E';
//Format ChunkID
head[12] = 'f';
head[13] = 'm';
head[14] = 't';
head[15] = ' ';
//Format ChunkSize UINT32, 一般为16或18,如果为18,则此块后有 2 byte 附加信息, 为16时xp系统不能看到a-law文件信息
head[16] = 0x12;
head[17] = 0x00;
head[18] = 0x00;
head[19] = 0x00;
//Format Format UINT16 编码方式,一般为 0x0006(a-Law)
head[20] = 0x06;
head[21] = 0x00;
//Format Channels UINT16 声道个数
head[22] = 0x01;
head[23] = 0x00;
//Format SampleRate UINT32 音频采样级别 采样率( 8000 8Khz)
head[24] = 0x40;
head[25] = 0x1F;
head[26] = 0x00;
head[27] = 0x00;
//Format AvgBytesRate UINT32 音频采样大小 每秒所需字节数(8000 8k)
head[28] = 0x40;
head[29] = 0x1F;
head[30] = 0x00;
head[31] = 0x00;
//Format BlockAlign UINT16 数据块对齐单位
head[32] = 0x01;
head[33] = 0x00;
//Format BitsPerSample UINT16 音频采样大小,每个采样需要的bit数, 如果有多个声道,对每个声道而言样本大小都一样
head[34] = 0x08;
head[35] = 0x00;
//Format 附加信息
head[36] = 0;
head[37] = 0;
//Data ChunkID , 4 char , data 标志;
head[38] = 'd';
head[39] = 'a';
head[40] = 't';
head[41] = 'a';
//Data ChunkSize UINT32 ,数据区的长度
head[42] = (byte) (dataLen & 0xFF);
head[43] = (byte)((dataLen >> 8) & 0xFF);
head[44] = (byte)((dataLen >> 16)& 0xFF);
head[45] = (byte)((dataLen >> 24)& 0xFF);
try{
out.write(head,0,46);
}catch(IOException e){
e.printStackTrace();
}
}
/** 为raw数据添加 PCM 文件头 */
private void writeLinearPCMHeader(FileOutputStream out, long dataLen){
long riffChunkSize = dataLen + 46 - 8;
byte [] head = new byte[46];
//RIFF ChunkID
head[0] = 'R';
head[1] = 'I';
head[2] = 'F';
head[3] = 'F';
//RIFF ChunkSize UINT32 , 文件的总长度 - 8 ,即文件的总长度 - ('RIFF' + chunksize)
head[4] = (byte)(riffChunkSize & 0xFF);
head[5] = (byte)((riffChunkSize >> 8 ) & 0xFF);
head[6] = (byte)((riffChunkSize >> 16) & 0xFF);
head[7] = (byte)((riffChunkSize >> 24) & 0xFF);
//RIFF formatID
head[8] = 'W';
head[9] = 'A';
head[10] = 'V';
head[11] = 'E';
//Format ChunkID
head[12] = 'f';
head[13] = 'm';
head[14] = 't';
head[15] = ' ';
//Format ChunkSize UINT32, 一般为16或18,如果为18,则此块后有 2 byte 附加信息
head[16] = 0x12;
head[17] = 0x00;
head[18] = 0x00;
head[19] = 0x00;
//Format Format UINT16 编码方式,一般为 0x0001(PCM)
head[20] = 0x01;
head[21] = 0x00;
//Format Channels UINT16 声道个数
head[22] = 0x01;
head[23] = 0x00;
//Format SampleRate UINT32 音频采样级别 采样率( 8000 8Khz)
head[24] = 0x40;
head[25] = 0x1F;
head[26] = 0x00;
head[27] = 0x00;
//Format AvgBytesRate UINT32 音频采样大小 每秒所需字节数(16000 16K)
head[28] = (byte)0x80;
head[29] = (byte)0x3E;
head[30] = (byte)0x00;
head[31] = (byte)0x00;
//Format BlockAlign UINT16 数据块对齐单位
head[32] = 0x01;
head[33] = 0x00;
//Format BitsPerSample UINT16 音频采样大小,每个采样需要的bit数, 如果有多个声道,对每个声道而言样本大小都一样
head[34] = 0x10;
head[35] = 0x00;
//Format 附加信息
head[36] = 0;
head[37] = 0;
//Data ChunkID , 4 char , data 标志;
head[38] = 'd';
head[39] = 'a';
head[40] = 't';
head[41] = 'a';
//Data ChunkSize UINT32 ,数据区的长度
head[42] = (byte) (dataLen & 0xFF);
head[43] = (byte)((dataLen >> 8) & 0xFF);
head[44] = (byte)((dataLen >> 16)& 0xFF);
head[45] = (byte)((dataLen >> 24)& 0xFF);
try{
out.write(head,0,46);
}catch(IOException e){
e.printStackTrace();
}
}
/** 获取一个文件的扩展名 */
public static String getExtensionName(String fileName){
String extName = "";
if ((fileName != null) && (fileName.length() > 0)){
int dotpos = fileName.lastIndexOf('.');
if ((dotpos > -1) && (dotpos < fileName.length() - 1)){
extName = fileName.substring(dotpos + 1);
}
}
return extName;
}
/** 获取一个去除路径和扩展名的文件名 */
public static String getFileNameNoExt(String fileName){
String name = "";
if ((fileName != null) && (fileName.length() > 0)){
int dotpos = fileName.lastIndexOf('.');
int spritpos = fileName.lastIndexOf('/');
if (dotpos < 0) dotpos = fileName.length();
if (spritpos < 0) spritpos = -1;
name = fileName.substring(spritpos + 1, dotpos);
}
return name;
}
/** 返回一个变更了扩展名的文件名 */
public static String changeFileExtensionName(String fileName, String ext){
String newName = "";
if ((fileName == null) || (fileName.length() <=0)) return newName;
int dotpos = fileName.lastIndexOf('.');
if (dotpos < 0){
newName = fileName + '.' + ext;
}
else
{
newName = fileName.substring(0, dotpos) + '.' + ext;
}
return newName;
}
}