| 2 | #include "scene/resources/audio_stream_wav.h" |
| 3 | |
| 4 | Ref<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 |
nothing calls this directly
no test coverage detected