Я пытаюсь понизить аудио .wav с 22050 до 8000 с помощью AudioInputStream, но преобразование возвращает мне 0 байтов данных. Вот код:Java - понижающая дискретизация с 22050 до 8000 дает нулевые байты
AudioInputStream ais;
AudioInputStream eightKhzInputStream = null;
ais = AudioSystem.getAudioInputStream(file);
if (ais.getFormat().getSampleRate() == 22050f) {
AudioFileFormat sourceFileFormat = AudioSystem.getAudioFileFormat(file);
AudioFileFormat.Type targetFileType = sourceFileFormat.getType();
AudioFormat sourceFormat = ais.getFormat();
AudioFormat targetFormat = new AudioFormat(
sourceFormat.getEncoding(),
8000f,
sourceFormat.getSampleSizeInBits(),
sourceFormat.getChannels(),
sourceFormat.getFrameSize(),
8000f,
sourceFormat.isBigEndian());
eightKhzInputStream = AudioSystem.getAudioInputStream(targetFormat, ais);
int nWrittenBytes = 0;
nWrittenBytes = AudioSystem.write(eightKhzInputStream, targetFileType, file);
Я уже проверил AudioSystem.isConversionSupported(targetFormat, sourceFormat)
и возвращает истину. Есть идеи?
САИ указывает на реальный файл: ais.available() возвращает 26000 или около того, и это стандартный файл WAV. В конце концов, если формат был бы неизвестен для Java Audio System, я бы получил и исключение при запросе AudioInputStream, не так ли? –
Да, вы должны получить исключение на самом деле ... во всяком случае, ваш код работает на моем компьютере, я отправлю рабочий основной метод за второй – Balder
. Я добавил проверку, действительно ли преобразование действительно поддерживается для кода. Попробуйте и посмотрите, если выбрано IllegalStateException или нет. – Balder