/*
* Copyright (c) 2008, 2009, 2010, 2011 Denis Tulskiy
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with this work. If not, see <http://www.gnu.org/licenses/>.
*/
package com.tulskiy.musique.audio.player;
import com.tulskiy.musique.audio.player.io.Buffer;
import com.tulskiy.musique.playlist.Track;
import com.tulskiy.musique.util.AudioMath;
import org.junit.Test;
import javax.sound.sampled.AudioFormat;
import static org.junit.Assert.*;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import java.util.Arrays;
/**
* Author: Denis Tulskiy
* Date: 1/15/11
*/
public class BufferTest {
@Test
public void testRW() {
Buffer buffer = new Buffer();
byte[] buf = new byte[100];
Track t = new Track();
Arrays.fill(buf, (byte) 1);
t.getTrackData().setBitrate(5);
buffer.addNextTrack(t, null, 0, false);
buffer.write(buf, 0, buf.length);
buffer.write(buf, 0, buf.length);
t = new Track();
t.getTrackData().setBitrate(10);
buffer.addNextTrack(t, null, 0, false);
t = new Track();
t.getTrackData().setBitrate(20);
buffer.addNextTrack(t, null, 0, false);
buffer.write(buf, 0, buf.length);
t = new Track();
t.getTrackData().setBitrate(30);
buffer.addNextTrack(t, null, 0, false);
assertEquals(-1, buffer.read(buf, 0, 100));
Buffer.NextEntry nextTrack = buffer.pollNextTrack();
assertEquals(5, nextTrack.track.getTrackData().getBitrate());
assertEquals(55, buffer.read(buf, 0, 55));
assertEquals(100, buffer.read(buf, 0, 100));
assertEquals(45, buffer.read(buf, 0, 100));
assertEquals(-1, buffer.read(buf, 0, 100));
nextTrack = buffer.pollNextTrack();
assertEquals(10, nextTrack.track.getTrackData().getBitrate());
assertEquals(-1, buffer.read(buf, 0, 100));
nextTrack = buffer.pollNextTrack();
assertEquals(20, nextTrack.track.getTrackData().getBitrate());
assertEquals(100, buffer.read(buf, 0, 100));
assertEquals(-1, buffer.read(buf, 0, 100));
}
@Test
public void testConvert() {
byte[] input = new byte[]{
(byte) 0xAB, (byte) 0xCD, (byte) 0xEF, (byte) 0xAB,
0x12, 0x34, 0x56, 0x78, 0x12, 0x34, 0x56, 0x78
};
int[] output;
AudioFormat fmt;
output = new int[12];
fmt = new AudioFormat(44100, 8, 1, true, false);
assertEquals(AudioMath.convertBuffer(input, output, input.length, fmt), output.length);
assertArrayEquals(new int[]{
(byte) 0xAB, (byte) 0xCD, (byte) 0xEF, (byte) 0xAB,
0x12, 0x34, 0x56, 0x78,
0x12, 0x34, 0x56, 0x78
}, output);
output = new int[12];
fmt = new AudioFormat(44100, 8, 2, true, false);
assertEquals(AudioMath.convertBuffer(input, output, input.length, fmt), output.length);
assertArrayEquals(new int[]{
(byte) 0xAB, (byte) 0xCD, (byte) 0xEF, (byte) 0xAB,
0x12, 0x34, 0x56, 0x78,
0x12, 0x34, 0x56, 0x78
}, output);
output = new int[6];
fmt = new AudioFormat(44100, 16, 1, true, false);
assertEquals(AudioMath.convertBuffer(input, output, input.length, fmt), output.length);
assertArrayEquals(new int[]{
(short)0xCDAB, (short)0xABEF,
(short)0x3412, (short)0x7856,
(short)0x3412, (short)0x7856,
}, output);
output = new int[6];
fmt = new AudioFormat(44100, 16, 2, true, false);
assertEquals(AudioMath.convertBuffer(input, output, input.length, fmt), output.length);
assertArrayEquals(new int[]{
(short)0xCDAB, (short)0xABEF,
(short)0x3412, (short)0x7856,
(short)0x3412, (short)0x7856,
}, output);
output = new int[4];
fmt = new AudioFormat(44100, 24, 1, true, false);
assertEquals(AudioMath.convertBuffer(input, output, input.length, fmt), output.length);
assertArrayEquals(new int[]{
0xFFEFCDAB, 0x3412AB, 0x127856, 0x785634,
}, output);
}
}