0

最初にボタンを押したときにトーンを取得すると、このエラーが発生します...

エラー: setValueAtTime の引数が無効です: {}、2.2188208616780045

このエラーの原因がわからないので、マウスイベントごとに時間を設定したので、エラーを防ぐことができます。

私のコード:

import React, { Component } from "react";

import ButtonGroup from "react-bootstrap/ButtonGroup";
import Button from "react-bootstrap/Button";

import * as Tone from "tone";

const synth = new Tone.Synth().toDestination();

//
//container component to hold the piano keys
//
class PianoBoard extends Component {

  constructor(props) {
    super(props);

    this.handleMouseDown = this.handleMouseDown.bind(this);
    this.handleMouseUp = this.handleMouseUp.bind(this);
  }

  handleMouseDown(e){
    e.preventDefault(e);
    Tone.start();
    synth.triggerAttack(e.target.attributes.note,Tone.now());
  }

  handleMouseUp(e){
    e.preventDefault(e);
    
    synth.triggerRelease(Tone.now());
  }

  render() {
    return (
      <div class="pianoboard">
        <Button onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} note="C4">
          C4
        </Button>
      </div>
    );
  }
}

export default PianoBoard;
4

1 に答える 1

1

エラーはトーン属性に起因します。イベントnoteの属性を取得しようとする代わりに、マウス ダウン関数に直接渡す必要があります。note

...
...
handleMouseDown(e, note){
  e.preventDefault(e);
  Tone.start();
  synth.triggerAttack(note,Tone.now());
}
...
...
<Button 
  onMouseDown={e => this.handleMouseDown(e, "C4")} 
  onMouseUp={this.handleMouseUp}
>
  C4
</Button>

于 2021-02-07T00:20:39.170 に答える