Last active
April 2, 2022 11:25
-
-
Save oluwabajio/8cd2da228d41c6558f1554a9be5568a1 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 is done using the java jlayer library.
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
hello , I want to convert array bytes but the file is not working any one can help me