Ответ 1
Эта статья А Гринстеда: Чтение и запись Wav файлов в java должно быть полезно. Класс WavFile очень полезен, и его можно настроить, чтобы вернуть весь массив данных вместо буферизованных фрагментов.
Я хочу читать wav файлы на Java, и я собираюсь классифицировать их с помощью K-средств.
Как я могу читать wav файлы в Java и назначать их в массив или что-то в этом роде (вы можете предложить ему идеи), чтобы классифицировать их?
EDIT: Я хочу использовать API для чтения wav файлов и для K-средств.
Эта статья А Гринстеда: Чтение и запись Wav файлов в java должно быть полезно. Класс WavFile очень полезен, и его можно настроить, чтобы вернуть весь массив данных вместо буферизованных фрагментов.
Вы можете читать звуковые файлы, используя звуковую библиотеку javax и FileInputStream (нашел хороший пример здесь) и обрабатывать волновые файлы как вектор бит (0,1) или байтов.. с использованием множественного выравнивания последовательности (Wiki) создать расстояние между каждым потоком бит/байтов и оттуда кластеризация должна быть прямой.
Проблема заключается в том, что этот метод очень чувствителен к шуму и т.д., но это стоит того...
Эквивалент функции wavread в matlab:
http://web.archive.org/web/20120531113946/http://www.builogic.com/java/javasound-read-write.html
Не уверен, если это кому-то поможет. Java JDK уже предоставляет класс AudioSystem.
Я использовал это как часть своих тестов для проверки сгенерированных свойств WAV,
AudioFileFormat audioFileFormat = AudioSystem.getAudioFileFormat(new File(response.get()));
assertEquals(1, audioFileFormat.getFormat().getChannels());
assertEquals(8000.0, audioFileFormat.getFormat().getSampleRate(), 0.0f);
assertEquals(8, audioFileFormat.getFormat().getSampleSizeInBits());
Я провел некоторое исследование и нашел много способов читать wav файлы. Я думаю, что самый простой способ прочитать wav файлы из определенной папки:
private final String directoryOfSamples = "./res/semplai";
private ArrayList<File> samplesArray = new ArrayList<File>();
private final File folder = new File(directoryOfSamples);
public ReadSample()
{
samplesArray.addAll(Arrays.asList(folder.listFiles()));
testSample(getSamplesArray().get(0)); // testing if sample can be played from arrayList
}
Надеюсь, что-то это поможет некоторым людям. Дайте мне знать, если вы что-то не понимаете.