Projection mappé visualisation audio (2 / 5 étapes)

Étape 2: Audio répond aux traitement (puis OSC)

Tout d’abord, vous aurez besoin d’une source audio à traiter. Cela peut être d’un microphone, une chanson, etc.. Puisque aurait jouer la musique de mon ordinateur portable, j’ai voulu analyser cette source. Cela signifie activant et en sélectionnant « Stereo Mix » l’enregistrement périphérique sur mon panneau sonore par défaut. Un peu de recherche sur Google sur la façon de faire qui sauve moi d’avoir à passer par là. Il est assez facile à faire.

Maintenant que vous avez une source audio, il faut plonger dans le code :

/*
3D projection cartographique avec VPT via OSC
NIC Manille
Relève de l’International 4.0 Attribution-NonCommercial-ShareAlike (CC BY-NC-SA 4.0)
Avril 2014
*/

Import oscP5.* ;
Import netP5.* ;
Import controlP5.* ;

Cp5 ControlP5 ;
Bouton de gain ;
int gainVal ;

OscP5 oscP5 ;
MyRemoteLocation de la réalité ;

Import ddf.minim.analysis.* ;
Import ddf.minim.* ;

Minim minim ;
Jingle AudioInput ;
FFT fft ;

void setup()
{
Size (450, 300) ;
frameRate(60) ;
frame.setResizable(true) ;

CP5 = new ControlP5(this) ;
placeButtons() ;

oscP5 = new OscP5(this,6666) ;
myRemoteLocation = new NetAddress("127.0.0.1",6666) ;

minim = new Minim(this) ;

Jingle = minim.getLineIn() ;
FFT = nouvelle FFT (jingle.bufferSize(), jingle.sampleRate()) ;
fft.logAverages (86, 1) ;
}

échelle d’int = 2 ; changer pour la sensibilité globale
FFTon booléen = false ;
String viewOSC ; pour l’affichage des flux de la CVMO. utilisé dans l’onglet de la CVMO.

void draw()
{
Background(0) ;
Fill(0,40) ;
noStroke() ;
Rect(0,0,Width,Height) ;
Fill(50) ;
Rect(0,0,Width,47) ;
textSize(30) ;
Fill(200) ;
textAlign(LEFT) ;
Text("OSC_panel",10,35) ;
textSize(10) ;
texte ("Nic Manille", 170, 35) ;
effectuer une FFT vers l’avant sur les échantillons dans la mémoire tampon
FFT.Forward (jingle.mix) ;
if(FFTon)analyseAndSend() ; Si activé/désactivé, diffusion de valeurs FFT via OSC

}

void placeButtons() {}
gain = cp5.addKnob("gainVal")
.setRange(0,50)
.setValue(1)
.setPosition(300,70)
.setRadius(50)
.setDragDirection(Knob.VERTICAL)
;


CP5.AddButton("Toggle_FFT_broadcast")
.setValue(0)
.setPosition(50,70)
.setSize(200,19)
;
}

annuler bouton (int gainVal) {}

gainVal = gainVal ;
}

{} public void controlEvent (ControlEvent theEvent)
println(theEvent.getController().GetName()) ;
}

public void Toggle_FFT_broadcast (int valeur) {
FFTon = ! FFTon ;
}

Envoyer Sub (String path, float val) {}
OscMessage myMessage = new OscMessage(path) ;

myMessage.add(val) ;
/ * Envoyer le message * /
oscP5.send (myMessage, myRemoteLocation) ;
println (myMessage + « Envoyé ») ;
viewOSC = "flux d’OSC:" + myMessage ;

}

void analyseAndSend() {}
le suivant « envoie » est si vous utilisez des objets multi-faces nécessitant trois visages pour montrer la même chose
//Three faces de la boîte « groupe 1 »
Envoyer (« / » + str(1) + "layer/fade",fft.getAvg(1)/100*gainVal) ;
Envoyer (« / » + str(2) + "layer/fade",fft.getAvg(1)/100*gainVal) ;
Envoyer (« / » + str(3) + "layer/fade",fft.getAvg(1)/100*gainVal) ;
//
//Three faces de la boîte de bande 2
Envoyer (« / » + str(4) + "layer/fade",fft.getAvg(2)*2/100*gainVal) ;
Envoyer (« / » + str(5) + "layer/fade",fft.getAvg(2)*2/100*gainVal) ;
Envoyer (« / » + str(6) + "layer/fade",fft.getAvg(2)*2/100*gainVal) ;
//
//Three faces de la boîte de bande 3
Envoyer (« / » + str(7) + "layer/fade",fft.getAvg(3)*3/100*gainVal) ;
Envoyer (« / » + str(8) + "layer/fade",fft.getAvg(3)*3/100*gainVal) ;
Envoyer (« / » + str(9) + "layer/fade",fft.getAvg(3)*3/100*gainVal) ;
//
//Three faces de la boîte de bande 4
Envoyer (« / » + str(10) + "layer/fade",fft.getAvg(4)*4/100*gainVal) ;
Envoyer (« / » + str(11) + "layer/fade",fft.getAvg(4)*4/100*gainVal) ;
Envoyer (« / » + str(12) + "layer/fade",fft.getAvg(4)*4/100*gainVal) ;
//
//Three faces de la boîte de bande 5
Envoyer (« / » + str(13) + "layer/fade",fft.getAvg(5)*5/100*gainVal) ;
Envoyer (« / » + str(14) + "layer/fade",fft.getAvg(5)*5/100*gainVal) ;
Envoyer (« / » + str(15) + "layer/fade",fft.getAvg(5)*5/100*gainVal) ;
//
//Three faces de la boîte de bande 6
Envoyer (« / » + str(16) + "layer/fade",fft.getAvg(6)*6/100*gainVal) ;
Envoyer (« / » + str(17) + "layer/fade",fft.getAvg(6)*6/100*gainVal) ;
Envoyer (« / » + str(18) + "layer/fade",fft.getAvg(6)*6/100*gainVal) ;
//
//Three faces de la boîte de bande 7
Envoyer (« / » + str(19) + "layer/fade",fft.getAvg(7)*8/100*gainVal) ;
Envoyer (« / » + str(20) + "layer/fade",fft.getAvg(7)*8/100*gainVal) ;
Envoyer (« / » + str(21) + "layer/fade",fft.getAvg(7)*8/100*gainVal) ;

le suivant « envoie » est si vous utilisez des objets recto nécessitant qu’une seule valeur envoyée
pour (int i = 0; j’ai < 9; i ++) //iterate à travers les bandes
{

Si (j’ai == 8 || j’ai == 9) {envoyer (« / » + str(i) + "layer/fade",(fft.getAvg(i)*i/100)*gainVal*2);} //trebles besoin d’un peu d’un punch s’affiche bien
else {envoyer (« / » + str(i) + "layer/fade",(fft.getAvg(i)*i/100)*gainVal);}
Stroke(25*i,50,50) ;
strokeWeight(5) ;
Line(120,100+i*10,120+FFT.getAvg(i)*i*gainVal,100+i*10) ;
textSize(10) ;
Fill(150) ;
texte ("bande/Layer" + str(i),50,104+i*10) ;
}
Fill(150) ;
textSize(12) ;
Text(viewOSC,50,60) ;
}

Avez-vous tous cette ?

Un rapide traversent :
Audio est chargé dans une mémoire tampon. Cette mémoire tampon est FFTed et la moyenne en 9 bandes. Ces bandes sont parcourus pour obtenir leur valeur avec une portée d’environ 0 à 1 (donc une valeur à virgule flottante). Cette valeur est concaténée avec la chaîne qui correspond à une commande d’OSC destinée à VPT. Cette chaîne est ensuite diffusée sur OSC sur l’adresse IP 127.0.0.1 (numéro de port 6666). Il y a également une interface graphique qui montre les fréquences pour chaque bande et un bouton de Gain, ce qui peut amplifier le signal, si votre source est un peu mou.

Remarque : je n’ai jamais travaillé avec analyse audio avant cela, donc je l’avoue mon algorithme pour obtenir un spectre précis est sans doute un peu éteint. Si quelqu'un est plus clued là-dessus, je serais ravi d’entendre une meilleure façon d’y arriver (j’ai le sentiment que c’est avec quelques fonctions mathématiques savoureux!)

Articles Liés

Projection mappé Cake

Projection mappé Cake

Ma fille est à l'âge (9) lorsque les choses girly mignons sont lentement étant repoussés en échange des attractions plus adultes. Elle n'était pas intéressé par un quelconque des dessins « mignon » gâteau que nous étions suggérant à sa fête d'anniver
Mini paysage mappé en Projection

Mini paysage mappé en Projection

Ce Instructable sur la création d'une sculpture simple qui est augmentée avec la projection cartographique, conçu pour fonctionner sur le Raspberry Pi, construit avec OpenFrameworks.Projection cartographique est un processus qui s'appuie sur la conna
Visualisation de la musique sans ordinateur

Visualisation de la musique sans ordinateur

cela, mon premier instructable, va voir la vous comment obtenez les visualisations audio s'adonnants à l'aide ordinaire l'eau du robinet.ATTENTION : une fois terminé, cela peut être très addictif.ATTENTION : Ceci pourrait nuire vos haut-parleurs. Il
Hyper Terra

Hyper Terra

« Hyper Terra » est une sculpture de projection mappée avec un ordinateur et projecteur intégré, bloc d'alimentation. La sculpture est une montagne avec un éclairage solaire et lunaire simulée qui peut être configurée avec n'importe quel lat/long sur
À l’aide d’un ordinateur sans un disque dur.

À l’aide d’un ordinateur sans un disque dur.

Vous avez vu dans une plus tôt où instructable nous avons mis en place un réseau de travail sans un seul disque dur. () je voudrais vous donner quelques autres choix pour vous permettre d'utiliser un ordinateur sans un disque dur. Bien que la liste p
NAAG XY

NAAG XY

NAAG XY, 201514 « x 8 » x 4'Gabriel L Dunne http://gabrieldunne.comVishal K Dar http://vishalkdar.commousse EPS, plâtre de paris, ordinateur, logiciels sur mesure, projecteursCe Instructable est une documentation concernant le processus de création «
Interactive Arduino alimenté Coffee Table

Interactive Arduino alimenté Coffee Table

une évidence rapide note : Ceci est mon premier Instructable et mon premier grand projet Arduino, donc si vous voyez des erreurs stupides ou avez une idée de comment les choses pourraient être faites mieux, alors s'il vous plaît laissez-moi savoir.Ma
FanBus numérique ventilateur et LED Interface pour PC

FanBus numérique ventilateur et LED Interface pour PC

l'année dernière, j'ai modifié un ventilateur LED bleu avec LED RGB pour améliorer l'aspect de mon cas de serveur.  L'été dernier, j'ai construit un ordinateur de jeu et depuis que j'ai voulu l'éclaire avec multiple contrôlée s'allume et les fans.  J
Parler de citrouille

Parler de citrouille

donc mon patron m'est venue une semaine dernière et a déclaré qu'il voulait effrayer les enfants costumés qui sont venus à son domicile, et les enfants qui étaient venus pour travailler au cours d'une marche d'Halloween spécial la communauté fait. Ai
Jusqu'à la maison x Cinderella Castle

Jusqu'à la maison x Cinderella Castle

Pour un spécial cadeau d'anniversaire pour ma petite soeur, j'ai 3D imprimé lui un modèle de Château Cinderlla, mais je ne voulais juste peinture bleu et appeler cela un jour. Au lieu de cela, j'ai peint avec la jusqu'à la maison et les ballons, comm
Solution audio avec contrôle et visualisation sur une facture pro forma de framboise avec écran tactile (fonctionnalité Squeezebox Touch)

Solution audio avec contrôle et visualisation sur une facture pro forma de framboise avec écran tactile (fonctionnalité Squeezebox Touch)

Nous vous présentons la possibilité de sélectionner et de contrôler votre lecteur audio Raspberry Pi directement via un écran tactile. Notre installation est basée sur la technologie de la Squeezebox et par conséquent permet également aux solutions a
Construire une Projection Simple mappé Display Pixel mappées LEDs

Construire une Projection Simple mappé Display Pixel mappées LEDs

Comme un concepteur de carte de circuit imprimé qui s'occupe principalement des systèmes de contrôle LED, j'ai accumulé une cachette de bande de LED, barres, rondelles et autres contrôleurs d'entreprises que nous avons acheté pour les clients, des co
Déplier le 01 : Projection sur Print

Déplier le 01 : Projection sur Print

Projection sur PrintToile 120 x 120 cm + 3 Minutes A / V LoopÉtudes de Sculpture numériqueDéplier série est une expérience en cours forme inspiré par le phénomène de la morphogénèse (du grec, « commencement de la forme », le processus biologique qui
Audio anachronique : La cathédrale Radio

Audio anachronique : La cathédrale Radio

Au début de 2014, j'ai eu l'incroyable expérience d'être une artiste en résidence à l'atelier de Autodesk/Instructables Pier 9. Pendant ce temps, je me suis embarqué sur une exploration des projets connexes audio ré-imaginé dans le style de l'atelier