Как заставить Обработку получать входные данные от аудио с моего компьютера?

Мне трудно найти решение этой проблемы в Интернете. В основном я пытаюсь создать свой собственный аудиовизуализатор для музыки, которую играю на своем компьютере, и хотел бы, чтобы обработка анализировала звук из iTunes (или аудиовыход с моего компьютера), чтобы я мог глушить, пока я кодирую.

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

Какие-либо предложения?

p.s Да, я знаю, что в iTunes есть встроенный визуализатор. Я хочу сделать свой собственный.


person scottc11    schedule 18.08.2015    source источник
comment
Вам нужно будет открыть системный аудиопорт и прослушать его. Взгляните на AudioSystem руководство по классу. Вы можете понюхать звук и обработать его в режиме реального времени, чтобы создать визуализатор.   -  person Cᴏʀʏ    schedule 18.08.2015
comment
К вашему сведению, вы не хотите запрограммировать свое приложение для прослушивания звука из определенных программ, скорее вы запрограммируете его так, чтобы он считывал звук прямо с аудиошины - таким образом, все, воспроизводимое в настоящее время из любого места, будет захвачен. Самой сложной частью будет определение текущего микшера и устройства вывода, а затем написание фонового потока, который может передать эти данные вашему процессу визуализации.   -  person Cᴏʀʏ    schedule 18.08.2015


Ответы (1)


Если вы используете более новую версию Processing, посмотрите пример FFT:

import processing.sound.*;
FFT fft;
AudioIn in;
int bands = 512;
float[] spectrum = new float[bands];

void setup() {
  size(512, 360);
  background(255);
    
  // Create an Input stream which is routed into the Amplitude analyzer
  fft = new FFT(this);
  in = new AudioIn(this, 0);
  
  // start the Audio Input
  in.start();
  
  // patch the AudioIn
  fft.input(in);
}      

void draw() { 
  background(255);
  fft.analyze(spectrum);

  for(int i = 0; i < bands; i++){
  // The result of the FFT is normalized
  // draw the line for frequency band i scaling it up by 5 to get more amplitude.
  line( i, height, i, height - spectrum[i]*height*5 );
  } 
}

Processing 2 и более ранние версии поставляются с минимальной библиотекой. Взгляните на раздел Рисование частотного спектра. Кроме того, для дальнейшей обработки вы можете проверить этот пост.

О маршрутизации звука, воспроизводимого в качестве входного, вы можете взглянуть на SoundFlower или JACK. Любой из них должен позволить вам направить системный звук в качестве входа.

Кроме того, поскольку вы упомянули iTunes, вот Аудио-ориентированный ландшафт Роберта Ходжина, создателя Визуализатора iTunes (среди многих других замечательных вещей).

iTunes vis1

iTunes vis2

iTunes vis3

person George Profenza    schedule 18.08.2015
comment
В этом примере кода есть некоторые ошибки. Пожалуйста, проверьте ссылку FFT Example, чтобы увидеть правильный пример кода. - person Mr Pablo; 14.03.2021
comment
Спасибо, @MrPablo! Я не заметил изменения подписи для метода input(), и он больше не обращается к количеству полос. Я обновил фрагмент. - person George Profenza; 14.03.2021