@ -81,18 +81,50 @@ void ResourceImporterOggVorbis::get_import_options(const String &p_path, List<Im
r_options - > push_back ( ImportOption ( PropertyInfo ( Variant : : INT , " bar_beats " , PROPERTY_HINT_RANGE , " 2,32,or_greater " ) , 4 ) ) ;
}
Ref < AudioStreamOggVorbis > ResourceImporterOggVorbis : : import_ogg_vorbis ( const String & p_path ) {
Ref < FileAccess > f = FileAccess : : open ( p_path , FileAccess : : READ ) ;
ERR_FAIL_COND_V_MSG ( f . is_null ( ) , Ref < AudioStreamOggVorbis > ( ) , " Cannot open file ' " + p_path + " '. " ) ;
# ifdef TOOLS_ENABLED
bool ResourceImporterOggVorbis : : has_advanced_options ( ) const {
return true ;
}
void ResourceImporterOggVorbis : : show_advanced_options ( const String & p_path ) {
Ref < AudioStreamOggVorbis > ogg_stream = load_from_file ( p_path ) ;
if ( ogg_stream . is_valid ( ) ) {
AudioStreamImportSettings : : get_singleton ( ) - > edit ( p_path , " oggvorbisstr " , ogg_stream ) ;
}
}
# endif
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 ) {
bool loop = p_options [ " loop " ] ;
float loop_offset = p_options [ " loop_offset " ] ;
double bpm = p_options [ " bpm " ] ;
int beat_count = p_options [ " beat_count " ] ;
int bar_beats = p_options [ " bar_beats " ] ;
uint64_t len = f - > get_length ( ) ;
Ref < AudioStreamOggVorbis > ogg_vorbis_stream = load_from_file ( p_source_file ) ;
if ( ogg_vorbis_stream . is_null ( ) ) {
return ERR_CANT_OPEN ;
}
Vector < uint8_t > file_data ;
file_data . resize ( len ) ;
uint8_t * w = file_data . ptrw ( ) ;
ogg_vorbis_stream - > set_loop ( loop ) ;
ogg_vorbis_stream - > set_loop_offset ( loop_offset ) ;
ogg_vorbis_stream - > set_bpm ( bpm ) ;
ogg_vorbis_stream - > set_beat_count ( beat_count ) ;
ogg_vorbis_stream - > set_bar_beats ( bar_beats ) ;
return ResourceSaver : : save ( ogg_vorbis_stream , p_save_path + " .oggvorbisstr " ) ;
}
f - > get_buffer ( w , len ) ;
ResourceImporterOggVorbis : : ResourceImporterOggVorbis ( ) {
}
void ResourceImporterOggVorbis : : _bind_methods ( ) {
ClassDB : : bind_static_method ( " ResourceImporterOggVorbis " , D_METHOD ( " load_from_buffer " , " buffer " ) , & ResourceImporterOggVorbis : : load_from_buffer ) ;
ClassDB : : bind_static_method ( " ResourceImporterOggVorbis " , D_METHOD ( " load_from_file " , " path " ) , & ResourceImporterOggVorbis : : load_from_file ) ;
}
Ref < AudioStreamOggVorbis > ResourceImporterOggVorbis : : load_from_buffer ( const Vector < uint8_t > & file_data ) {
Ref < AudioStreamOggVorbis > ogg_vorbis_stream ;
ogg_vorbis_stream . instantiate ( ) ;
@ -114,7 +146,7 @@ Ref<AudioStreamOggVorbis> ResourceImporterOggVorbis::import_ogg_vorbis(const Str
err = ogg_sync_check ( & sync_state ) ;
ERR_FAIL_COND_V_MSG ( err ! = 0 , Ref < AudioStreamOggVorbis > ( ) , " Ogg sync error " + itos ( err ) ) ;
while ( ogg_sync_pageout ( & sync_state , & page ) ! = 1 ) {
if ( cursor > = len ) {
if ( cursor > = size_t( file_data . size ( ) ) ) {
done = true ;
break ;
}
@ -123,8 +155,8 @@ Ref<AudioStreamOggVorbis> ResourceImporterOggVorbis::import_ogg_vorbis(const Str
char * sync_buf = ogg_sync_buffer ( & sync_state , OGG_SYNC_BUFFER_SIZE ) ;
err = ogg_sync_check ( & sync_state ) ;
ERR_FAIL_COND_V_MSG ( err ! = 0 , Ref < AudioStreamOggVorbis > ( ) , " Ogg sync error " + itos ( err ) ) ;
ERR_FAIL_COND_V ( cursor > len , Ref < AudioStreamOggVorbis > ( ) ) ;
size_t copy_size = len - cursor ;
ERR_FAIL_COND_V ( cursor > size_t( file_data . size ( ) ) , Ref < AudioStreamOggVorbis > ( ) ) ;
size_t copy_size = file_data. size ( ) - cursor ;
if ( copy_size > OGG_SYNC_BUFFER_SIZE ) {
copy_size = OGG_SYNC_BUFFER_SIZE ;
}
@ -201,40 +233,8 @@ Ref<AudioStreamOggVorbis> ResourceImporterOggVorbis::import_ogg_vorbis(const Str
return ogg_vorbis_stream ;
}
# ifdef TOOLS_ENABLED
bool ResourceImporterOggVorbis : : has_advanced_options ( ) const {
return true ;
}
void ResourceImporterOggVorbis : : show_advanced_options ( const String & p_path ) {
Ref < AudioStreamOggVorbis > ogg_stream = import_ogg_vorbis ( p_path ) ;
if ( ogg_stream . is_valid ( ) ) {
AudioStreamImportSettings : : get_singleton ( ) - > edit ( p_path , " oggvorbisstr " , ogg_stream ) ;
}
}
# endif
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 ) {
bool loop = p_options [ " loop " ] ;
float loop_offset = p_options [ " loop_offset " ] ;
double bpm = p_options [ " bpm " ] ;
int beat_count = p_options [ " beat_count " ] ;
int bar_beats = p_options [ " bar_beats " ] ;
Ref < AudioStreamOggVorbis > ogg_vorbis_stream = import_ogg_vorbis ( p_source_file ) ;
if ( ogg_vorbis_stream . is_null ( ) ) {
return ERR_CANT_OPEN ;
}
ogg_vorbis_stream - > set_loop ( loop ) ;
ogg_vorbis_stream - > set_loop_offset ( loop_offset ) ;
ogg_vorbis_stream - > set_bpm ( bpm ) ;
ogg_vorbis_stream - > set_beat_count ( beat_count ) ;
ogg_vorbis_stream - > set_bar_beats ( bar_beats ) ;
return ResourceSaver : : save ( ogg_vorbis_stream , p_save_path + " .oggvorbisstr " ) ;
}
ResourceImporterOggVorbis : : ResourceImporterOggVorbis ( ) {
Ref < AudioStreamOggVorbis > ResourceImporterOggVorbis : : load_from_file ( const String & p_path ) {
Vector < uint8_t > file_data = FileAccess : : get_file_as_bytes ( p_path ) ;
ERR_FAIL_COND_V_MSG ( file_data . is_empty ( ) , Ref < AudioStreamOggVorbis > ( ) , " Cannot open file ' " + p_path + " '. " ) ;
return load_from_buffer ( file_data ) ;
}