Implementierung zum Zeichnen einer Audio-Wellenform mit wavesurfer.js

Implementierung zum Zeichnen einer Audio-Wellenform mit wavesurfer.js

1. Sehen Sie sich die Renderings an

Weiterleiten auswählen:

Rückwärts auswählen:

Der Code lautet wie folgt (Beispiel):

<Vorlage>
 <div Klasse="waveSurfer">
  <div Klasse="oben">
   <span @click="leftSelect">Weiter auswählen</span>
   <span @click="rightSelect">Rückwärts auswählen</span>
   <span @click="Region">Markieren</span>
  </div>
  <!-- Zeitleiste -->
  <div id="Wellenzeitleiste" />
  <!-- Spektrumdiagramm -->
  <div id="Wellenform">
   <Fortschritt
    id="Fortschritt"
    Klasse = "Fortschritt Fortschritt-gestreift"
    Wert="0"
    max="100"
   ></Fortschritt>
  </div>
  <div v-show="ppt" id="Wellenspektrogramm" Klasse="mt-20" />
  <!-- Bedientasten -->
  <div Klasse="Titel">
   <ul>
    <li>
     <span @click="zoomIn"></span>
    </li>
    <li>
     <span @click="rew"></span>
    </li>
    <li>
     <span :class="{ on: isPlay }" @click="plays"></span>
    </li>
    <li>
     <span @click="speek"></span>
    </li>
    <li>
     <span @click="zoomOut"></span>
    </li>
    <li>
     <span @click="replay"></span>
    </li>
    <li @click="toggleMute" :class="{ ein: Umschalten der Stummschaltfläche }" class="Ton">
     <span></span>
    </li>
    <li>
     <Eingabe
      @mouseup="Volumenleistengriff"
      v-Modell="Volwert"
      Typ="Bereich"
      min="0"
      max="1"
      Wert="0,8"
      Schritt="0,01"
     />
    </li>
    <li @click="Doppelte Geschwindigkeit(index)">
     {{ Geschwindigkeit[index] + " X" }}
    </li>
   </ul>
  </div>
 </div>
</Vorlage>
<Skript>
importiere WaveSurfer aus „wavesurfer.js“;
Importiere die Zeitleiste aus „wavesurfer.js/dist/plugin/wavesurfer.timeline.js“;
Importiere Regionen aus „wavesurfer.js/dist/plugin/wavesurfer.regions.js“;
Standard exportieren {
 Daten: Funktion () {
  zurückkehren {
   Index: 0,
   Geschwindigkeit: [1,0, 1,5, 2,0, 0,5],
   isPlay: falsch,
   ppt: falsch,
   ds: 1,0,
   Zoomwert: 100,
   ZoomMin: 100,
   schnell: 3,
   zurück: 3,
   NotizDaten: [],
   Umschalten der Stummschalttaste: wahr,
   volWert: 0,
   audioUrl: "",
   wird geladen: wahr,
  };
 },
 // berechnet: {
 // // Berechneter Eigenschaftsgetter
 // getUrl: Funktion() {
 // // „this“ bezieht sich auf die VM-Instanz // return this.$store.state.voicetrain.url
 // }
 // },
 // betrachten: {
 // getUrl(neueUrl) {
 // dies.laden = true
 // diese.audioUrl = neueUrl
 // document.getElementById('waveform').innerHTML = ''
 // dies.init()
 // }
 // },
 montiert() {
  diese.audioUrl =
   „http://192.168.1.101:8080/api/files/20201104/62afa213458d44b0a99440b33fb694b9“;
  dies.init();
 },
 
 Methoden: {
  // Initialisierung init() {
   document.getElementById("Fortschritt").style.display = "Block";
   dies.$nextTick(() => {
    dies.wavesurfer = WaveSurfer.create({
     Container: "#Wellenform",
     cursorColor: "#DB7093", // Farbe der Fortschrittslinie der Schallwellenwiedergabe
     Audiorate: 1,
     scrollParent: wahr,
     Backend: "WebAudio",
     Balkenhöhe: 1,5,
     waveColor: "#43d996", // Schallwellenfarbe
     progressColor: "#43d996", // Schallwellenfarbe wurde abgespielt
     loaderColor: "#8B0000",
     hideScrollbar: false,
     autoCenter: wahr,
     Höhe: 120,
     splitChannels: wahr,
     reaktionsfähig: wahr,
     minPxPerSec: 1,
     Plugins: [
      Zeitleiste.erstellen({
       Container: "#wave-timeline",
       Schriftgröße: 14,
       primäreSchriftfarbe: "#9191a5",
       sekundäreSchriftfarbe: "#9191a5",
       Primärfarbe: "#9191a5",
       Sekundärfarbe: "#9191a5",
      }),
      Regionen.erstellen({}),
     ],
    });
    dies.wavesurfer.addRegion({
     Schleife: falsch,
     ziehen: falsch,
     Größe ändern: false,
     Farbe: "rgba(254, 255, 255, 0.4)",
    });
    // Fortschrittsbalken wird geladen this.wavesurfer.on("loading", function (percents) {
     document.getElementById("Fortschritt").Wert = Prozente;
    });
    dies.wavesurfer.load(diese.audioUrl);
    this.value = this.wavesurfer.getVolume() * 100; // Lautstärke abrufen this.zoomValue = this.wavesurfer.params.minPxPerSec;
    dies.zoomMin = dies.wavesurfer.params.minPxPerSec;
    this.wavesurfer.zoom(Zahl(this.zoomWert));
    dies.wavesurfer.panner = dies.wavesurfer.backend.ac.createPanner();
    dies.wavesurfer.backend.setFilter(dieses.wavesurfer.panner);
    lass _this = dies;
    _this.wavesurfer.on("bereit", Funktion () {
     _this.wavesurfer.enableDragSelection({
      Farbe: "rgba(0, 180, 0, 0.3)",
     });
     _this.wavesurfer.clearRegions();
     _this.wavesurfer.zoom(_this.zoomValue);
     // Audio wird geladen. document.getElementById("progress").style.display = "none";
     document.getElementById("Fortschritt").Wert = 0;
     _this.isPlay = true;
     _dieser.wavesurfer.play(0);
    });
    document.getElementById("Wellenform").onclick = Funktion () {
     _this.isPlay = falsch;
     _this.wavesurfer.clearRegions();
    };
    // Beim Aktualisieren der Region. Der Rückruf erhält dieses Region-Objekt.
    // this.wavesurfer.on("region-updated", Funktion (Region) {
    // region.playLoop(); // Die ausgewählte Region in einer Schleife abspielen // _this.isPlay = true;
    // });
    _this.wavesurfer.on("Region erstellt", _this.addRegion);
    _this.wavesurfer.on("Region-Klick", _this.editAnnotation);
 
    _this.wavesurfer.on("fertig", Funktion () {
     _dieser.wavesurfer.play(0);
    });
   });
  },
  addRegion(Parameter) {
   dies.wavesurfer.clearRegions();
   params.handleLeftEl.style.backgroundColor = "transparent";
   params.handleRightEl.style.backgroundColor = "transparent";
  },
  Stummschalten() {
   wenn (dieser.toggleMutebutton) {
    this.volumeCached = this.wavesurfer.getVolume();
    dies.wavesurfer.setVolume(0);
    this.toggleMutebutton = falsch;
    dieser.volValue = 0;
   } anders {
    wenn (this.volumeCached == 0) this.volumeCached = 1;
    dies.wavesurfer.setVolume(dieses.volumeCached);
    dies.toggleMutebutton = true;
    dieser.volValue = dieser.volumeCached;
   }
  },
  volumeBarHandle(e) {
   wenn (e.offsetX >= 0 und e.offsetX <= 80) {
    dies.toggleMutebutton = true;
    dies.wavesurfer.setVolume(e.offsetX / 80);
   } sonst wenn (e.offsetX < 0) {
    this.toggleMutebutton = falsch;
    dies.wavesurfer.setVolume(0);
   } anders {
    dies.wavesurfer.setVolume(1);
    dies.toggleMutebutton = true;
   }
  },
  // Region kommentieren() {
   konsole.log(
    Objekt.getOwnPropertyNames(diese.wavesurfer.regions.list).Länge
   );
   Wenn (
    Object.getOwnPropertyNames(this.wavesurfer.regions.list).length == 0
   ) {
    alert("Bitte wählen Sie Ripple");
    zurückkehren;
   }
   sei start = 0,
    Ende = 0;
   für (var k in this.wavesurfer.regions.list) {
    let obj = this.wavesurfer.regions.list[k];
    start = obj.start.toFixed(2) * 1000;
    Ende = obj.end.toFixed(2) * 1000;
   }
   Konsole.log(dieses.wavesurfer);
   Konsole.log("Start", Start);
   console.log("Ende", Ende);
  },
  // Abspielen plays() {
   dies.istPlay = !dies.istPlay;
   this.wavesurfer.playPause(); //Zur Wiedergabe wechseln, Wiedergabe oder Pause anwenden},
  // Zurücksetzen rew() {
   dies.wavesurfer.skip(-dieses.zurück);
   dies.goPlay();
  },
  // Schneller Vorlauf speak() {
   dies.wavesurfer.skip(dies.fast);
   dies.goPlay();
  },
  // Neu laden replay() {
   dies.isPlay = true;
   dies.wavesurfer.stop();
   dies.wavesurfer.clearRegions();
   dies.wavesurfer.play(0);
  },
  // Doppelte Geschwindigkeit(Index) {
   wenn (Index === 3) {
    dieser.index = 0;
    dies.wavesurfer.setPlaybackRate(diese.Geschwindigkeit[dieser.Index]);
   } anders {
    dieser.index = index + 1;
    dies.wavesurfer.setPlaybackRate(diese.Geschwindigkeit[dieser.Index]);
   }
   Konsole.log(dieses.wavesurfer);
  },
  // Anzeigeformat für den Zoom in Prozent formatZoom(val) {
   return val + 100 + " Pixel/Sekunde";
  },
  // Klicken zum Verkleinern zoomIn() {
   wenn (dieser.zoomValue >= 100) {
    zurückkehren;
   }
   dieser.zoomWert += 1;
   dies.wavesurfer.zoom(dieser.zoomValue);
  },
  // Zum Vergrößern klicken zoomOut() {
   wenn (dieser.zoomWert < -100) {
    zurückkehren;
   }
   dieser.zoomWert -= 1;
   dies.wavesurfer.zoom(dieser.zoomValue);
  },
  // Zoom-Listener zoomChange() {
   this.wavesurfer.zoom(Zahl(this.zoomWert));
  },
  geheSpielen() {
   lass start = this.wavesurfer.getCurrentTime();
   dies.wavesurfer.play(start);
  },
  // Vorwärts auswählen leftSelect() {
   let end = this.wavesurfer.getCurrentTime(); // Aktuelle Wiedergabeposition abrufen this.waveRegion(this.wavesurfer, 0, end, "rgba(0,180,0,.3)", true);
  },
  // Auswählen rightSelect() {
   let start = this.wavesurfer.getCurrentTime(); // Aktuelle Wiedergabeposition abrufen let end = this.wavesurfer.getDuration(); // Dauer des Audioclips abrufen this.waveRegion(this.wavesurfer, start, end, "rgba(0,180,0,.3)", true);
  },
  waveRegion(Wellensurfer, Start, Ende, Farbe, klar) {
   wenn (!löschen) {
    wavesurfer.clearRegions();
   }
   wavesurfer.addRegion({
    Anfang: Anfang,
    Ende: Ende,
    Farbe: Farbe,
    ziehen: falsch,
   });
  },
  // Erstelle ein neues saveRegions() für das Region-Klick-Ereignis {
   console.log("Stimmenabdruck-Klick---");
   diese.noteData = [];
   const _this = dies;
   this.noteData = Objekt.keys(_this.wavesurfer.regions.list).map(Funktion (
    Ausweis
   ) {
    const region = _this.wavesurfer.regions.list[id];
    zurückkehren {
     Ich würde: Ich würde,
     bearbeiten: falsch,
     Start: Math.round(region.start * 10) / 10,
     Ende: Math.round(region.end * 10) / 10,
     Attribute: region.attributes,
     Daten: { Hinweis: region.data.note || "" },
    };
   });
  },
  // Bereich klicken editAnnotation() {
   dies.isPlay = falsch;
  },
  showNote(region) {
   wenn (!this.showNote.el) {
    this.showNote.el = document.querySelector("#Untertitel");
   }
   this.showNote.el.textContent = region.data.note || "–";
  },
  // Lautstärke einstellen setVolume(val) {
   konsole.log(Wert);
   dies.wavesurfer.setVolume(val / 100);
  },
  //Instanz klicken clearReagion() {
   dies.wavesurfer.clearRegions();
  },
 },
};
</Skript>
<style lang="scss" scoped>
#Wellenform {
 Position: relativ;
}
.Spitze {
 Breite: 100 %;
 Flex-Basis: 70px;
 Zeilenhöhe: 40px;
 Flex-Schrumpfen: 0;
 Farbe: weiß;
 Texteinzug: 15px;
 Spanne,
 el-Schieberegler {
  Farbe: rgb(39, 39, 39);
  Schriftgröße: 13px;
  Schriftstärke: 700;
  Rand rechts: 20px;
  Polsterung: 4px 10px;
  Rand: 1px durchgezogen #ccc;
  Rahmenradius: 10px;
 }
}
.Titel {
 Breite: 100 %;
 Flex-Basis: 70px;
 Zeilenhöhe: 40px;
 Textausrichtung: links;
 Flex-Schrumpfen: 0;
 Farbe: weiß;
 Texteinzug: 15px;
 ul {
  Listenstiltyp: keiner;
  Auffüllen-Inline-Start: 0;
  .Geschwindigkeit {
   Anzeige: Flex;
   Flex-Richtung: Spalte;
  }
  li {
   Position: relativ;
   Anzeige: Inline-Block;
   Cursor: Standard;
   &:schweben {
   }
   &:aktiv {
   }
   Spanne {
    Anzeige: Inline-Block;
    Breite: 30px;
    Höhe: 30px;
    Zeilenhöhe: 30px;
   }
   &:n-tes-Kind(1) span {
    Breite: 27px;
    Höhe: 27px;
    Hintergrund: url("img/shrink.png") rechts;
    Hintergrundgröße: Abdeckung;
   }
   &:n-tes-Kind(2) span {
    Hintergrund: url("img/kuaitui_bg.png") rechts;
    Hintergrundgröße: Abdeckung;
   }
   &:n-tes-Kind(3) {
    Spanne {
     Hintergrund: url("img/bofang_bg.png") rechts;
     Hintergrundgröße: Abdeckung;
    }
    .An {
     Hintergrund: url("img/zanting_bg.png") rechts;
     Hintergrundgröße: Abdeckung;
    }
   }
   &:n-tes-Kind(4) span {
    Hintergrund: URL("img/kuaijin_bg.png") rechts;
    Hintergrundgröße: Abdeckung;
   }
   &:n-tes-Kind(5) span {
    Hintergrund: url("img/zoom.png") rechts;
    Hintergrundgröße: Abdeckung;
   }
   &:n-tes-Kind(6) span {
    Hintergrund: URL("img/zhongbo.png") rechts;
    Hintergrundgröße: Abdeckung;
   }
   &:n-tes-Kind(9) {
    Farbe: rgb(39, 39, 39);
    Schriftgröße: 13px;
    Schriftstärke: 700;
   }
   &:n-tes-Kind(7) {
    Hintergrund: keiner;
    Spanne {
     Breite: 25px;
     Höhe: 25px;
     Hintergrund: URL("img/silent.png") keine Wiederholung;
     Hintergrundgröße: Abdeckung;
    }
    &.An {
     Spanne {
      Breite: 25px;
      Höhe: 25px;
      Hintergrund: URL("img/speaker.png") keine Wiederholung;
      Hintergrundgröße: Abdeckung;
     }
    }
   }
   &:n-tes-Kind(8) {
    Breite: 80px;
    Hintergrund: keiner;
    Eingabe {
     -webkit-auftritt: keines;
     -moz-Aussehen: keines;
     -ms-Erscheinungsbild: keines;
     Breite: 80px;
     Höhe: 3px;
     Hintergrundfarbe: #bbbbbb;
     Position: absolut;
     links: 0;
     oben: -14px;
 
     &::-webkit-slider-thumb {
      -webkit-auftritt: keines;
     }
     &::-moz-range-trackpseduo {
      -moz-Aussehen: keines;
     }
     &::-ms-track {
      Breite: 100 %;
      Cursor: Zeiger;
      Hintergrund: transparent; /* Blendet den Schieberegler aus, damit benutzerdefinierte Stile hinzugefügt werden können */
      Rahmenfarbe: transparent;
      Farbe: transparent;
     }
     &:Fokus {
      Gliederung: keine;
     }
     &::-webkit-slider-thumb {
      -webkit-auftritt: keines;
      Höhe: 9px;
      Breite: 9px;
      Rand oben: -1px;
      Hintergrund: #bbb;
      Randradius: 50 %;
      Rand: durchgezogen 0,125em rgba (205, 224, 230, 0,5);
     }
     &::-moz-Bereich-Daumen {
      -moz-Aussehen: keines;
      Höhe: 6px;
      Breite: 6px;
      Rand oben: -1px;
      Hintergrund: #bbb;
      Randradius: 50 %;
      Rand: durchgezogen 0,125em rgba (205, 224, 230, 0,5);
     }
     &::-ms-track {
      -moz-Aussehen: keines;
      Höhe: 6px;
      Breite: 6px;
      Rand oben: -1px;
      Hintergrund: #bbb;
      Randradius: 50 %;
      Rand: durchgezogen 0,125em rgba (205, 224, 230, 0,5);
     }
    }
   }
  }
 }
}
#Wellenzeitleiste {
 Höhe: 21px;
}
#Wellenform {
 Breite: 100 %;
 Flex-Basis: 128px;
 Flex-Schrumpfen: 0;
 Position: relativ;
}
#Fortschritt {
 Position: absolut;
 Breite: 100 %;
 Höhe: 4px;
 Hintergrund: #ccc;
 oben: 48 %;
 Deckkraft: 0,7;
 Z-Index: 44;
}
.mt-20 {
 Rand oben: 20px;
}
.mt-30 {
 Rand oben: 30px;
}
.waveSurfer {
 Breite: 470px;
}
.waveSurfer >>> .el-slider__runway {
 Rand: 6px 0;
}
</Stil>

Verknüpfung: https://wavesurfer-js.org

Dies ist das Ende dieses Artikels über die Implementierung von wavesurfer.js zum Zeichnen von Audiowellenformen. Weitere verwandte Inhalte zu wavesurfer.js-Audiowellenformen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der Audiodateiformate RIFF und WAVE

<<:  MySQL-Entwicklungsleistungsforschung: Optimierungsmethode zum Batch-Einfügen von Daten

>>:  Verwendung des Linux Dig-Befehls

Artikel empfehlen

Geben Sie einige Tipps zur Verwendung von JavaScript-Operatoren

Inhaltsverzeichnis 1. Optionaler Verkettungsopera...

Beispielcode zum Konfigurieren von Nginx zur Unterstützung von https

1. Einleitung Lassen Sie Ihre Website immer noch ...

Upgrade von MySQL 5.1 auf 5.5.36 in CentOS

Dieser Artikel beschreibt den Upgrade-Prozess von...

Detaillierte Bereitstellung von Docker+Gitlab+Gitlab-Runner

Umfeld Server: centos7 Kunde: Fenster Stellen Sie...

Serielle und parallele Operationen in JavaScript

Inhaltsverzeichnis 1. Einleitung 2. es5-Methode 3...

JavaScript BOM-Standortobjekt + Navigatorobjekt + Verlaufsobjekt

Inhaltsverzeichnis 1. Standortobjekt 1. URL 2. Ei...

JavaScript zum Implementieren der Anzeige von Suchdaten

In diesem Artikel wird der Datenanzeigecode für d...

JavaScript implementiert den Div-Maus-Drag-Effekt

In diesem Artikel wird der spezifische Code für J...