Created
January 12, 2020 13:42
-
-
Save oluwabajio/2ddc3a04d06467b2bf54552e4127b390 to your computer and use it in GitHub Desktop.
Decode Mp3 File to byte Array for Audio Manipulation or play with AudioTrack - Android Studio.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static byte[] decode(String path, int startMs, int maxMs) | |
throws IOException, com.mindtherobot.libs.mpg.DecoderException { | |
ByteArrayOutputStream outStream = new ByteArrayOutputStream(1024); | |
float totalMs = 0; | |
boolean seeking = true; | |
File file = new File(path); | |
InputStream inputStream = new BufferedInputStream(new FileInputStream(file), 8 * 1024); | |
try { | |
Bitstream bitstream = new Bitstream(inputStream); | |
Decoder decoder = new Decoder(); | |
boolean done = false; | |
while (! done) { | |
Header frameHeader = bitstream.readFrame(); | |
if (frameHeader == null) { | |
done = true; | |
} else { | |
totalMs += frameHeader.ms_per_frame(); | |
if (totalMs >= startMs) { | |
seeking = false; | |
} | |
if (! seeking) { | |
SampleBuffer output = (SampleBuffer) decoder.decodeFrame(frameHeader, bitstream); | |
if (output.getSampleFrequency() != 44100 | |
|| output.getChannelCount() != 2) { | |
throw new com.mindtherobot.libs.mpg.DecoderException("mono or non-44100 MP3 not supported"); | |
} | |
short[] pcm = output.getBuffer(); | |
for (short s : pcm) { | |
outStream.write(s & 0xff); | |
outStream.write((s >> 8 ) & 0xff); | |
} | |
} | |
if (totalMs >= (startMs + maxMs)) { | |
done = true; | |
} | |
} | |
bitstream.closeFrame(); | |
} | |
return outStream.toByteArray(); | |
} catch (BitstreamException e) { | |
throw new IOException("Bitstream error: " + e); | |
} catch (DecoderException e) { | |
Log.w(TAG, "Decoder error", e); | |
throw new com.mindtherobot.libs.mpg.DecoderException(e); | |
} finally { | |
IOUtils.safeClose(inputStream); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment