File size: 5,166 Bytes
af6912c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# Interactive Editor

There is a built in system for instantly updating the visual music as the end user is typing an ABC string into a textarea.

## Constructor

Call this constructor to link a textarea with a div that should display the music:
```javascript
let editor = new abcjs.Editor(editArea, editorParams);
```

| Editor Parameters | Description |
| ------------- | ----------- |
| `editArea` | If it is a string, then it is an HTML id of a textarea control. Otherwise, it should be an instantiation of an object that expresses the `EditArea` interface. |
| `editorParams` | Hash of parameters for the editor. |

## Editor Params

| editorParams | Description |
| ------------- | ----------- |
| `canvas_id` or `paper_id` | HTML id to draw in. If not present, then the drawing happens just below the editor. This can either be an ID or the actual HTML element. |
| `generate_warnings` | If present, then parser warnings are displayed on the page. The warnings are displayed just above the music. |
| `warnings_id` | If present, the HTML id to place the warnings. This supersedes `generate_warnings`. This can either be an id or the actual HTML element. |
| `onchange` | If present, the callback function to call whenever there has been a change in the ABC string. |
| `selectionChangeCallback` | If present, the callback function to call whenever there has been a change of selection. |
| `abcjsParams` | Options to send to abcjs when re-rendering both the visual and the audio. |
| `indicate_changed` | The dirty flag is set if this is true. When the user types in the textarea then the class `abc_textarea_dirty` is added to the textarea. Also see the `isDirty` and `setNotDirty` methods below. |
| `synth` | If present, add an audio control. This is an object. See below for the possible properties. Note: if the browser doesn't support synth, then this parameter has no effect. |

### Deprecated parameters:

The following parameters are still supported, but they are for the old style of audio generation that used midi.js.

| editorParams | Description |
| ------------- | ----------- |
| `generate_midi` | if present, then midi is generated. |
| `midi_id` | if present, the HTML id to place the midi control. Otherwise it is placed in the same div as the paper. An encompassing `div` surrounds each control with the class in the format `"inline-midi midi-%d"`. |
| `midi_download_id` | if present, the HTML id to place the midi download link. Otherwise, if `midi_id` is present it is placed there, otherwise it is placed in the same div as the paper. An encompassing `div` surrounds each control with the class in the format `"download-midi midi-%d"`.|

## Synth Properties

This is the object that is passed into the editor in the `synth` property. If this is present, then a `SynthController` object is created to handle the audio.

| Property | Description |
|---|---|
| el | Either a CSS selector or an HTML element for where to place the audio control. |
| cursorControl | Optional: The callback object of type `CursorControl` if you want to get notified when timing events happen. (See the [audio](https://paulrosen.github.io/abcjs/audio/synthesized-sound.html#cursorcontrol-object) section for more details.) |
| options | Optional: The options to pass directly to the [SynthController](https://raw.githubusercontent.com/paulrosen/abcjs/audio/synthesized-sound.html#audioparams) object. |

## Available Methods

| Editor entry points | Description |
| ------------- | ----------- |
| `setReadOnly(bool)` | adds or removes the class `abc_textarea_readonly`, and adds or removes the attribute `readonly`. |
| `updateSelection()` | Called when the user has changed the selection. This calls the engraver_controller to show the selection. |
| `fireSelectionChanged()` | Called by the textarea object when the user has changed the selection. |
| `fireChanged() | Can be called if the textarea is changed programmatically but the editor doesn't detect it. (For instance, useful in Vue when using `modelValue`) |
| `paramChanged(abcjsParams)` | Called to set the abcjsParams after the editor has been created. The music is re-rendered immediately. |
| `setNotDirty()` | Called by the client app to reset the dirty flag. (For instance, when the user saves their work.) |
| `isDirty()` | Returns true or false, whether the textarea contains the same text that it started with. |
| `pause(bool)` | Stops the automatic rendering when the user is typing. |
| `millisecondsPerMeasure()` | Called to return the number of milliseconds in a measure for the first tune in the editor. |
| `synthParamChanged(options)` | Called to replace the options passed in when the editor is created. It replaces the options here: `{ synth: { options: originalOptions } }` |

## Example

```html
<textarea id="abc"></textarea>
<div id="warnings"></div>
<div id="paper"></div>
```
```javascript
window.onload = function() {
    abc_editor = new abcjs.Editor("abc", { 
        canvas_id: "paper", 
        warnings_id:"warnings" 
    });
}
```

<abcjs-editor :abc="`X: 1
T: Cooley's
M: 4/4
L: 1/8
K: Emin
|:D2|EB{c}BA B2 EB|~B2 AB dBAG|FDAD BDAD|FDAD dAFD|
`"></abcjs-editor>