Синтезируемый дискретизированный звук - PullRequest
0 голосов
/ 10 февраля 2011

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

изображение

Каждая красная точка, представляющая точку данных. В идеале я хотел бы закончить с простым методом, таким как playSound(int[] array);. Я просмотрел пакет javax.sound.sampled, но не знаю с чего начать.

1 Ответ

0 голосов
/ 10 февраля 2011

Для начала, массив сэмплов не достаточно информации для воспроизведения звука.

  • Также необходимо указать частоту дискретизации.(Например, 50 выборок, повторяющих -1, + 1 и т. д., могут быть синусоидальными сигналами 50 Гц, если они записаны с частотой 25 выборок в секунду, или 12,5 Гц, если они записаны со скоростью 50 выборок / с (моя математика может быть отключена)).

  • Еще одна вещь, которая необходима, это то, как хранится звук.MAX_INT - ваш самый высокий звук или 255 - ваш максимальный уровень громкости?

  • Вам также необходимо указать кодировку.Возможно, вы захотите либо PCM_SIGNED, либо PCM_UNSIGNED (в зависимости от того, есть ли у вас отрицательные выборки), или может быть даже другая кодировка, которую вы хотите использовать.

Пакет javax.sound.sampled представляет эту информациюв классе AudioFormat .

Вам нужно будет создать аудиоформат, который отражает метод, в котором ваш аудио был сэмпл.Например, если ваши сэмплы занимали полный диапазон целых чисел, и вы представляли каждый сэмпл целым числом, и вы производили сэмплирование со скоростью 22 000 сэмплов в секунду, и это был монофонический звук, вы должны построить следующий AudioFormat ...

AudioFormat desiredFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,22000,32,1,32,22000,true);

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

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

...