aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 9572bd530b9c4e9dbf1ba1cf79b21b0890e24452 (plain) (blame)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# Fifteen Thieves

**XV fures**

Interface for talking to Roland synthesizers, and a few extra utilities (mostly in Python).

## List of tools

- `dump_patches.py`: Dump factory patches from a SD-80 or SD-90.
- `inspect_memoryregion.py`: Show the content of a `.memoryregion` file generated from patch dumps
  in a somewhat human-readable form.
- `srx_convert.py`: Convert dumped SD-80 / SD-90 patches to Roland SRX VSTi plugin.
- `test_amap.py`: Load an address map file and print the memory structure specified by it.
- `wave_stats.py`: Generate stats on usage of SD-80 / SD-90 waveforms from the dumps.

## Other files

- `amap`: System exclusive address maps.
  - `gs.amap`: Address map for SOUNDCanvas GS devices.
  - `sd-80.amap`: Address map for STUDIOCanvas SD-80 and SD-90.
  - `xv-5080.amap`: Address map for XV-5080 and other models in the XV lineup.
- `xv`: Python library for interfacing with Roland DT1/RQ1 system exclusive messages.

## Caution

- Many scripts contain hardcoded MIDI ports. This is subject to change, but before such changes
  happen, you'll have to modify them manually.

- pypy is recommended for running all the scripts whenever possible.

- All scripts are developed under Linux. There's no reason they wouldn't work on other major
  platforms, though (given you have specified the correct MIDI port).

## Information for individual tools

### `dump_patches.py`

Requires hardware SD-90 or SD-80.

Give this script a few minutes to run, then you'll get the following files:

```
data
 +--patchparam
 |   +--classical
 |   |   +--00-000-Piano 1.memoryregion
 |   |   +--...
 |   +--contemporary
 |   |   +--00-000-Ac.Piano.memoryregion
 |   |   +--...
 |   +--...
 +--rhythmparam
     +--classical
     |   +--00-Standard Set.memoryregion
     |   +--...
     +--contemporary
     |   +--00-StandardSet2.memoryregion
     |   +--...
     +--...
```

These files contain preset data for each individual factory patch and can be used
by other tools.

### `inspect_memoryregion.py`

Requires one argument (path to the `.memoryregion` file). Prints the content of the given file
in a semi-human-readable form.

Needs `data/sdwavelist` to work. This file is still distributed by Roland Japan. You need to
remove the header from the file (the first line contains name of the first waveform).

### `srx_convert.py`

Requires populated `data/patchparam` and `data/rhythmparam` folder. Converts patch data in
these folders into a format that can be used by Roland SRX VSTi plugins. You need to mod
the plugin with wave ROM dump of SD-90 or SD-80 for these patches to work. You'll have to
obtain the dump yourself, as they are not in this repository for obvious reasons. Of course,
you can use these patches with unmodified SRX VSTi plugins as well.

Takes one argument, specifying the SRX VSTi title you want to generate the patches for.

  | SRX Plguin      | Parameter Used |
  | --------------- | -------------- |
  | Piano 1         | 2              |
  | Studio          | 3              |
  | Strings         | 4              |
  | Dance Trax      | 5              |
  | Orchestra       | 6              |
  | Keyboards       | 7              |
  | World           | 9              |
  | Brass           | 10             |
  | Piano 2         | 11             |
  | Electric Piano  | 12             |

Generated patches are in `data/srxsdpresets`. Subfolders indicates different organization
of patches.

### `test_amap.py`

Load an address map file and print the memory structure specified by it. The path to the amap
file is hardcoded.

### `wave_stats.py`

Requires populated `data/patchparam` and `data/rhythmparam` folder. Print how many times each
waveform is used by all the patches.

Needs `data/sdwavelist` to work. This file is still distributed by Roland Japan. You need to
remove the header from the file (the first line contains name of the first waveform).

## Disclaimer

This project is in no way endorsed by or affiliated with Roland Corporation.
This project contains no reverse engineered code, or data that are extracted from
Roland hardware units or Roland software. All memory address maps are transcribed
from public documentation. File format are learned through examination of file
contents. Misuse of this project can lead to legal disputes, and the author of
this project shall not be held responsible for such misuse.