Kombination
von Meyda und P5
- Lautheit (-> Mikrophon-Version)
Meyda arbeitet
sehr gut mit P5 und P5.sound zusammen, z.B. um die empfundene Lautheit
aus einem Klangbeispiel automatisch zu extrahieren und zu visualisieren:
1.
Einbettung der Meyda- und der Plotly-Library
Zunächst
werden im <head>
der Seite die Meyda- und P5-Javascript-Bibliotheken eingebettet:
<script src="header/p5.js"></script>
<script src="header/p5.sound.js"></script>
<script src="header/meyda.min.js"></script>
2.
Script zur Steuerung eines Audioplayers
Dann wird
im <head> der Seite
ein Script zur Steuerung des Audioplayers angelegt:
<script>
function spielAudio()
{ // Funktion zum Abspielen des Audioplayers
var meinplayer = document.getElementById('audio'); //
finde über
// getElementById() den Audioplayer mit der id "audio" und übergebe
ihn an die Variable meinPlayer.
meinplayer.play(); // starte den so gefundenen
Audioplayer
}
function stopAudio()
{ // Funktion zum Stoppen des Audioplayers
var meinplayer = document.getElementById('audio'); //
finde über
// getElementById() den Audioplayer mit der id "audio" und übergebe
ihn an die Variable meinPlayer.
meinplayer.pause(); // pausiere den Player
meinplayer.currentTime = 0; // setze ihn
auf den Anfang des Stücks
}
</script>
3.
Einbettung eines Audioplayers mit id und Steuerungsmöglichkeit
Im <body>
der Seite wird der Player angelegt:
<audio id="audio"
src="klang/fagott_toene.mp3"> </audio>
4.
Einbettung eines Bereichs, in dem die Daten visualisiert werden sollen
Unter dem
Audioplayer wird innerhalb eines <DIV>-Tag
ein Bereich (hier mit der id "p5container") festgelegt, in dem
die Audiodaten mit Hilfe von P5 visualisiert werden sollen:
<DIV id="p5container"
style="width:800;border: 1px solid #333;box-shadow: 8px 8px 5px #444;padding:
8px 12px;background-color:ffffff"></DIV>
5.
Starten des WebAudioApi und Audio-Analyse mit Meyda
Darunter
wird das Script für die Analyse eingebaut.
<script defer> bedeutet, dass das Script nicht seriell im
Seitenaufbau eingebaut ist, sondern parallel zu den anderen Scripten und
Funktionen auf der Seite passiert:
<script defer>
const audioContext = new AudioContext(); //
erzeuge einen Audiokontext (ähnlich wie
// einen Canvas) für das WebAudioApi
const htmlAudioElement = document.getElementById("audio"); //
suche den
// Audioplayer via getElementById() und weise ihn der Variablen htmlAudioElement
zu.
const source = audioContext.createMediaElementSource(htmlAudioElement);
// füge den Audioplayer über
die Variable htmlAudioElement als Mediaquelle dem audioContext hinzu.
source.connect(audioContext.destination); //
verbinde den audioContext mit der
// Soundausgabe des Browsers/Computers.
if (typeof Meyda ===
"undefined") { // falls die Meyda-Library
nicht erkannt wird:
alert("Meyda konnte nicht gefunden werden, wurde die Library nicht
eingebunden?"); // gebe eine Fehlermeldung
aus
} else { // in allen anderen Fällen:
const analyzer = Meyda.createMeydaAnalyzer({ //
erstelle einen Analyzer mit
// folgenden Eigenschaften:
"audioContext": audioContext, // audioContext,
auf den sich der Analyzer bezieht
"source": source, // Quelle auf
die sich der Analyzer bezieht (= der Audioplayer)
"bufferSize": 512, // Buffergröße
"featureExtractors": ["loudness",], //
Array (Liste) von zu analysierenden
// Eigenschaften (loudness ist ein Array von 24 Bark (Frequenzgruppenbreiten)
sowie ein
// zusätzlicher Wert für die Lautheit insgesamt)
"callback": features => { //
Ausgabe der ermittelten Features
bark1 = Math.round(features.loudness.specific[0] * 1000)/1000; //
runde den
// ersten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable bark1
bark2 = Math.round(features.loudness.specific[1] * 1000)/1000; //
runde den
// zweiten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable bark2
bark3 = Math.round(features.loudness.specific[2] * 1000)/1000;
// runde den
// dritten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable bark3
bark4 = Math.round(features.loudness.specific[3] * 1000)/1000; //
runde den
// vierten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable bark4
bark5 = Math.round(features.loudness.specific[4] * 1000)/1000; //
runde den
// fünften Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable bark5
bark6 = Math.round(features.loudness.specific[5] * 1000)/1000; //
runde den
// sechsten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable bark6
bark7 = Math.round(features.loudness.specific[6] * 1000)/1000; //
runde den
// siebten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable bark7
bark8 = Math.round(features.loudness.specific[7] * 1000)/1000; //
runde den
// achten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable bark8
bark9 = Math.round(features.loudness.specific[8] * 1000)/1000; //
runde den
// neunten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable bark9
bark10 = Math.round(features.loudness.specific[9] * 1000)/1000; //
runde
// den zehnten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable bark10
bark11 = Math.round(features.loudness.specific[10] * 1000)/1000; //
runde
// den elften Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable bark11
bark12 = Math.round(features.loudness.specific[11] * 1000)/1000; //
runde
// den zwölften Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable bark12
bark13 = Math.round(features.loudness.specific[12] * 1000)/1000; //
runde
// den dreizehnten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable
// bark13
bark14 = Math.round(features.loudness.specific[13] * 1000)/1000; //
runde
// den vierzehnten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable
// bark14
bark15 = Math.round(features.loudness.specific[14] * 1000)/1000; //
runde
// den fünfzehnten Wert aus dem loudness-Array auf 3 Stellen und
übergebe ihn an die Variable
//
bark15
bark16 = Math.round(features.loudness.specific[15] * 1000)/1000; //
runde
// den sechszehnten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable
// bark16
bark17 = Math.round(features.loudness.specific[16] * 1000)/1000; //
runde
// den siebzehnten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable
// bark17
bark18 = Math.round(features.loudness.specific[17] * 1000)/1000; //
runde
// den achtzehnten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable
// bark18
bark19 = Math.round(features.loudness.specific[18] * 1000)/1000; //
runde
// den neunzehnten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable
// bark19
bark20 = Math.round(features.loudness.specific[19] * 1000)/1000; //
runde
// den zwanzigsten Wert aus dem loudness-Array auf 3 Stellen und übergebe
ihn an die Variable
// bark20
bark21 = Math.round(features.loudness.specific[20] * 1000)/1000; //
runde
// den einundzwanzigsten Wert aus dem loudness-Array auf 3 Stellen und
übergebe ihn an die Variable
// bark21
bark22 = Math.round(features.loudness.specific[21] * 1000)/1000; //
runde
// den zweiundzwanzigsten
Wert aus dem loudness-Array auf 3 Stellen und übergebe ihn an die
// Variable bark22
bark23 = Math.round(features.loudness.specific[22] * 1000)/1000; //
runde
// den dreiundzwanzigsten
Wert aus dem loudness-Array auf 3 Stellen und übergebe ihn an die
// Variable bark23
bark24 = Math.round(features.loudness.specific[23] * 1000)/1000; //
runde
// den vierundzwanzigsten
Wert aus dem loudness-Array auf 3 Stellen und übergebe ihn an die
// Variable bark24
total = Math.round(features.loudness.total * 10)/10; //
runde den Gesamtwert der Lautheit auf eine Stelle hinter dem Komma und
übergebe ihn an die Variable total
}
});
analyzer.start(); // starte den Analyzer
}
</script>
6.
Setup- und Draw-Funktion für P5 erstellen
Auf der Grundlage
der mit Meyda ermittelten Chroma-Werte kann nun mit Hilfe von P5 mit der
Visualisierung begonnen werden. Wie in den meisten P5-Anwendungen benötigt
man hierzu eine setup()-
und eine draw()-Funktion
sowie am Ende eine Funktion, die das Starten und Stoppen des Audioplayers
steuert (togglePlay()):
function setup(){
var container = createCanvas(800,400); //
Canvas erstellen
container.parent('p5container'); // an
DIV-Container anhängen
container.mouseClicked(togglePlay); //
auf Klick auf Canvas mit Funktion togglePlay
// reagieren
faktor = 25; // Faktor um die Frequenzgruppen
(bark) über den Canvas gleichmäßig zu verteilen
}
function draw(){
background(255, 255, 255); // zeichne weißen
Hintergrund
cursor(HAND); // zeige den Cursor als Hand
noStroke(); // keine Strichfarbe
fill(188, 188, 188); // Füllfarbe
auf hellgrau setzen
textSize(10); // Textgröße auf
10 setzen
text("Bark 1: " + bark1, 20, 20); //
Text für bark1-Wert erstellen
text("Bark 2: " + bark2, 20, 30); //
Text für bark2-Wert erstellen
text("Bark 3: " + bark3, 20, 40); //
Text für bark3-Wert erstellen
text("Bark 4: " + bark4, 20, 50); //
Text für bark4-Wert erstellen
text("Bark 5: " + bark5, 20, 60); //
Text für bark5-Wert erstellen
text("Bark 6: " + bark6, 20, 70); //
Text für bark6-Wert erstellen
text("Bark 7: " + bark7, 20, 80); //
Text für bark7-Wert erstellen
text("Bark 8: " + bark8, 20, 90); //
Text für bark8-Wert erstellen
text("Bark 9: " + bark9, 20, 100); //
Text für bark9-Wert erstellen
text("Bark 10: " + bark10, 20, 110); //
Text für bark10-Wert erstellen
text("Bark 11: " + bark11, 20, 120); //
Text für bark11-Wert erstellen
text("Bark 12: " + bark12, 20, 130); //
Text für bark12-Wert erstellen
text("Bark 13: " + bark13, 20, 140); //
Text für bark13-Wert erstellen
text("Bark 14: " + bark14, 20, 150); //
Text für bark14-Wert erstellen
text("Bark 15: " + bark15, 20, 160); //
Text für bark15-Wert erstellen
text("Bark 16: " + bark16, 20, 170); //
Text für bark16-Wert erstellen
text("Bark 17: " + bark17, 20, 180); //
Text für bark17-Wert erstellen
text("Bark 18: " + bark18, 20, 190); //
Text für bark18-Wert erstellen
text("Bark 19: " + bark19, 20, 200); //
Text für bark19-Wert erstellen
text("Bark 20: " + bark20, 20, 210); //
Text für bark20-Wert erstellen
text("Bark 21: " + bark21, 20, 220); //
Text für bark21-Wert erstellen
text("Bark 22: " + bark22, 20, 230); //
Text für bark22-Wert erstellen
text("Bark 23: " + bark23, 20, 240); //
Text für bark23-Wert erstellen
text("Bark 24: " + bark24, 20, 250); //
Text für bark24-Wert erstellen
fill(188, 48, 47); // Füllfarbe auf
dunkelrot setzen
text("gesamt:
" , 20, 300); // Text für Lautheits-Gesamt-Wert
erstellen
textSize(30); // Textgröße auf
30 setzen
text(total, 20, 340); // Text für
Lautheits-Gesamt-Wert erstellen
c_bark1 = map(bark1,
0, 3, 0, height); // skaliere den Wert
zwischen 0 und 3 von
// bark1 so, dass er zwischen 0 und der Höhe des Canvas ist und weise
ihn der Variablen c_bark1 zu
rect(100+1*faktor, height-c_bark1, 15, height); //
erstelle ein Rechteck, dessen
// Höhe von der Variablen c_bark1 und deren Abstand vom Faktor faktor
abhängig ist.
c_bark2 = map(bark2, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark2 so, dass er zwischen 0 und der Höhe des Canvas ist und weise
ihn der Variablen c_bark2 zu
rect(100+2*faktor, height-c_bark2, 15, height); //
erstelle ein Rechteck, dessen
// Höhe von der Variablen c_bark2 und deren Abstand vom Faktor faktor
abhängig ist.
c_bark3 = map(bark3, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark3 so, dass er zwischen 0 und der Höhe des Canvas ist und weise
ihn der Variablen c_bark3 zu
rect(100+3*faktor, height-c_bark3, 15, height); //
erstelle ein Rechteck, dessen
// Höhe von der Variablen c_bark3 und deren Abstand vom Faktor faktor
abhängig ist.
c_bark4 = map(bark4, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark4 so, dass er zwischen 0 und der Höhe des Canvas ist und weise
ihn der Variablen c_bark4 zu
rect(100+4*faktor, height-c_bark4, 15, height); //
erstelle ein Rechteck, dessen
// Höhe von der Variablen c_bark4 und deren Abstand vom Faktor faktor
abhängig ist.
c_bark5 = map(bark5, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark5 so, dass er zwischen 0 und der Höhe des Canvas ist und weise
ihn der Variablen c_bark5 zu
rect(100+5*faktor, height-c_bark5, 15, height); //
erstelle ein Rechteck, dessen
// Höhe von der Variablen c_bark5 und deren Abstand vom Faktor faktor
abhängig ist.
c_bark6 = map(bark6, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark6 so, dass er zwischen 0 und der Höhe des Canvas ist und weise
ihn der Variablen c_bark6 zu
rect(100+6*faktor, height-c_bark6, 15, height); //
erstelle ein Rechteck, dessen
// Höhe von der Variablen c_bark6 und deren Abstand vom Faktor faktor
abhängig ist.
c_bark7 = map(bark7, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark7 so, dass er zwischen 0 und der Höhe des Canvas ist und weise
ihn der Variablen c_bark7 zu
rect(100+7*faktor, height-c_bark7, 15, height); //
erstelle ein Rechteck, dessen
// Höhe von der Variablen c_bark7 und deren Abstand vom Faktor faktor
abhängig ist.
c_bark8 = map(bark8, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark8 so, dass er zwischen 0 und der Höhe des Canvas ist und weise
ihn der Variablen c_bark8 zu
rect(100+8*faktor, height-c_bark8, 15, height); //
erstelle ein Rechteck, dessen
// Höhe von der Variablen c_bark8 und deren Abstand vom Faktor faktor
abhängig ist.
c_bark9 = map(bark9, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark9 so, dass er zwischen 0 und der Höhe des Canvas ist und weise
ihn der Variablen c_bark9 zu
rect(100+9*faktor, height-c_bark9, 15, height); //
erstelle ein Rechteck, dessen
// Höhe von der Variablen c_bark9 und deren Abstand vom Faktor faktor
abhängig ist.
c_bark10 = map(bark10, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark10 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark10
// zu
rect(100+10*faktor, height-c_bark10, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark10 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark11 = map(bark11, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark11 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark11
// zu
rect(100+11*faktor, height-c_bark11, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark11 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark12 = map(bark12, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark12 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark12
// zu
rect(100+12*faktor, height-c_bark12, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark12 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark13 = map(bark13, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark13 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark13
// zu
rect(100+13*faktor, height-c_bark13, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark13 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark14 = map(bark14, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark14 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark14
// zu
rect(100+14*faktor, height-c_bark14, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark14 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark15 = map(bark15, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark15 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark15
// zu
rect(100+15*faktor, height-c_bark15, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark15 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark16 = map(bark16, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark16 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark16
// zu
rect(100+16*faktor, height-c_bark16, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark16 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark17 = map(bark17, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark17 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark17
// zu
rect(100+17*faktor, height-c_bark17, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark17 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark18 = map(bark18, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark18 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark18
// zu
rect(100+18*faktor, height-c_bark18, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark18 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark19 = map(bark19, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark19 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark19
// zu
rect(100+19*faktor, height-c_bark19, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark19 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark20 = map(bark20, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark20 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark20
// zu
rect(100+20*faktor, height-c_bark20, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark20 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark21 = map(bark21, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark21 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark21
// zu
rect(100+21*faktor, height-c_bark21, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark21 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark22 = map(bark22, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark22 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark22
// zu
rect(100+22*faktor, height-c_bark22, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark22 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark23 = map(bark23, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark23 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark23
// zu
rect(100+23*faktor, height-c_bark23, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark23 und deren Abstand vom Faktor
faktor abhängig ist.
c_bark24 = map(bark24, 0, 3, 0, height); //
skaliere den Wert zwischen 0 und 3 von
// bark24 so, dass er zwischen 0 und der Höhe des Canvas ist und
weise ihn der Variablen c_bark24
// zu
rect(100+24*faktor, height-c_bark24, 15, height); //
erstelle ein Rechteck,
// dessen Höhe von der Variablen c_bark24 und deren Abstand vom Faktor
faktor abhängig ist.
}
function togglePlay()
{ // Steuerung des Audioplayers
meinplayer = document.getElementById('audio'); //
finde über
// getElementById() den Audioplayer mit der id "audio" und übergebe
ihn an die Variable meinplayer.
if (!meinplayer.paused) { // wenn der Audioplayer
nicht pausiert
stopAudio(); // pausiere ihn
} else { // in allen anderen Fällen
spielAudio(); // starte ihn
}
}
</script>
Insgesamt
sieht das Script dann folgendermaßen aus:
<head>
<head>
<script src="header/p5.js"></script>
<script src="header/p5.sound.js"></script>
<script src="header/meyda.min.js"></script>
<script>
function spielAudio() {
var meinplayer = document.getElementById('audio');
meinplayer.play();
}
function stopAudio()
{
var meinplayer = document.getElementById('audio');
meinplayer.pause();
meinplayer.currentTime = 0;
}
</script>
</head>
<body text="#000000" bgcolor="#FFFFFF">
<audio id="audio"
src="klang/fagott_toene.mp3" > </audio>
<DIV id="p5container" style="width:800;border: 1px
solid #333;box-shadow: 8px 8px 5px #444;padding: 8px 12px;background-color:ffffff"></DIV>
<script defer>
const audioContext
= new AudioContext();
const htmlAudioElement = document.getElementById('audio');
const source = audioContext.createMediaElementSource(htmlAudioElement);
source.connect(audioContext.destination);
if (typeof Meyda === "undefined") {
alert("Meyda konnte nicht gefunden werden, wurde die Library nicht
eingebunden?");
}
else {
const analyzer = Meyda.createMeydaAnalyzer({
"audioContext": audioContext,
"source": source,
"bufferSize": 512,
"featureExtractors": ["loudness"],
"callback": features => {
bark1 = Math.round(features.loudness.specific[0] * 1000)/1000;
bark2 = Math.round(features.loudness.specific[1] * 1000)/1000;
bark3 = Math.round(features.loudness.specific[2] * 1000)/1000;
bark4 = Math.round(features.loudness.specific[3] * 1000)/1000;
bark5 = Math.round(features.loudness.specific[4] * 1000)/1000;
bark6 = Math.round(features.loudness.specific[5] * 1000)/1000;
bark7 = Math.round(features.loudness.specific[6] * 1000)/1000;
bark8 = Math.round(features.loudness.specific[7] * 1000)/1000;
bark9 = Math.round(features.loudness.specific[8] * 1000)/1000;
bark10 = Math.round(features.loudness.specific[9] * 1000)/1000;
bark11 = Math.round(features.loudness.specific[10] * 1000)/1000;
bark12 = Math.round(features.loudness.specific[11] * 1000)/1000;
bark13 = Math.round(features.loudness.specific[12] * 1000)/1000;
bark14 = Math.round(features.loudness.specific[13] * 1000)/1000;
bark15 = Math.round(features.loudness.specific[14] * 1000)/1000;
bark16 = Math.round(features.loudness.specific[15] * 1000)/1000;
bark17 = Math.round(features.loudness.specific[16] * 1000)/1000;
bark18 = Math.round(features.loudness.specific[17] * 1000)/1000;
bark19 = Math.round(features.loudness.specific[18] * 1000)/1000;
bark20 = Math.round(features.loudness.specific[19] * 1000)/1000;
bark21 = Math.round(features.loudness.specific[20] * 1000)/1000;
bark22 = Math.round(features.loudness.specific[21] * 1000)/1000;
bark23 = Math.round(features.loudness.specific[22] * 1000)/1000;
bark24 = Math.round(features.loudness.specific[23] * 1000)/1000;
total = Math.round(features.loudness.total * 10)/10;
}
});
analyzer.start();
}
function setup(){
var container = createCanvas(800,400);
container.parent('p5container');
container.mouseClicked(togglePlay);
faktor = 25;
}
function draw(){
background(255, 255, 255);
cursor(HAND);
noStroke();
fill(188, 188, 188); textSize(10);
text("Bark 1: " + bark1, 20, 20);
text("Bark 2: " + bark2, 20, 30);
text("Bark 3: " + bark3, 20, 40);
text("Bark 4: " + bark4, 20, 50);
text("Bark 5: " + bark5, 20, 60);
text("Bark 6: " + bark6, 20, 70);
text("Bark 7: " + bark7, 20, 80);
text("Bark 8: " + bark8, 20, 90);
text("Bark 9: " + bark9, 20, 100);
text("Bark 10: " + bark10, 20, 110);
text("Bark 11: " + bark11, 20, 120);
text("Bark 12: " + bark12, 20, 130);
text("Bark 13: " + bark13, 20, 140);
text("Bark 14: " + bark14, 20, 150);
text("Bark 15: " + bark15, 20, 160);
text("Bark 16: " + bark16, 20, 170);
text("Bark 17: " + bark17, 20, 180);
text("Bark 18: " + bark18, 20, 190);
text("Bark 19: " + bark19, 20, 200);
text("Bark 20: " + bark20, 20, 210);
text("Bark 21: " + bark21, 20, 220);
text("Bark 22: " + bark22, 20, 230);
text("Bark 23: " + bark23, 20, 240);
text("Bark 24: " + bark24, 20, 250);
fill(188, 48, 47);
text("gesamt: " , 20, 300);
textSize(30);
text(total, 20, 340);
c_bark1 = map(bark1, 0, 3, 0, height);
rect(100+1*faktor, height-c_bark1, 15, height);
c_bark2 = map(bark2, 0, 3, 0, height);
rect(100+2*faktor, height-c_bark2, 15, height);
c_bark3 = map(bark3, 0, 3, 0, height);
rect(100+3*faktor, height-c_bark3, 15, height);
c_bark4 = map(bark4, 0, 3, 0, height);
rect(100+4*faktor, height-c_bark4, 15, height);
c_bark5 = map(bark5, 0, 3, 0, height);
rect(100+5*faktor, height-c_bark5, 15, height);
c_bark6 = map(bark6, 0, 3, 0, height);
rect(100+6*faktor, height-c_bark6, 15, height);
c_bark7 = map(bark7, 0, 3, 0, height);
rect(100+7*faktor, height-c_bark7, 15, height);
c_bark8 = map(bark8, 0, 3, 0, height);
rect(100+8*faktor, height-c_bark8, 15, height);
c_bark9 = map(bark9, 0, 3, 0, height);
rect(100+9*faktor, height-c_bark9, 15, height);
c_bark10 = map(bark10, 0, 3, 0, height);
rect(100+10*faktor, height-c_bark10, 15, height);
c_bark11 = map(bark11, 0, 3, 0, height);
rect(100+11*faktor, height-c_bark11, 15, height);
c_bark12 = map(bark12, 0, 3, 0, height);
rect(100+12*faktor, height-c_bark12, 15, height);
c_bark13 = map(bark13, 0, 3, 0, height);
rect(100+13*faktor, height-c_bark13, 15, height);
c_bark14 = map(bark14, 0, 3, 0, height);
rect(100+14*faktor, height-c_bark14, 15, height);
c_bark15 = map(bark15, 0, 3, 0, height);
rect(100+15*faktor, height-c_bark15, 15, height);
c_bark16 = map(bark16, 0, 3, 0, height);
rect(100+16*faktor, height-c_bark16, 15, height);
c_bark17 = map(bark17, 0, 3, 0, height);
rect(100+17*faktor, height-c_bark17, 15, height);
c_bark18 = map(bark18, 0, 3, 0, height);
rect(100+18*faktor, height-c_bark18, 15, height);
c_bark19 = map(bark19, 0, 3, 0, height);
rect(100+19*faktor, height-c_bark19, 15, height);
c_bark20 = map(bark20, 0, 3, 0, height);
rect(100+20*faktor, height-c_bark20, 15, height);
c_bark21 = map(bark21, 0, 3, 0, height);
rect(100+21*faktor, height-c_bark21, 15, height);
c_bark22 = map(bark22, 0, 3, 0, height);
rect(100+22*faktor, height-c_bark22, 15, height);
c_bark23 = map(bark23, 0, 3, 0, height);
rect(100+23*faktor, height-c_bark23, 15, height);
c_bark24 = map(bark24, 0, 3, 0, height);
rect(100+24*faktor, height-c_bark24, 15, height);
}
function togglePlay()
{
meinplayer = document.getElementById('audio');
if (!meinplayer.paused) {
stopAudio();
} else {
spielAudio();
}
}
</script>
</body>
|