Понимание конструктора AudioFormat, AudioInputStream и метода запуска - PullRequest
6 голосов
/ 28 июля 2011

Я пытался написать программу, которая воспроизводит звуковой файл, но пока безуспешно.Я не могу понять некоторые части кода:

InputStream is = new FileInputStream("sound file");
   AudioFormat af = new AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian); // I don't understand it's constructor
   long length ; // length in sample frames
   // how cani i know the length of frames ?
   AudioInputStream ais = new AudioInputStream( is , af , length );
   // open ( ais );
   // start playing by invoking start method
  • В конструкторе AudioFormat как я могу узнать частоту дискретизации, размер файла заранее, что такое каналы илогическая переменная в конце?
  • Как получить значение выборочных фреймов (length) ?
  • Также как вызвать метод start?Я не хочу данные из какой-либо строки, но из файла, хранящегося в папке (т.е. клип)

Ответы [ 2 ]

3 голосов
/ 28 июля 2011

В дополнение к кодированию аудиоформат включает в себя другие свойства, которые дополнительно определяют точное расположение данных.К ним относятся количество каналов, частота дискретизации, размер выборки, порядок байтов, частота кадров и размер кадра.Звуки могут иметь разное количество аудиоканалов: один для моно, два для стерео.Частота дискретизации измеряет, сколько «снимков» (выборок) звукового давления берется в секунду на канал.(Если звук является стереофоническим, а не монофоническим, в каждый момент времени фактически измеряются две выборки: одна для левого канала, а другая для правого канала; однако частота дискретизации по-прежнему измеряет число на канал, поэтомуто же самое независимо от количества каналов. Это стандартное использование термина.) Размер выборки указывает, сколько битов используется для хранения каждого снимка;8 и 16 - типичные значения.Для 16-битных выборок (или любого другого размера выборки, превышающего байт) важен порядок байтов;байты в каждом образце расположены в стиле «little-endian» или «big-endian».Для таких кодировок, как PCM, кадр состоит из набора выборок для всех каналов в данный момент времени, поэтому размер кадра (в байтах) всегда равен размеру выборки (в байтах), умноженному на числоканалов.Однако при некоторых других видах кодирования кадр может содержать пакет сжатых данных для целой серии выборок, а также дополнительные данные, не являющиеся выборками.Для таких кодировок частота выборки и размер выборки относятся к данным после их декодирования в PCM, и поэтому они полностью отличаются от частоты кадров и размера кадра.

Ссылка

1 голос
/ 28 июля 2011

Вероятно, лучший способ подойти к этому - в соответствии с исходным кодом 'Playing a Clip', показанным на странице Информация о звуке Java. .Это делает большую часть вопросов излишней (поскольку нам не нужно беспокоиться о мелких деталях при использовании Clip).

Если у вас возникнут какие-либо вопросы после обращения к источнику, сообщите мне.

...