2013-03-14 3 views
5

Можно ли перемасштабировать файл .wav с 22050 кГц до 44100 кГц в java без использования какой-либо сторонней библиотеки?Java resample .wav soundfile без сторонней библиотеки

Возможно, используя AudioInputStream?

Редактировать: так как кажется, что без сторонней библиотеки это невозможно, какие существуют сторонние библиотеки, чтобы выполнить повторную выборку?

ответ

0

Нет ... Вы можете попробовать написать новый wav-файл с новыми образцами, вычисленными как средние из смежных выборок. Сырой, но, возможно, этого будет достаточно для ваших целей.

Если вы принимаете сторонние библиотеки, JSSRC кажется хорошим вариантом. Однако вам нужно построить .jar.

1

Если вы хотите улучшить качество звука или нет, в любом случае вам нужно создать новый .wav-файл с образцами из исходного. Если вы хотите сохранить качество исходного файла, вы можете записать каждый образец дважды.

Однако существует довольно простой алгоритм для улучшения качества: прочитайте три последовательных выборки, назовем их a, b и c. Пусть z - дополнительный выходной образец между a и b.

Пусть z = (a + b)/2. Теперь замените b на (a + 2b + c)/4. Не забудьте рассчитать z, используя старое значение b! Теперь только напишите a, z и новый b на выходе.

Прочтите еще один образец, назовем его d. Вычислите следующий дополнительный выходной образец, y, используя (b + c)/2. Используйте старое значение b. Пересчитайте c, пусть это будет равно (b + 2c + d)/4. Напишите новое значение b и y для вывода.

Вы можете выяснить, догадываться, читать и повторять пока! EOF. Не забудьте рассчитать, используя старые значения, но выведите новые значения.

4

Поскольку вы теперь принимают библиотеки третьей стороны, вот мое предложение

Есть много сторонних библиотек, что позволяет ресэмплировать аудиофайл WAV, для меня, в моем случае (И я Недавно использовалась), самая удобная сторонняя библиотека - Jave все, что вам нужно сделать, это включить банку. не более утомительной установки, как и другие библиотеки

Jave не имеет метод, названный

public void setSamplingRate(java.lang.Integer bitRate) 

, которая позволяет ресэмплировать аудио с данной битрейтом.

1

Его возможные, быстрые и грязные. Просто необходим diging в javax.sound API:

import java.io.File; 

import javax.sound.sampled.AudioFileFormat.Type; 
import javax.sound.sampled.AudioFormat; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import com.sun.media.sound.WaveFileReader; 
import com.sun.media.sound.WaveFileWriter; 

public class Resample { 

public static void main(String[] argv) { 
    try { 
     File wavFile = new File("C:\\Temp\\test.wav"); 
     File dstFile = new File("C:\\Temp\\test_half.wav"); 
     WaveFileReader reader = new WaveFileReader(); 
     AudioInputStream audioIn = reader.getAudioInputStream(wavFile); 
     AudioFormat srcFormat = audioIn.getFormat(); 

     AudioFormat dstFormat = new AudioFormat(srcFormat.getEncoding(), 
       srcFormat.getSampleRate()/2, 
       srcFormat.getSampleSizeInBits(), 
       srcFormat.getChannels(), 
       srcFormat.getFrameSize(), 
       srcFormat.getFrameRate()/2, 
       srcFormat.isBigEndian()); 

     AudioInputStream convertedIn = AudioSystem.getAudioInputStream(dstFormat, audioIn); 

     WaveFileWriter writer = new WaveFileWriter(); 
     writer.write(convertedIn, Type.WAVE, dstFile); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
} 

} 

Этот короткий взломанный пример создаст копию с половинной частотой дискретизации файла, указанного в источнике. Я думаю, что это довольно понятно.

+3

Пакет com.sun не является частью официальной Java API. Эта программа не гарантирует работу на разных платформах и версиях. См. Http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html. –

0

Да, с использованием AudioInputstream работает. Вы можете поймать некоторые примеры кода здесь:

http://www.jsresources.org/examples/SampleRateConverter.html

Не беспокойтесь о Tritonius, эта информация уже не актуальна для новых версий Java.Вы можете перепрограммировать с помощью родной Java, без каких-либо сторонних библиотек, если вы придерживаетесь * .wav-файлов.

Кроме того, на большинство вопросов, связанных с аудио в Java, ответили на этот FAQ. Это может быть не актуально, но большая часть информации по-прежнему актуальна.

http://www.jsresources.org/faq.html

Смежные вопросы