2013-11-16 2 views
1

Так что я искал звук java-звука, и я могу получать входные данные, записывать и воспроизводить звуки, и я могу рисовать график, используя координаты или грех.Рисование графического сигнала от микрофона или громкоговорителей

Я хочу иметь живой «осциллограф» как таковой, который принимает входной сигнал от микрофона и преобразует его в форму волны, которая прокручивается влево во времени, и когда шум создается, звук (частота?) Добавляется на в левую сторону графика, а затем возвращается к норме, когда больше шума не производится.

Как преобразовать массив байтов в граф?

До сих пор у меня есть файл, который может записывать и воспроизводить звук (сохраняется в буфере не файл), а затем сохранять его в .wav и рисовать волну .png из .wav, однако это не живое и я не уверен, куда идти отсюда.

+0

Преобразование байтов в выборки между чтением их из ввода и их записью на вывод. Затем нарисуйте буфер на панели. Вам не нужна библиотека, вы можете сделать это с помощью картины Swing и около 100 строк кода в зависимости от того, насколько хорошо вы хотите, чтобы она выглядела. – Radiodef

+0

Можете ли вы привести пример байта для координирования кода, пожалуйста, я не смог найти какую-либо работу – Greg

+0

Вот [один пример] (http://stackoverflow.com/a/11024268/418556) .. –

ответ

2

Здесь (относительно небольшое) приложение, которое будет воспроизводить звук и нарисовать простую графику на панели:

WaveformDemo on github

Он имеет некоторые редкие комментарии, чтобы указать, что происходит, но это как правило, просто. На самом деле лучше всего просто посмотреть на код. Он делает большую часть того, что вы просите о без записи, но код можно легко адаптировать к этому. Разница только в том, что вы будете вытаскивать байты из TargetDataLine вместо AudioInputStream.

Некоторые из таких вещей, как функция окна и квантование, могут потребовать подробного объяснения, но все это покрыто множеством литературы. По моему опыту, в то время как в тексте есть много технических текстов, в Интернете не так много примеров кода для такого рода вещей. Java Sound Resources - довольно хороший ресурс для Java, в частности, но он немного устарел. Поэтому я надеюсь, что это поможет вам начать.

+0

Спасибо большое, это то, что я искал, и это очень приятно объяснено в комментариях. – Greg

+0

Последний вопрос, хотя я играл с вами в коде, и он запускает загрузку файла и воспроизведение его, я могу создать файл с помощью микрофона, а затем воспроизвести его, но как я могу получить прямой ввод из микрофон и отображать его на графике в режиме реального времени? Я попробовал поток входного аудио, но он не позволит мне использовать его, поскольку audioFile переопределяет getFile, и я не могу, например, изменить его на байт []; а не файл. – Greg

+0

Нет проблем. Когда вы вызываете read на TargetDataLine, используйте эти байты. Вам не нужен AudioInputStream, если вы не читаете файл. В учебнике показан цикл (под _ «Чтение данных из TargetDataLine» _), который структурно идентичен таковому в цикле воспроизведения SwingWorker: http://docs.oracle.com/javase/tutorial/sound/capturing.html После вызов 'read' посылает эти байты для преобразования и отображения их. – Radiodef

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