aboutsummaryrefslogtreecommitdiff
path: root/site/udo/soundfont.udo
blob: 6c60b9908ce9b3cc4ed2654916d961464f7ec054 (plain)
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
#ifndef UDO_SOUNDFONT
#define UDO_SOUNDFONT ##
/*
	Sound font tools
	
	This file is part of the SONICS UDO collection by Richard Knight 2021
		License: GPL-2.0-or-later
		http://1bpm.net

*/

#include "host_tools.udo"

; load soundfonts
isf_temp[] fillarray \
	sfload(dir_soundfont("Rhodes/Galaxy_Electric_Pianos.sf2")),\
	sfload(dir_soundfont("Rhodes/vibra.sf2")),\
	sfload(dir_soundfont("Rhodes/JR_elepiano.sf2")),\
	sfload(dir_soundfont("Rhodes/Crysrhod.sf2")),\
	sfload(dir_soundfont("Rhodes/KR-O5R-Operator.sf2"))

; prepare rhodes presets
gisf_rhodes[] fillarray \
	sfpreset(4, 2, isf_temp[0], 0),\
	sfpreset(5, 2, isf_temp[0], 1),\
	sfpreset(4, 3, isf_temp[0], 2),\
	sfpreset(5, 3, isf_temp[0], 3),\
	sfpreset(4, 4, isf_temp[0], 4),\
	sfpreset(5, 4, isf_temp[0], 5),\
	sfpreset(0, 0, isf_temp[1], 6),\
	sfpreset(2, 0, isf_temp[1], 7),\
	sfpreset(0, 0, isf_temp[2], 8 ),\
	sfpreset(0, 0, isf_temp[3], 9),\
	sfpreset(0, 0, isf_temp[4], 10)

; rhodes gains for each preset index as above
gisf_rhodes_gain[] fillarray 1.6, 5, 1, 1, 1, 1, 1, 1, 1, 1.5, 1
gisf_rhodes_noteaugment[] fillarray 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0

/*
	Play rhodes soundfont
	aL, aR sf_rhodes index, inote, [ivel]

	index		index in gisf_rhodes, 0 to 10
	inote		midi note number
	ivel		velocity, 0 to 1, default=1
*/
opcode sf_rhodes, aa, iip
	index, inote, ivel xin
	aL, aR sfplay3 ivel, inote + gisf_rhodes_noteaugment[index], gisf_rhodes_gain[index]/30000, 1, gisf_rhodes[index]
	xout aL, aR
endop


/*
	Play random rhodes soundfont from gisf_rhodes
	aL, aR sf_rhodes inote, [ivel]

	inote		midi note number
	ivel		velocity, 0 to 1, default=1
*/
opcode sf_rhodes_random, aa, ip
	inote, ivel xin
	aL, aR sf_rhodes round(random(0, lenarray(gisf_rhodes)-1)), inote, ivel
	xout aL, aR
endop

#end