@@ -81,18 +81,50 @@ void ResourceImporterOggVorbis::get_import_options(const String &p_path, List<Im
81
81
r_options->push_back (ImportOption (PropertyInfo (Variant::INT, " bar_beats" , PROPERTY_HINT_RANGE, " 2,32,or_greater" ), 4 ));
82
82
}
83
83
84
- Ref<AudioStreamOggVorbis> ResourceImporterOggVorbis::import_ogg_vorbis (const String &p_path) {
85
- Ref<FileAccess> f = FileAccess::open (p_path, FileAccess::READ);
86
- ERR_FAIL_COND_V_MSG (f.is_null (), Ref<AudioStreamOggVorbis>(), " Cannot open file '" + p_path + " '." );
84
+ #ifdef TOOLS_ENABLED
87
85
88
- uint64_t len = f->get_length ();
86
+ bool ResourceImporterOggVorbis::has_advanced_options () const {
87
+ return true ;
88
+ }
89
89
90
- Vector<uint8_t > file_data;
91
- file_data.resize (len);
92
- uint8_t *w = file_data.ptrw ();
90
+ void ResourceImporterOggVorbis::show_advanced_options (const String &p_path) {
91
+ Ref<AudioStreamOggVorbis> ogg_stream = load_from_filesystem (p_path);
92
+ if (ogg_stream.is_valid ()) {
93
+ AudioStreamImportSettings::get_singleton ()->edit (p_path, " oggvorbisstr" , ogg_stream);
94
+ }
95
+ }
96
+ #endif
93
97
94
- f->get_buffer (w, len);
98
+ Error ResourceImporterOggVorbis::import (const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
99
+ bool loop = p_options[" loop" ];
100
+ float loop_offset = p_options[" loop_offset" ];
101
+ double bpm = p_options[" bpm" ];
102
+ int beat_count = p_options[" beat_count" ];
103
+ int bar_beats = p_options[" bar_beats" ];
104
+
105
+ Ref<AudioStreamOggVorbis> ogg_vorbis_stream = load_from_filesystem (p_source_file);
106
+ if (ogg_vorbis_stream.is_null ()) {
107
+ return ERR_CANT_OPEN;
108
+ }
109
+
110
+ ogg_vorbis_stream->set_loop (loop);
111
+ ogg_vorbis_stream->set_loop_offset (loop_offset);
112
+ ogg_vorbis_stream->set_bpm (bpm);
113
+ ogg_vorbis_stream->set_beat_count (beat_count);
114
+ ogg_vorbis_stream->set_bar_beats (bar_beats);
115
+
116
+ return ResourceSaver::save (ogg_vorbis_stream, p_save_path + " .oggvorbisstr" );
117
+ }
118
+
119
+ ResourceImporterOggVorbis::ResourceImporterOggVorbis () {
120
+ }
95
121
122
+ void ResourceImporterOggVorbis::_bind_methods () {
123
+ ClassDB::bind_static_method (" ResourceImporterOggVorbis" , D_METHOD (" load_from_buffer" , " array" ), &ResourceImporterOggVorbis::load_from_buffer);
124
+ ClassDB::bind_static_method (" ResourceImporterOggVorbis" , D_METHOD (" load_from_filesystem" , " path" ), &ResourceImporterOggVorbis::load_from_filesystem);
125
+ }
126
+
127
+ Ref<AudioStreamOggVorbis> ResourceImporterOggVorbis::load_from_buffer (const Vector<uint8_t > &file_data) {
96
128
Ref<AudioStreamOggVorbis> ogg_vorbis_stream;
97
129
ogg_vorbis_stream.instantiate ();
98
130
@@ -114,7 +146,7 @@ Ref<AudioStreamOggVorbis> ResourceImporterOggVorbis::import_ogg_vorbis(const Str
114
146
err = ogg_sync_check (&sync_state);
115
147
ERR_FAIL_COND_V_MSG (err != 0 , Ref<AudioStreamOggVorbis>(), " Ogg sync error " + itos (err));
116
148
while (ogg_sync_pageout (&sync_state, &page) != 1 ) {
117
- if (cursor >= len ) {
149
+ if (cursor >= size_t (file_data. size ()) ) {
118
150
done = true ;
119
151
break ;
120
152
}
@@ -123,8 +155,8 @@ Ref<AudioStreamOggVorbis> ResourceImporterOggVorbis::import_ogg_vorbis(const Str
123
155
char *sync_buf = ogg_sync_buffer (&sync_state, OGG_SYNC_BUFFER_SIZE);
124
156
err = ogg_sync_check (&sync_state);
125
157
ERR_FAIL_COND_V_MSG (err != 0 , Ref<AudioStreamOggVorbis>(), " Ogg sync error " + itos (err));
126
- ERR_FAIL_COND_V (cursor > len , Ref<AudioStreamOggVorbis>());
127
- size_t copy_size = len - cursor;
158
+ ERR_FAIL_COND_V (cursor > size_t (file_data. size ()) , Ref<AudioStreamOggVorbis>());
159
+ size_t copy_size = file_data. size () - cursor;
128
160
if (copy_size > OGG_SYNC_BUFFER_SIZE) {
129
161
copy_size = OGG_SYNC_BUFFER_SIZE;
130
162
}
@@ -201,40 +233,17 @@ Ref<AudioStreamOggVorbis> ResourceImporterOggVorbis::import_ogg_vorbis(const Str
201
233
return ogg_vorbis_stream;
202
234
}
203
235
204
- #ifdef TOOLS_ENABLED
205
-
206
- bool ResourceImporterOggVorbis::has_advanced_options () const {
207
- return true ;
208
- }
209
-
210
- void ResourceImporterOggVorbis::show_advanced_options (const String &p_path) {
211
- Ref<AudioStreamOggVorbis> ogg_stream = import_ogg_vorbis (p_path);
212
- if (ogg_stream.is_valid ()) {
213
- AudioStreamImportSettings::get_singleton ()->edit (p_path, " oggvorbisstr" , ogg_stream);
214
- }
215
- }
216
- #endif
217
-
218
- Error ResourceImporterOggVorbis::import (const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
219
- bool loop = p_options[" loop" ];
220
- float loop_offset = p_options[" loop_offset" ];
221
- double bpm = p_options[" bpm" ];
222
- int beat_count = p_options[" beat_count" ];
223
- int bar_beats = p_options[" bar_beats" ];
236
+ Ref<AudioStreamOggVorbis> ResourceImporterOggVorbis::load_from_filesystem (const String &p_path) {
237
+ Ref<FileAccess> f = FileAccess::open (p_path, FileAccess::READ);
238
+ ERR_FAIL_COND_V_MSG (f.is_null (), Ref<AudioStreamOggVorbis>(), " Cannot open file '" + p_path + " '." );
224
239
225
- Ref<AudioStreamOggVorbis> ogg_vorbis_stream = import_ogg_vorbis (p_source_file);
226
- if (ogg_vorbis_stream.is_null ()) {
227
- return ERR_CANT_OPEN;
228
- }
240
+ uint64_t len = f->get_length ();
229
241
230
- ogg_vorbis_stream->set_loop (loop);
231
- ogg_vorbis_stream->set_loop_offset (loop_offset);
232
- ogg_vorbis_stream->set_bpm (bpm);
233
- ogg_vorbis_stream->set_beat_count (beat_count);
234
- ogg_vorbis_stream->set_bar_beats (bar_beats);
242
+ Vector<uint8_t > file_data;
243
+ file_data.resize (len);
244
+ uint8_t *w = file_data.ptrw ();
235
245
236
- return ResourceSaver::save (ogg_vorbis_stream, p_save_path + " .oggvorbisstr" );
237
- }
246
+ f->get_buffer (w, len);
238
247
239
- ResourceImporterOggVorbis::ResourceImporterOggVorbis () {
248
+ return load_from_buffer (file_data);
240
249
}
0 commit comments