编程实现:1:获取wav文件的编码格式,音频的通道数,采样频率,采样位数!知道的帮帮忙啊!

解决方案 »

  1.   

    这里有WAV文件格式介绍http://www.it9000.cn/tech/CTI/wav.html我想文件的定义格式有了,去分析它应该不会太难了,就是多找几个试试,看看真正的文件是否是按照格式写入的。例如下面是一个wav文件最开头的一段16进制数据,可以自己分析下看看,是否和文档对的上52 49 46 46 62 11 00 00 57 41 56 45 66 6d 74 20
    10 00 00 00 01 00 01 00 22 56 00 00 44 ac 00 00
    02 00 10 00
      

  2.   

        public static int toInt(byte[] b) {
            return ((b[3] << 24) + (b[2] << 16) + (b[1] << 8) + (b[0] << 0));
        }
        
        public static short toShort(byte[] b) {
            return (short)((b[1] << 8) + (b[0] << 0));
        }
        
        
        public static byte[] read(RandomAccessFile rdf, int pos, int length) throws IOException {
            rdf.seek(pos);
            byte result[] = new byte[length];
            for (int i = 0; i < length; i++) {
                result[i] = rdf.readByte();
            }
            return result;
        }
        
        
        public static void main(String[] args) throws IOException {        File f = new File("c:\\bong.wav");
            RandomAccessFile rdf = null;
            rdf = new RandomAccessFile(f,"r");
            
            System.out.println("audio size: " + toInt(read(rdf, 4, 4))); // 声音尺寸
            
            System.out.println("audio format: " + toShort(read(rdf, 20, 2))); // 音频格式 1 = PCM
            
            System.out.println("num channels: " + toShort(read(rdf, 22, 2))); // 1 单声道 2 双声道
            
            System.out.println("sample rate: " + toInt(read(rdf, 24, 4)));  // 采样率、音频采样级别 8000 = 8KHz
            
            System.out.println("byte rate: " + toInt(read(rdf, 28, 4)));  // 每秒波形的数据量
            
            System.out.println("block align: " + toShort(read(rdf, 32, 2)));  // 采样帧的大小
            
            System.out.println("bits per sample: " + toShort(read(rdf, 34, 2)));  // 采样位数
            
            rdf.close();
            
        }