Что я должен использовать в Android при переносе кода C ++, написанного с помощью libsndfile?

Я портирую небольшой (менее 10 классов) проект C ++ на Java. Проект манипулирует звуковыми файлами, и в C ++ делает это, используяlibsndfile, Код включает в себя такие вещи, как:

const int channels = audioFileInfo.channels;
...
sf_readf_double( audioFile, inputBuffer, MAX_ECHO );
...
sf_writef_double( outputAudioFile, &currentAudioBuffer[WINDOW_SIZE * channels], SEGMENTATION_LENGTH );

В Java, как лучше всего управлять звуковыми файлами на низком уровне? Я говорю о таких вещах, как нормализация, добавление эха и т. Д.

Отчет о проделанной работе

После небольшой копки я нашелjavax.sound.sampledПохоже, что это может сделать работу.

Редактировать 2 При ближайшем рассмотрении это не сработает (или, по крайней мере, не пригодится для использования), так как опирается наcom.sun.sound пакет.

Редактировать 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. Кто-нибудь может придумать способ обойти это?

Ответы на вопрос(3)

Ваш ответ на вопрос