如何使用 Angular/Typescript 获得波形音乐播放器

问题描述 投票:0回答:2

我的目标是在我的 angular 8 项目中设置一个简单的音乐播放器,以静态波形显示插入的音乐,类似于 soundclouds 播放器:

根据我的搜索,这可以通过以下任一方式完成:

Peaks JShttps://medium.com/better-programming/peaks-js-interact-with-audio-waveforms-b7cb5bd3939a
振幅 JShttps://521dimensions.com/open-source/amplitudejs/docs/configuration/
或 Wavesurfer JShttps://wavesurfer-js.org/

不幸的是,他们都没有关于如何将其正确导入一般的角度或打字稿的体面文档。

我用 Wavesurfer JS 尝试过,但失败了。

组件.ts:

 import { WaveSurfer } from 'wavesurfer.js';

    export class MusicComponent {

    public wavesurfer

      constructor() {

        this.wavesurfer = WaveSurfer.create({
          container: '#waveform',
          waveColor: 'violet',
          progressColor: 'purple'
        });

        this.wavesurfer.load('./assets/img/hollywood.wav');



      }

    }

html

 <div id="waveform"></div>

现在的问题是:
1.关于如何实现这样一个有角度的播放器,我没有找到其他一些好的做法。
2. 有没有办法让 wavesurf 在 Angular 中工作,或者我的代码错了。

javascript angular typescript audio-player wavesurfer.js
2个回答
3
投票

是的,有可能,我做到了。 检查下面的代码(.ts):

import {Component, OnInit, ViewChild, ElementRef, AfterViewInit, ChangeDetectorRef} from '@angular/core';
import WaveSurfer from 'wavesurfer.js';
import TimelinePlugin from 'wavesurfer.js/dist/plugin/wavesurfer.timeline.min.js';
import Regions from 'wavesurfer.js/dist/plugin/wavesurfer.regions.min.js';

@Component({
  selector: 'app-graph',
  templateUrl: './graph.component.html',
  styleUrls: ['./graph.component.css']
})

export class GraphComponent implements OnInit, AfterViewInit {

  wave: WaveSurfer = null;
  url = '../../assets/sinus.wav';
  public graph = undefined;


  constructor( private cdr: ChangeDetectorRef) {
  }


  ngOnInit(): void {


  }

  onPreviewPressed(): void {
    if (!this.wave) {
      this.generateWaveform();
    }

    this.cdr.detectChanges();

    Promise.resolve().then(() => this.wave.load(this.url));
  }

  onStopPressed(): void {
    this.wave.stop();
  }

  generateWaveform(): void {
    Promise.resolve(null).then(() => {
      this.wave = WaveSurfer.create({
        container: '#waveform',
        waveColor: 'violet',
        progressColor: 'purple',
        plugins: [
          TimelinePlugin.create({
            container: '#wave-timeline'
          }),
          Regions.create({
            regions: [
              {
                start: 1,
                end: 3,
                loop: false,
                color: 'hsla(400, 100%, 30%, 0.5)'
              }, {
                start: 5,
                end: 7,
                loop: false,
                color: 'hsla(200, 50%, 70%, 0.4)'
              }
            ],
            dragSelection: {
              slop: 5
            }
          })
        ]
      });

      this.wave.on('ready', () => {
        alert('I\'m ready');
        this.wave.play();
      });
    });
  }
}

在 HTML 文件上:

  <div id="waveform"></div>
  <div id="wave-timeline"></div>
  <div *ngIf="wave" class="controls">
    <button (click)="onStopPressed()">Stop</button>
  </div>
  <button (click)="onPreviewPressed()">Click me</button>

0
投票

Peaks.js 开发人员在这里。我创建了一个最小的演示应用程序,展示了如何在 Angular here 中开始使用 Peaks.js。特别是,看看

waveform-view
app
组件。

© www.soinside.com 2019 - 2024. All rights reserved.