record audio duration and encoding in tacotron2 job

This commit is contained in:
Brandon Thomas committed 2024-04-14 13:25:25 -04:00
1 parent cb4bca73ee
commit a567caad45
3 files changed
+26 -5

No files matched your search

@@ -20,11 +20,9 @@ pub struct InsertMediaFileArgs<'a> {
pub maybe_mime_type: Option<&'a str>,
pub file_size_bytes: u64,
pub duration_millis: u64,
pub sha256_checksum: &'a str,
// TODO: Media duration.
//pub duration_millis: u64,
pub maybe_duration_millis: Option<u64>,
pub maybe_audio_codec_name: Option<&'a str>,
pub public_bucket_directory_hash: &'a str,
pub maybe_public_bucket_prefix: Option<&'a str>,
@@ -90,6 +88,9 @@ SET
maybe_mime_type = ?,
file_size_bytes = ?,
maybe_duration_millis = ?,
maybe_audio_encoding = ?,
checksum_sha2 = ?,
public_bucket_directory_hash = ?,
@@ -124,6 +125,9 @@ SET
args.maybe_mime_type,
args.file_size_bytes,
args.maybe_duration_millis,
args.maybe_audio_codec_name,
args.sha256_checksum,
args.public_bucket_directory_hash,
@@ -11,6 +11,7 @@ use errors::AnyhowResult;
use filesys::check_file_exists::check_file_exists;
use filesys::safe_delete_temp_directory::safe_delete_temp_directory;
use filesys::safe_delete_temp_file::safe_delete_temp_file;
use media::decode_basic_audio_info::decode_basic_audio_file_info;
use migration::text_to_speech::get_tts_model_for_run_inference_migration::TtsModelForRunInferenceMigrationWrapper;
use mysql_queries::column_types::vocoder_type::VocoderType;
use mysql_queries::queries::generic_inference::job::list_available_generic_inference_jobs::AvailableInferenceJob;
@@ -309,6 +310,17 @@ async fn process_job_with_cleanup(
safe_delete_temp_file(&output_metadata_fs_path);
info!("Decoding audio info...");
// NB: The metadata file emitted by tacotron2 hasn't been recording the audio duration recently. (Perhaps it never worked?)
let mut maybe_audio_duration_millis = file_metadata.duration_millis.clone();
let mut maybe_audio_codec_name = None;
if let Ok(audio_info) = decode_basic_audio_file_info(&output_audio_fs_path, Some("audio/wav"), None) {
maybe_audio_duration_millis = audio_info.duration_millis;
maybe_audio_codec_name = audio_info.codec_name;
}
// ==================== UPLOAD FILES AND SAVE RECORD ==================== //
let inference_result = upload_results(UploadResultArgs {
@@ -319,6 +331,8 @@ async fn process_job_with_cleanup(
work_temp_dir,
pretrained_vocoder,
file_metadata: &file_metadata,
maybe_audio_duration_millis,
maybe_audio_codec_name: maybe_audio_codec_name.as_deref(),
output_audio_fs_path: &output_audio_fs_path,
output_spectrogram_fs_path: &output_spectrogram_fs_path,
upload_as_media_file: model_dependencies.upload_as_media_file,
@@ -38,6 +38,8 @@ pub struct UploadResultArgs<'a> {
// Outputs
pub file_metadata: &'a FileMetadata,
pub maybe_audio_duration_millis: Option<u64>,
pub maybe_audio_codec_name: Option<&'a str>,
pub output_audio_fs_path: &'a Path,
pub output_spectrogram_fs_path: &'a Path,
@@ -107,7 +109,8 @@ async fn upload_as_media_file(args: UploadResultArgs<'_>) -> Result<ResultDetail
job: &args.job,
maybe_mime_type: Some(&MIME_TYPE),
file_size_bytes: args.file_metadata.file_size_bytes,
duration_millis: args.file_metadata.duration_millis.unwrap_or(0),
maybe_duration_millis: args.maybe_audio_duration_millis,
maybe_audio_codec_name: args.maybe_audio_codec_name,
sha256_checksum: &file_checksum,
public_bucket_directory_hash: result_bucket_location.get_object_hash(),
maybe_public_bucket_prefix: Some(BUCKET_FILE_PREFIX),