MCPcopy Create free account
hub / github.com/GDRETools/gdsdecomp / convert

Method convert

compat/sample_loader_compat.cpp:4–60  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2#include "scene/resources/audio_stream_wav.h"
3
4Ref<Resource> SampleConverterCompat::convert(const Ref<MissingResource> &res, ResourceInfo::LoadType p_type, int ver_major, Error *r_error) {
5 String name = get_resource_name(res, ver_major);
6 AudioStreamWAV::LoopMode loop_mode = (AudioStreamWAV::LoopMode) int(res->get("loop_format"));
7 // int loop_begin, loop_end, mix_rate, data_bytes = 0;
8 int loop_begin = res->get("loop_begin");
9 int loop_end = res->get("loop_end");
10 bool stereo = res->get("stereo");
11
12 int mix_rate = res->get("mix_rate");
13 if (!mix_rate) {
14 mix_rate = 44100;
15 }
16 Vector<uint8_t> data;
17 AudioStreamWAV::Format format = (AudioStreamWAV::Format) int(res->get("format"));
18 int data_bytes = 0;
19 Dictionary dat = res->get("data");
20 if (dat.is_empty()) {
21 data = res->get("data");
22 } else {
23 String fmt = dat.get("format", "");
24 if (fmt == "ima_adpcm") {
25 format = AudioStreamWAV::FORMAT_IMA_ADPCM;
26 } else if (fmt == "pcm16") {
27 format = AudioStreamWAV::FORMAT_16_BITS;
28 } else if (fmt == "pcm8") {
29 format = AudioStreamWAV::FORMAT_8_BITS;
30 }
31 data = dat.get("data", Vector<uint8_t>());
32 if (dat.has("stereo")) {
33 stereo = dat["stereo"];
34 }
35 if (dat.has("length")) {
36 data_bytes = dat["length"];
37 }
38 }
39 if (data_bytes == 0) {
40 data_bytes = data.size();
41 }
42 // else if (data_bytes != data.size()) {
43 // TODO: something?
44 // WARN_PRINT("Data size mismatch: " + itos(data_bytes) + " vs " + itos(data.size()));
45 // }
46 // create a new sample
47 Ref<AudioStreamWAV> sample = memnew(AudioStreamWAV);
48 sample->set_name(name);
49 sample->set_data(data);
50 sample->set_format(format);
51 sample->set_loop_mode(loop_mode);
52 sample->set_stereo(stereo);
53 sample->set_loop_begin(loop_begin);
54 sample->set_loop_end(loop_end);
55 sample->set_mix_rate(mix_rate);
56 auto info = ResourceInfo::get_info_from_resource(res);
57 ERR_FAIL_COND_V_MSG(!info.is_valid(), res, "Missing resource has no compat metadata??????????? This should have been set by the missing resource instance function(s)!!!!!!!!");
58 info->set_on_resource(sample);
59 return sample;
60}
61

Callers

nothing calls this directly

Calls 5

set_nameMethod · 0.80
set_on_resourceMethod · 0.80
getMethod · 0.45
sizeMethod · 0.45
is_validMethod · 0.45

Tested by

no test coverage detected