Я портирую небольшой (<10 класс) проект C ++ на Java.Проект управляет звуковыми файлами, и в C ++ делает это, используя <a href="http://www.mega-nerd.com/libsndfile/" rel="nofollow"> libsndfile .Код включает в себя такие вещи, как:
const int channels = audioFileInfo.channels;
...
sf_readf_double( audioFile, inputBuffer, MAX_ECHO );
...
sf_writef_double( outputAudioFile, ¤tAudioBuffer[WINDOW_SIZE * channels], SEGMENTATION_LENGTH );
В Java, как лучше всего управлять звуковыми файлами на низком уровне?Я говорю о таких вещах, как нормализация, добавление эха и т. Д.
Отчет о проделанной работе
После небольшой работы я нашел javax.sound.sampled, похоже, он может справиться с работой.
Редактировать 2 При ближайшем рассмотрении это не сработает (или, по крайней мере, не поможет), поскольку использует пакет com.sun.sound
.
Edit 3 При еще большем осмотре и экспериментах пакеты com.sun.sound
и sun.misc
выпускаются под GNU GPLv2, и я загрузил их в свой проект.Переименовав javax.sound.sampled
в imp.javax.sound.sampled
, проект компилируется, и я могу создавать AudioFileFormat
объекты без каких-либо исключений.У меня еще не было возможности поиграть, но я буду держать вас в курсе.
Редактировать 4 Хорошо, некоторые вещи работают с javax.sound.sampled, другие делаютне.Например, такие вызовы, как:
AudioInputStream stream = AudioSystem.getAudioInputStream(waveFile));
не работают, однако я могу обойти это, выполнив:
WaveFileReader wfr = new WaveFileReader();
AudioInputStream stream = wfr.getAudioInputStream(waveFile);
Как правило, вызовы таких вещей, как AudioSystem.getAudioFileTypes()
, возвращаются пустымисписки.Я могу вникать в пакеты и видеть, что это как-то связано с провайдерами, но я не знаю, как это исправить.Получив мой stream
объект, он правильно сообщает о его кодировке и т. Д., Что обнадеживает.
Моя большая проблема в данный момент - создание объекта Clip.Это должно быть создано с помощью объекта Line, который обычно приходит из AudioSystem.Кто-нибудь может придумать способ обойти это?