Обнаружено замечательное расширение класса Clip, которое позволяет создавать один объект Clip с несколькими потоками, а затем использовать пользовательские переходы, такие как постепенное исчезновение и уменьшение, для переключения между потоками. Это избавляет от назойливого нажатия!
Я нашел это на форумах HydrogenAudio, написанных потрясающим парнем, который обращается к ручке googlebot. Это открытый исходный код под лицензией GNU.
Вот ссылка на сообщения на форуме, описывающие программу, для которой был создан класс:
Hydroaudio.org/forums/index.php?showtopic=80673 (спам-бот говорит, что я могу опубликовать только одну ссылку: P)
Вот ссылка на кодовую страницу Google, где вы можете получить файлы классов Java:
http://code.google.com/p/advancedabx/source/browse/#hg/AdvancedABX/src/de/uebber/sound/lib
Если вы в конечном итоге используете эти классы, вы можете обнаружить некоторые ошибки ограничения массива в функциях open и addstream в классе SwitchableArrayClip.java.
Вам нужно будет изменить:
// Fill it
int numRead = 0;
int offset = 0;
while (numRead != -1) {
numRead = stream.read(audioData[0], offset - numRead, len - numRead);
}
до:
// Fill it
int numRead = 0;
int offset = 0;
while (numRead != -1) {
numRead = stream.read(audioData[0], offset, len - offset);
offset += numRead;
}
Существуют и другие проблемы, такие как использование setFramePosition, из-за того, что проигрыватель является многопоточным. Но я позволю вам выяснить это, или вы можете спросить здесь, и я покажу вам, что я сделал, чтобы исправить их.
Надеюсь, это кому-нибудь поможет!