Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import io.kaitai.struct.Ogg;
- import org.concentus.OpusDecoder;
- import org.concentus.OpusException;
- import org.xiph.libogg.*;
- import javax.sound.sampled.*;
- public class MainKlass {
- int sampleRate;
- int channelCount;
- OpusDecoder opusDec;
- short[] pcmBuffer = new short[5760*4];
- ArrayList<Short> outBuffer = new ArrayList<Short>(0);
- // interne Funktion, nicht hier aendern sondern oben ^^^
- private void onPacket(byte[] oggPacket) {
- // System.out.println("Packet len: " + oggPacket.length);
- try {
- // decLen is in FRAMES!!
- int decLen = opusDec.decode(oggPacket, 0, oggPacket.length,
- pcmBuffer, 0, pcmBuffer.length, false);
- final int sampleCount = decLen*channelCount;
- Short[] tmp = new Short[sampleCount];
- for (int i = 0; i < sampleCount; ++i) {
- tmp[i] = pcmBuffer[i];
- }
- outBuffer.addAll(Arrays.asList(tmp));
- } catch (OpusException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public Short[] getSamples() {
- return outBuffer.toArray(new Short[0]);
- }
- public OpusDecoder(String opusFile, int freq, int chan) {
- this.sampleRate = freq;
- this.channelCount = chan;
- try {
- opusDec = new OpusDecoder(sampleRate, channelCount);
- } catch (OpusException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- Ogg oggParser = null;
- try {
- oggParser = Ogg.fromFile(opusFile);
- } catch (IOException idc) {
- }
- ArrayList<Ogg.Page> pages = oggParser.pages();
- byte[] packetBuffer = new byte[0];
- for (Ogg.Page p : pages.subList(2, pages.size())) {
- ArrayList<byte[]> segments = p.segments();
- // System.out.println("--- Segment start ---");
- for (byte[] s : segments) {
- byte[] tmp = new byte[packetBuffer.length + s.length];
- System.arraycopy(packetBuffer, 0, tmp, 0, packetBuffer.length);
- System.arraycopy(s, 0, tmp, packetBuffer.length, s.length);
- packetBuffer = tmp;
- if (s.length < 255) {
- // System.out.println("Packet size: " + packetBuffer.length);
- // System.out.println(pcmBuffer.length);
- onPacket(packetBuffer);
- packetBuffer = new byte[0];
- }
- }
- // System.out.println("--- Segment end ---");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement