From e4af28517b90fb860e5dc418fb03253e34dbebe9 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Thu, 29 Sep 2016 16:24:12 +0300 Subject: [PATCH] increase buffer --- .../github/axet/audiorecorder/encoders/Encoder.java | 2 +- .../axet/audiorecorder/encoders/FileEncoder.java | 7 +++---- .../axet/audiorecorder/encoders/FormatM4A.java | 2 +- .../axet/audiorecorder/encoders/FormatWAV.java | 8 ++++---- .../axet/audiorecorder/encoders/MuxerMP4.java | 13 ++++++------- 5 files changed, 15 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/Encoder.java b/app/src/main/java/com/github/axet/audiorecorder/encoders/Encoder.java index f0222a2..6907b21 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/Encoder.java +++ b/app/src/main/java/com/github/axet/audiorecorder/encoders/Encoder.java @@ -1,7 +1,7 @@ package com.github.axet.audiorecorder.encoders; public interface Encoder { - void encode(short[] buf); + void encode(short[] buf, int len); void flush(); diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/FileEncoder.java b/app/src/main/java/com/github/axet/audiorecorder/encoders/FileEncoder.java index 173bd40..eb49119 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/FileEncoder.java +++ b/app/src/main/java/com/github/axet/audiorecorder/encoders/FileEncoder.java @@ -39,19 +39,19 @@ public class FileEncoder { samples = rs.getSamples(); - short[] buf = new short[1000]; + short[] buf = new short[2048]; rs.open(buf.length); try { while (!Thread.currentThread().isInterrupted()) { - long len = rs.read(buf); + int len = rs.read(buf); if (len <= 0) { encoder.flush(); handler.post(done); return; } else { - encoder.encode(buf); + encoder.encode(buf, len); handler.post(progress); synchronized (thread) { cur += len; @@ -62,7 +62,6 @@ public class FileEncoder { Log.e(TAG, "Exception", e); t = e; handler.post(error); - throw e; } finally { encoder.close(); if (rs != null) { diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatM4A.java b/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatM4A.java index 58fc555..8c497f1 100755 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatM4A.java +++ b/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatM4A.java @@ -11,7 +11,7 @@ import java.util.Map; public class FormatM4A extends MuxerMP4 { public FormatM4A(EncoderInfo info, File out) { - Map map = findEncoder("audio/mp4"); + Map map = MuxerMP4.findEncoder("audio/mp4"); if (map.isEmpty()) throw new RuntimeException("mp4 not supported"); MediaFormat format = MuxerMP4.getDefault("audio/mp4a-latm", map); diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatWAV.java b/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatWAV.java index 984a516..3b83ca5 100755 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatWAV.java +++ b/app/src/main/java/com/github/axet/audiorecorder/encoders/FormatWAV.java @@ -97,12 +97,12 @@ public class FormatWAV implements Encoder { } } - public void encode(short[] buf) { - NumSamples += buf.length / info.channels; + public void encode(short[] buf, int buflen) { + NumSamples += buflen / info.channels; try { - ByteBuffer bb = ByteBuffer.allocate(buf.length * (Short.SIZE / Byte.SIZE)); + ByteBuffer bb = ByteBuffer.allocate(buflen * (Short.SIZE / Byte.SIZE)); bb.order(order); - for (int i = 0; i < buf.length; i++) + for (int i = 0; i < buflen; i++) bb.putShort(buf[i]); bb.flip(); outFile.write(bb.array()); diff --git a/app/src/main/java/com/github/axet/audiorecorder/encoders/MuxerMP4.java b/app/src/main/java/com/github/axet/audiorecorder/encoders/MuxerMP4.java index 4ee61b1..4f35564 100755 --- a/app/src/main/java/com/github/axet/audiorecorder/encoders/MuxerMP4.java +++ b/app/src/main/java/com/github/axet/audiorecorder/encoders/MuxerMP4.java @@ -84,9 +84,10 @@ public class MuxerMP4 implements Encoder { } } - public void encode(short[] buf) { - for (int offset = 0; offset < buf.length; ) { - int len = buf.length - offset; + @Override + public void encode(short[] buf, int buflen) { + for (int offset = 0; offset < buflen; ) { + int len = buflen - offset; int inputIndex = encoder.dequeueInputBuffer(-1); if (inputIndex < 0) @@ -98,12 +99,10 @@ public class MuxerMP4 implements Encoder { len = Math.min(len, input.limit() / 2); for (int i = 0; i < len; i++) - input.putShort(buf[i]); - - int bytes = len * 2; + input.putShort(buf[offset + i]); long ts = getCurrentTimeStamp(); - encoder.queueInputBuffer(inputIndex, 0, bytes, ts, 0); + encoder.queueInputBuffer(inputIndex, 0, input.position(), ts, 0); NumSamples += len / info.channels; offset += len;