文件IO,音频buffer处理

1,获取一个文件夹下所有文件对象

//获取一个文件夹下所有文件的名字,并保存在list中
public  static  ArrayList<String> getFileName(String path) {
    File[] files=new File(path).listFiles();
    // 举例File[] files=new File("/sdcard/my/").listFiles();
ArrayList<String> list=new ArrayList<>();
    if (files != null) { // 先判断目录是否为空,否则会报空指针
for (File file : files) {
                String fileName = file.getName();
                 list.add(fileName);
                }
            }
    return list;
}

 

2.把文件转换为byte[]

 

    private byte[] readWavFile(File file) throws IOException {
            InputStream is = new FileInputStream(file);
            //InputStream转换为byte[]
byte[] data = new byte[is.available()];
            is.read(data);
return data;
    }

 

3.每次复制一小段数据到buffer中

//每次复制3200byte的数据到buffer中,直到复制完
byte[] data = readWavFile(file);
if (data != null && data.length > 0) {
    mEngine.start();
    byte[] buffer = new byte[3200]; //多次分段复制,每次最大只复制3200byte的数据
int i = 0;//已经复制的data的长度
int j = 0;//下次要复制到data长度的数据 (不是要复制的长度,而是要复制到某个位置的长度,比如总长3000,每次复制500,那么第二次j=1000)
int dataLength = data.length;
    while (i < dataLength) {
        j += 3200;
        //要复制的长度位置不可能超过数据长度本身
if (j > dataLength) {
            j = dataLength;
        }
        //开始把数据复制到buffer中
System.arraycopy(data, i, buffer, 0, j - i);
        i += 3200;
        // 自行feed数据
mEngine.feedData(buffer);
        try {
            Thread.sleep(97);
            if(mEngine == null) return;
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    mEngine.stopRecording();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值