def generate_example(spec_filename, audio_filename):
with open(spec_filename) as f:
spec = json.load(f)
spec_duration = (spec['audio_source']['end_time'] -
spec['audio_source']['start_time'])
sample_duration = librosa.get_duration(filename=audio_filename)
if not math.isclose(spec_duration, sample_duration):
print("Warning: sample duration is {} but spec says {}".format(
sample_duration, spec_duration))
sample, sampling_rate = librosa.load(audio_filename, sr=44100)
if sampling_rate != 44100:
print("Warning: sampling rate is {}".format(sampling_rate))
return tf.train.SequenceExample(
context=tf.train.Features(feature={
'data_source': tf.train.Feature(
bytes_list=tf.train.BytesList(
value=[bytes(spec['data_source'], 'utf-8')])),
'tonic': tf.train.Feature(
int64_list=tf.train.Int64List(
value=[spec['key']['tonic']])),
'mode': tf.train.Feature(
int64_list=tf.train.Int64List(
value=[spec['key']['mode']])),
'beats': tf.train.Feature(
int64_list=tf.train.Int64List(
value=[spec['meter']['beats']])),
'beats_per_measure': tf.train.Feature(
int64_list=tf.train.Int64List(
value=[spec['meter']['beats_per_measure']])),
}),
feature_lists=tf.train.FeatureLists(feature_list={
'audio': tf.train.FeatureList(
feature=[tf.train.Feature(
float_list=tf.train.FloatList(value=sample.tolist()))]),
'melody': tf.train.FeatureList(
feature=[tf.train.Feature(
int64_list=tf.train.Int64List(value=[]))]),
'harmony': tf.train.FeatureList(
feature=[tf.train.Feature(
int64_list=tf.train.Int64List(value=[]))]),
}))
评论列表
文章目录