spessasynth_lib 3.17.0 → 3.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/@types/soundfont/basic_soundfont/basic_sample.d.ts +2 -2
- package/@types/soundfont/basic_soundfont/basic_zone.d.ts +12 -12
- package/@types/soundfont/basic_soundfont/basic_zones.d.ts +4 -0
- package/@types/soundfont/basic_soundfont/riff_chunk.d.ts +6 -0
- package/@types/soundfont/dls/articulator_converter.d.ts +10 -0
- package/@types/soundfont/dls/dls_destinations.d.ts +29 -0
- package/@types/soundfont/dls/dls_preset.d.ts +7 -5
- package/@types/soundfont/dls/dls_sample.d.ts +18 -0
- package/@types/soundfont/dls/dls_soundfont.d.ts +9 -2
- package/@types/soundfont/dls/dls_sources.d.ts +22 -0
- package/@types/soundfont/dls/dls_zone.d.ts +22 -0
- package/@types/soundfont/dls/read_articulation.d.ts +12 -0
- package/@types/soundfont/dls/read_instrument_list.d.ts +2 -2
- package/@types/soundfont/dls/read_lart.d.ts +7 -0
- package/@types/soundfont/dls/read_region.d.ts +7 -0
- package/@types/soundfont/dls/read_samples.d.ts +5 -0
- package/@types/soundfont/read_sf2/generators.d.ts +18 -5
- package/@types/soundfont/read_sf2/modulators.d.ts +1 -0
- package/README.md +10 -0
- package/midi_parser/midi_loader.js +30 -3
- package/package.json +1 -1
- package/soundfont/README.md +6 -2
- package/soundfont/basic_soundfont/basic_sample.js +3 -3
- package/soundfont/basic_soundfont/basic_zone.js +28 -28
- package/soundfont/basic_soundfont/basic_zones.js +15 -19
- package/soundfont/basic_soundfont/riff_chunk.js +18 -2
- package/soundfont/dls/articulator_converter.js +311 -0
- package/soundfont/dls/dls_destinations.js +38 -0
- package/soundfont/dls/dls_preset.js +15 -8
- package/soundfont/dls/dls_sample.js +58 -0
- package/soundfont/dls/dls_soundfont.js +68 -11
- package/soundfont/dls/dls_sources.js +26 -0
- package/soundfont/dls/dls_zone.js +75 -0
- package/soundfont/dls/read_articulation.js +327 -0
- package/soundfont/dls/read_instrument.js +82 -4
- package/soundfont/dls/read_instrument_list.js +6 -6
- package/soundfont/dls/read_lart.js +35 -0
- package/soundfont/dls/read_region.js +129 -0
- package/soundfont/dls/read_samples.js +174 -0
- package/soundfont/read_sf2/generators.js +41 -6
- package/soundfont/read_sf2/modulators.js +3 -3
- package/synthetizer/worklet_processor.min.js +10 -8
- package/utils/buffer_to_wav.js +5 -26
package/utils/buffer_to_wav.js
CHANGED
|
@@ -113,39 +113,18 @@ export function audioBufferToWav(audioBuffer, normalizeAudio = true, channelOffs
|
|
|
113
113
|
wavData.set(header, 0);
|
|
114
114
|
|
|
115
115
|
// Interleave audio data (combine channels)
|
|
116
|
-
let multiplier;
|
|
116
|
+
let multiplier = 32767;
|
|
117
117
|
if(normalizeAudio)
|
|
118
118
|
{
|
|
119
119
|
// find min and max values to prevent clipping when converting to 16 bits
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
const max = Math.max(
|
|
123
|
-
channel1Data.reduce((max, value) => (value > max ? value : max), -Infinity),
|
|
124
|
-
channel2Data.reduce((max, value) => (value > max ? value : max), -Infinity)
|
|
125
|
-
);
|
|
126
|
-
|
|
127
|
-
const min = Math.min(
|
|
128
|
-
channel1Data.reduce((min, value) => (value < min ? value : min), Infinity),
|
|
129
|
-
channel2Data.reduce((min, value) => (value < min ? value : min), Infinity)
|
|
130
|
-
);
|
|
131
|
-
const maxAbsValue = Math.max(max, Math.abs(min));
|
|
132
|
-
multiplier = initialMultiplier / maxAbsValue;
|
|
133
|
-
}
|
|
134
|
-
else
|
|
135
|
-
{
|
|
136
|
-
multiplier = 32767;
|
|
137
|
-
// clip audio
|
|
138
|
-
for(let i = 0; i < length; i++)
|
|
139
|
-
{
|
|
140
|
-
channel1Data[i] = Math.min(1, Math.max(-1, channel1Data[i]));
|
|
141
|
-
channel2Data[i] = Math.min(1, Math.max(-1, channel2Data[i]));
|
|
142
|
-
}
|
|
120
|
+
const maxAbsValue = channel1Data.map((v, i) => Math.max(Math.abs(v), Math.abs(channel2Data[i]))).reduce( (a,b) => Math.max(a,b))
|
|
121
|
+
multiplier = maxAbsValue > 0 ? (32767 / maxAbsValue) : 1;
|
|
143
122
|
}
|
|
144
123
|
for (let i = 0; i < length; i++)
|
|
145
124
|
{
|
|
146
125
|
// interleave both channels
|
|
147
|
-
const sample1 = channel1Data[i] * multiplier;
|
|
148
|
-
const sample2 = channel2Data[i] * multiplier;
|
|
126
|
+
const sample1 = Math.min(1, Math.max(-1, channel1Data[i])) * multiplier;
|
|
127
|
+
const sample2 = Math.min(1, Math.max(-1,channel2Data[i])) * multiplier;
|
|
149
128
|
|
|
150
129
|
// convert to 16-bit
|
|
151
130
|
wavData[offset++] = sample1 & 0xff;
|