(я пытаюсь сделать мой предыдущий вопрос более общим в надежде найти решение.)
Я использую библиотеку JLayer и файл sample.mp3. Я хотел бы воспроизвести и декодировать файл одновременно.
Однако я хочу, чтобы они были синхронизированы - если часть песни декодируется, она также воспроизводится. Ничто не декодируется до того, как оно будет воспроизведено, и наоборот (в разумной степени, конечно).
Вот как с уважением воспроизводится и декодируется песня:
Player p = new Player(InputStream mp3stream);
p.play();
Decoder d = new Decoder();
BitStream bs = new Bitstream(InputStream mp3stream);
SampleBuffer s = (SampleBuffer) d.decodeFrame(bs.readFrame(), bs);
// ... for processing the SampleBuffer but irrelevant for the question
Я сейчас использую:
InputStream mp3stream = new FileInputStream("sample.mp3");
но при этом используется целая песня сразу, поэтому я не могу синхронизироваться. Есть ли способ разбить sample.mp3 на части, которыми могут манипулировать оба процесса? Если бы у меня было достаточно маленьких кусочков, я мог бы запустить оба кусочка в процессы, подождать, пока оба не закончатся, а затем взять следующий маленький кусочек и повторить, пока у меня не закончились маленькие кусочки.
Примечание. Я пытался использовать ByteArrayInputStream безуспешно, но, возможно, моя методика неверна при его использовании.