摘自:http://labrosa.ee.columbia.edu/millionsong/
直接上代码,小修改了一下,保证了在VS2015中可以编译通过,注意使用DLL方式链接HDF5库时,需要在工程的宏定义中定义H5_BUILT_AS_DYNAMIC_LIB,否则会找不到定义。
This is correct, define H5_BUILT_AS_DYNAMIC_LIB to link with dynamic libs. This
is a new requirement with 1.8.16 in order to publish the static and shared
libs in one binary. The examples worked because you likely used the CMake
script which knows how to import CMake built binaries.
Because you are using VS without CMake, you need to add the define for shared
libs.
hdf5_getters.h
/**
Thierry Bertin-Mahieux (2010) Columbia University
tb2332@columbia.edu
Code to access fields of a MSD HDF5 song file.
This is part of the Million Song Dataset project from
LabROSA (Columbia University) and The Echo Nest.
Copyright 2011, Thierry Bertin-Mahieux
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <string>
#include <vector>
#include "H5Cpp.h"
using namespace H5;
#define uint unsigned int
// max characters of a field
#define FIELDLEN 128
class HDF5Getters {
private:
// file
H5File* h5file;
// the 3 groups
Group GROUP_METADATA;
Group GROUP_ANALYSIS;
Group GROUP_MUSICBRAINZ;
// utility functions
static double get_member_double(const Group& group,
const std::string name_member);
static int get_member_int(const Group& group,
const std::string name_member);
static std::string get_member_str(const Group& group,
const std::string name_member,
uint buffer_length=1024);
static void get_member_double_array(const Group& group,
const std::string name_member,
std::vector<double>& result);
static void get_member_double_12_array(const Group& group,
const std::string name_member,
std::vector<double>& result);
static void get_member_str_array(const Group& group,
const std::string name_member,
std::vector<std::string>& result,
uint word_length=1026);
public:
// constructor
HDF5Getters(const char filename[]);
// destructor
~HDF5Getters();
// get the number of songs
int get_num_songs() const;
// members
double get_artist_familiarity() const;
double get_artist_hotttnesss() const;
std::string get_artist_id() const;
std::string get_artist_mbid() const;
int get_artist_playmeid() const;
int get_artist_7digitalid() const;
double get_artist_latitude() const;
double get_artist_longitude() const;
std::string get_artist_location() const;
std::string get_artist_name() const;
std::string get_release() const;
int get_release_7digitalid() const;
std::string get_song_id() const;
double get_song_hotttnesss() const;
std::string get_title() const;
int get_track_7digitalid() const;
double get_analysis_sample_rate() const;
std::string get_audio_md5() const;
double get_danceability() const;
double get_duration() const;
double get_end_of_fade_in() const;
double get_energy() const;
int get_key() const;
double get_key_confidence() const;
double get_loudness() const;
int get_mode() const;
double get_mode_confidence() const;
double get_start_of_fade_out() const;
double get_tempo() const;
int get_time_signature() const;
double get_time_signature_confidence() const;
std::string get_track_id() const;
int get_year() const;
void get_artist_terms_freq(std::vector<double>&) const;
void get_artist_terms_weight(std::vector<double>&) const;
void get_segments_start(std::vector<double>&) const;
void get_segments_confidence(std::vector<double>&) const;
void get_segments_loudness_max(std::vector<double>&) const;
void get_segments_loudness_max_time(std::vector<double>&) const;
void get_segments_loudness_start(std::vector<double>&) const;
void get_sections_start(std::vector<double>&) const;
void get_sections_confidence(std::vector<double>&) const;
void get_beats_start(std::vector<double>&) const;
void get_beats_confidence(std::vector<double>&) const;
void get_bars_start(std::vector<double>&) const;
void get_bars_confidence(std::vector<double>&) const;
void get_tatums_start(std::vector<double>&) const;
void get_tatums_confidence(std::vector<double>&) const;
void get_artist_mbtags_count(std::vector<double>&) const;
void get_segments_timbre(std::vector<double>&) const;
void get_segments_pitches(std::vector<double>&) const;
void get_artist_terms(std::vector<std::string>&) const;
void get_artist_mbtags(std::vector<std::string>&) const;
void get_similar_artists(std::vector<std::string>&) const;
};
hdf5_getters.cc
/**
Thierry Bertin-Mahieux (2010) Columbia University
tb2332@columbia.edu
Code to access fields of a MSD HDF5 song file.
This is part of the Million Song Dataset project from
LabROSA (Columbia University) and The Echo Nest.
Copyright 2011, Thierry Bertin-Mahieux
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __HDF5_GETTERS__
#define __HDF5_GETTERS__
#include <iostream>
#include <string>
#include <cstring>
#include "H5Cpp.h"
using namespace H5;
#include "hdf5_hl.h"
#include "hdf5_getters.h"
// max characters of a field
//#define FIELDLEN 128
HDF5Getters::HDF5Getters(const char filename[]) {
// open the file
const H5std_string h5filename(filename);
h5file = new H5File(h5filename, H5F_ACC_RDONLY);
// create the 3 groups' names
const H5std_string NAME_GROUP_METADATA("metadata");
const H5std_string NAME_GROUP_ANALYSIS("analysis");
const H5std_string NAME_GROUP_MUSICBRAINZ("musicbrainz");
// open the 3 groups
GROUP_METADATA = h5file->openGroup( NAME_GROUP_METADATA );
GROUP_ANALYSIS = h5file->openGroup( NAME_GROUP_ANALYSIS );
GROUP_MUSICBRAINZ = h5file->openGroup( NAME_GROUP_MUSICBRAINZ );
}
/*
* Destructor
*/
HDF5Getters::~HDF5Getters() {
// Groups
GROUP_METADATA.close();
GROUP_ANALYSIS.close();
GROUP_MUSICBRAINZ.close();
// File
h5file->close();
delete h5file;
}
/*
* Get Artist familiarity
*/
double HDF5Getters::get_artist_familiarity() const {
return get_member_double( GROUP_METADATA, "artist_familiarity");
}
/*
* Get Artist hotttnesss
*/
double HDF5Getters::get_artist_hotttnesss() const {
return get_member_double( GROUP_METADATA, "artist_hotttnesss");
}
/*
* Get Artist ID
*/
std::string HDF5Getters::get_artist_id() const {
return get_member_str( GROUP_METADATA, "artist_id");
}
/*
* Get Artist musicbrainz ID.
*/
std::string HDF5Getters::get_artist_mbid() const {
return get_member_str( GROUP_METADATA, "artist_mbid");
}
/*
* Get Artist musicbrainz Playme ID.
*/
int HDF5Getters::get_artist_playmeid() const {
return get_member_int( GROUP_METADATA, "artist_playmeid");
}
/*
* Get Artist 7digital ID.
*/
int HDF5Getters::get_artist_7digitalid() const {
return get_member_int( GROUP_METADATA, "artist_7digitalid");
}
/*
* Get Artist latitude
*/
double HDF5Getters::get_artist_latitude() const {
return get_member_double( GROUP_METADATA, "artist_latitude");
}
/*
* Get Artist longitude
*/
double HDF5Getters::get_artist_longitude() const {
return get_member_double( GROUP_METADATA, "artist_longitude");
}
/*
* Get Artist location
*/
std::string HDF5Getters::get_artist_location() const {
return get_member_str( GROUP_METADATA, "artist_location");
}
/*
* Get Artist name
*/
std::string HDF5Getters::get_artist_name() const {
return get_member_str( GROUP_METADATA, "artist_name");
}
/*
* Get Release
*/
std::string HDF5Getters::get_release() const {
return get_member_str( GROUP_METADATA, "release");
}
/*
* Get Release 7digital ID.
*/
int HDF5Getters::get_release_7digitalid() const {
return get_member_int( GROUP_METADATA, "release_7digitalid");
}
/*
* Get Song ID
*/
std::string HDF5Getters::get_song_id() const {
return get_member_str( GROUP_METADATA, "song_id");
}
/*
* Get Song hotttnesss
*/
double HDF5Getters::get_song_hotttnesss() const {
return get_member_double( GROUP_METADATA, "song_hotttnesss");
}
/*
* Get Song ID
*/
std::string HDF5Getters::get_title() const {
return get_member_str( GROUP_METADATA, "title");
}
/*
* Get Track 7digital ID.
*/
int HDF5Getters::get_track_7digitalid() const {
return get_member_int( GROUP_METADATA, "track_7digitalid");
}
/*
* Get analysis sample rate
*/
double HDF5Getters::get_analysis_sample_rate() const {
return get_member_double( GROUP_ANALYSIS, "analysis_sample_rate");
}
/*
* Get Audio MD5
*/
std::string HDF5Getters::get_audio_md5() const {
return get_member_str( GROUP_ANALYSIS, "audio_md5", 32);
}
/*
* Get danceability
*/
double HDF5Getters::get_danceability() const {
return get_member_double( GROUP_ANALYSIS, "danceability");
}
/*
* Get duration
*/
double HDF5Getters::get_duration() const {
return get_member_double( GROUP_ANALYSIS, "duration");
}
/*
* Get end of fade in
*/
double HDF5Getters::get_end_of_fade_in() const {
return get_member_double( GROUP_ANALYSIS, "end_of_fade_in");
}
/*
* Get energy
*/
double HDF5Getters::get_energy() const {
return get_member_double( GROUP_ANALYSIS, "energy");
}
/*
* Get Key
*/
int HDF5Getters::get_key() const {
return get_member_int( GROUP_ANALYSIS, "key");
}
/*
* Get key confidence
*/
double HDF5Getters::get_key_confidence() const {
return get_member_double( GROUP_ANALYSIS, "key_confidence");
}
/*
* Get loudness
*/
double HDF5Getters::get_loudness() const {
return get_member_double( GROUP_ANALYSIS, "loudness");
}
/*
* Get mode
*/
int HDF5Getters::get_mode() const {
return get_member_int( GROUP_ANALYSIS, "mode");
}
/*
* Get mode confidence
*/
double HDF5Getters::get_mode_confidence() const {
return get_member_double( GROUP_ANALYSIS, "mode_confidence");
}
/*
* Get tempo
*/
double HDF5Getters::get_tempo() const {
return get_member_double( GROUP_ANALYSIS, "tempo");
}
/*
* Get start of fade out
*/
double HDF5Getters::get_start_of_fade_out() const {
return get_member_double( GROUP_ANALYSIS, "start_of_fade_out");
}
/*
* Get time signature
*/
int HDF5Getters::get_time_signature() const {
return get_member_int( GROUP_ANALYSIS, "time_signature");
}
/*
* Get time signature confidence
*/
double HDF5Getters::get_time_signature_confidence() const {
return get_member_double( GROUP_ANALYSIS, "time_signature_confidence");
}
/*
* Get Track ID
*/
std::string HDF5Getters::get_track_id() const {
return get_member_str( GROUP_ANALYSIS, "track_id");
}
/*
* Get year
*/
int HDF5Getters::get_year() const {
return get_member_int( GROUP_MUSICBRAINZ, "year");
}
/*
* Get artist terms freq.
*/
void HDF5Getters::get_artist_terms_freq(std::vector<double>& result) const {
get_member_double_array( GROUP_METADATA,
"artist_terms_freq",
result);
}
/*
* Get artist terms weight.
*/
void HDF5Getters::get_artist_terms_weight(std::vector<double>& result) const {
get_member_double_array( GROUP_METADATA,
"artist_terms_weight",
result);
}
/*
* Get segments start.
*/
void HDF5Getters::get_segments_start(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"segments_start",
result);
}
/*
* Get segments confidence.
*/
void HDF5Getters::get_segments_confidence(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"segments_confidence",
result);
}
/*
* Get segments loudness max.
*/
void HDF5Getters::get_segments_loudness_max(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"segments_loudness_max",
result);
}
/*
* Get segments loudness max time.
*/
void HDF5Getters::get_segments_loudness_max_time(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"segments_loudness_max_time",
result);
}
/*
* Get segments loudness max time.
*/
void HDF5Getters::get_segments_loudness_start(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"segments_loudness_start",
result);
}
/*
* Get sections start.
*/
void HDF5Getters::get_sections_start(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"sections_start",
result);
}
/*
* Get sections confidence.
*/
void HDF5Getters::get_sections_confidence(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"sections_confidence",
result);
}
/*
* Get beats start.
*/
void HDF5Getters::get_beats_start(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"beats_start",
result);
}
/*
* Get beats confidence.
*/
void HDF5Getters::get_beats_confidence(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"beats_confidence",
result);
}
/*
* Get bars start.
*/
void HDF5Getters::get_bars_start(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"bars_start",
result);
}
/*
* Get bars confidence.
*/
void HDF5Getters::get_bars_confidence(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"bars_confidence",
result);
}
/*
* Get tatums start.
*/
void HDF5Getters::get_tatums_start(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"tatums_start",
result);
}
/*
* Get tatums confidence.
*/
void HDF5Getters::get_tatums_confidence(std::vector<double>& result) const {
get_member_double_array( GROUP_ANALYSIS,
"tatums_confidence",
result);
}
/**
* Get artist musicbrainz tags count.
*/
void HDF5Getters::get_artist_mbtags_count(std::vector<double>& result) const
{
get_member_double_array( GROUP_MUSICBRAINZ,
"artist_mbtags_count",
result);
}
/*
* Get segments timbre.
*/
void HDF5Getters::get_segments_timbre(std::vector<double>& result) const {
get_member_double_12_array( GROUP_ANALYSIS,
"segments_timbre",
result);
}
/*
* Get segments pitches.
*/
void HDF5Getters::get_segments_pitches(std::vector<double>& result) const {
get_member_double_12_array( GROUP_ANALYSIS,
"segments_pitches",
result);
}
/*
* Get artist terms.
*/
void HDF5Getters::get_artist_terms(std::vector<std::string>& result) const {
get_member_str_array( GROUP_METADATA,
"artist_terms",
result);
}
/*
* Get artist mbtags.
*/
void HDF5Getters::get_artist_mbtags(std::vector<std::string>& result) const {
get_member_str_array( GROUP_MUSICBRAINZ,
"artist_mbtags",
result);
}
/*
* Get similar artists.
*/
void HDF5Getters::get_similar_artists(std::vector<std::string>& result) const {
get_member_str_array( GROUP_METADATA,
"similar_artists",
result,
20);
}
/***************** UTITITY FUNCTIONS *******************/
/*
* To get a double member from a given group;
* dataset name is always 'songs'
*/
double HDF5Getters::get_member_double(const Group& group, const std::string name_member) {
const H5std_string MEMBER( name_member );
const CompType mtype( sizeof(double) );
mtype.insertMember( MEMBER, 0, PredType::NATIVE_DOUBLE);
DataSet dataset( group.openDataSet( "songs" ));
double data_out = -1.;
dataset.read( &data_out, mtype );
dataset.close();
return data_out;
}
/*
* To get a int member from a given group;
* dataset name is always 'songs'
*/
int HDF5Getters::get_member_int(const Group& group, const std::string name_member) {
const H5std_string MEMBER( name_member );
const CompType mtype( sizeof(int) );
mtype.insertMember( MEMBER, 0, PredType::NATIVE_INT);
DataSet dataset( group.openDataSet( "songs" ));
int data_out = -1;
dataset.read( &data_out, mtype );
dataset.close();
return data_out;
}
/*
* To get a string member from a given group;
* dataset name is always 'songs'
*/
std::string HDF5Getters::get_member_str(const Group& group,
const std::string name_member,
uint buffer_length) {
const H5std_string MEMBER( name_member );
DataSet dataset( group.openDataSet( "songs" ));
// Figuring out the proper string type is a mess.
CompType datasetcomptype(dataset);
int memberidx = datasetcomptype.getMemberIndex( MEMBER );
DataType dtype = datasetcomptype.getMemberDataType( memberidx );
const CompType mtype( (size_t) 1024 );
mtype.insertMember( MEMBER, 0, dtype);
// Ideally we'd figure out the proper size!
// Otherwise, let's have a buffer that is always big enough...
char* buf = new char[buffer_length + 1];
dataset.read( (void*) buf, mtype );
dataset.close();
buf[buffer_length] = '\0'; // HACK, some strings are not null-terminated.
return std::string(buf);
}
/*
* To get a member which is an array of double;
* result put in 'result';
* dataset name is always 'songs'.
*/
void HDF5Getters::get_member_double_array(const Group& group,
const std::string name_member,
std::vector<double>& result)
{
const H5std_string MEMBER( name_member );
DataSet dataset( group.openDataSet( MEMBER ));
hsize_t data_mem_size = dataset.getInMemDataSize();
if (data_mem_size == 0) {
dataset.close();
return;
}
DataSpace filespace = dataset.getSpace();
hsize_t dims[2]; // dataset dimensions
filespace.getSimpleExtentDims( dims );
int n_entries = dims[0];
double* values = new double[n_entries];
FloatType floattype(dataset);
dataset.read((void*) values, floattype);
dataset.close();
result.clear();
for (int k = 0; k < n_entries; ++k)
{
result.push_back(values[k]);
}
}
/*
* To get a member which is an array of array of size 12
* (used for pitch and timbre features);
* data is flatten segments first (i.e. first 12 values are from the
* fist segments, etc).
* result put in 'result';
*/
void HDF5Getters::get_member_double_12_array(const Group& group,
const std::string name_member,
std::vector<double>& result)
{
const H5std_string MEMBER( name_member );
DataSet dataset( group.openDataSet( MEMBER ));
hsize_t data_mem_size = dataset.getInMemDataSize();
if (data_mem_size == 0) {
dataset.close();
return;
}
FloatType floattype(dataset);
DataSpace filespace = dataset.getSpace();
hsize_t dims[2]; // dataset dimensions
int rank = filespace.getSimpleExtentDims( dims );
DataSpace mspace1(rank, dims);
int n_values = dims[0];
auto values = new double[n_values][12]; // buffer for dataset to be read
dataset.read(values, floattype, mspace1, filespace);
dataset.close();
result.clear();
for (int row = 0; row < n_values; ++row)
for (int col = 0; col < 12; ++col) {
result.push_back(values[row][col]);
}
}
/*
* To get a member which is an array of strings.
* (used for tags for instance);
* result put in 'result';
*/
void HDF5Getters::get_member_str_array(const Group& group,
const std::string name_member,
std::vector<std::string>& result,
uint word_length)
{
const H5std_string MEMBER( name_member );
DataSet dataset( group.openDataSet( MEMBER ));
hsize_t data_mem_size = dataset.getInMemDataSize();
if (data_mem_size == 0) {
dataset.close();
return;
}
DataSpace filespace = dataset.getSpace();
hsize_t dims[2]; // dataset dimensions
int rank = filespace.getSimpleExtentDims( dims );
DataSpace mspace1(rank, dims);
uint n_values = dims[0];
char* values = new char[n_values * word_length];
StrType stringtype(dataset);
dataset.read(values, stringtype, mspace1, filespace);
// We split the values
char * pch;
char * in_values = values;
const char* delims = "\0";
pch = strtok (in_values, delims);
uint counter = 0;
result.clear();
while (counter < n_values)
{
result.push_back(std::string(pch));
counter += 1;
if (counter == n_values)
break;
// hack to remove the padding introduced by HDF5
in_values += strlen(pch);
while(*in_values == '\0')
++in_values;
pch = strtok (in_values, delims);
}
dataset.close();
}
#endif // __HDF5_GETTERS__
hdf5_display.cc
/*
Thierry Bertin-Mahieux (2010) Columbia University
tb2332@columbia.edu
Demo code to display all fields of a given MSD HDF5 song file.
This is part of the Million Song Dataset project from
LabROSA (Columbia University) and The Echo Nest.
Copyright 2011, Thierry Bertin-Mahieux
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <vector>
using namespace std;
#include "hdf5_getters.h"
/*
* Help menu
*/
void help_menu(void) {
cout << "hdf5_display" << endl;
cout << " by T. Bertin-Mahieux (2011) Columbia U." << endl;
cout << " tb2332@columbia.edu" << endl;
}
int main(int argc, const char* argv[]) {
// help menu?
if (argc < 2 || strcmp(argv[1], "help") == 0 || strcmp(argv[1], "-help") == 0)
{
help_menu();
return 0;
}
// create wrapper
HDF5Getters getters(argv[1]);
// init values
double dval;
std::string sval;
int ival;
vector<double> dvec;
vector<string> svec;
// print everything!
dval = getters.get_analysis_sample_rate();
cout << "analysis_sample_rate: " << dval << endl;
ival = getters.get_artist_7digitalid();
cout << "artist_7digitalid: " << ival << endl;
dval = getters.get_artist_familiarity();
cout << "artist_familiarity: " << dval << endl;
dval = getters.get_artist_hotttnesss();
cout << "artist_hotttnesss: " << dval << endl;
sval = getters.get_artist_id();
cout << "artist_id: " << sval << endl;
dval = getters.get_artist_latitude();
cout << "artist_latitude: " << dval << endl;
sval = getters.get_artist_location();
cout << "artist_location: " << sval << endl;
dval = getters.get_artist_longitude();
cout << "artist_longitude: " << dval << endl;
sval = getters.get_artist_mbid();
cout << "artist_mbid: " << sval << endl;
getters.get_artist_mbtags(svec);
cout << "artist_mbtags: shape = (" << svec.size() << ",)" << endl;
getters.get_artist_mbtags_count(dvec);
cout << "artist_mbtags_count: shape = (" << dvec.size() << ",)" << endl;
sval = getters.get_artist_name();
cout << "artist_name: " << sval << endl;
ival = getters.get_artist_playmeid();
cout << "artist_playmeid: " << ival << endl;
getters.get_artist_terms(svec);
cout << "artist_terms: shape = (" << svec.size() << ",)" << endl;
getters.get_artist_terms_freq(dvec);
cout << "artist_terms_freq: shape = (" << dvec.size() << ",)" << endl;
getters.get_artist_terms_weight(dvec);
cout << "artist_terms_weight: shape = (" << dvec.size() << ",)" << endl;
sval = getters.get_audio_md5();
cout << "audio_md5: " << sval << endl;
getters.get_bars_confidence(dvec);
cout << "bars_confidence: shape = (" << dvec.size() << ",)" << endl;
getters.get_bars_start(dvec);
cout << "bars_start: shape = (" << dvec.size() << ",)" << endl;
getters.get_beats_confidence(dvec);
cout << "beats_confidence: shape = (" << dvec.size() << ",)" << endl;
getters.get_beats_start(dvec);
cout << "beats_start: shape = (" << dvec.size() << ",)" << endl;
dval = getters.get_danceability();
cout << "danceability: " << dval << endl;
dval = getters.get_duration();
cout << "duration: " << dval << endl;
dval = getters.get_end_of_fade_in();
cout << "end_of_fade_in: " << dval << endl;
dval = getters.get_energy();
cout << "energy: " << dval << endl;
ival = getters.get_key();
cout << "key: " << ival << endl;
dval = getters.get_key_confidence();
cout << "key_confidence: " << dval << endl;
dval = getters.get_loudness();
cout << "loudness: " << dval << endl;
ival = getters.get_mode();
cout << "mode: " << ival << endl;
dval = getters.get_mode_confidence();
cout << "mode_confidence: " << dval << endl;
sval = getters.get_release();
cout << "release: " << sval << endl;
ival = getters.get_release_7digitalid();
cout << "release_7digitalid: " << ival << endl;
getters.get_sections_confidence(dvec);
cout << "sections_confidence: shape = (" << dvec.size() << ",)" << endl;
getters.get_sections_start(dvec);
cout << "sections_start: shape = (" << dvec.size() << ",)" << endl;
getters.get_segments_confidence(dvec);
cout << "segments_confidence: shape = (" << dvec.size() << ",)" << endl;
getters.get_segments_loudness_max(dvec);
cout << "segments_loudness_max: shape = (" << dvec.size() << ",)" << endl;
getters.get_segments_loudness_max_time(dvec);
cout << "segments_loudness_max_time: shape = (" << dvec.size() << ",)" << endl;
getters.get_segments_loudness_start(dvec);
cout << "segments_loudness_start: shape = (" << dvec.size() << ",)" << endl;
getters.get_segments_pitches(dvec);
cout << "segments_pitches: shape = (" << dvec.size() / 12 << ", 12)" << endl;
getters.get_segments_start(dvec);
cout << "segments_start: shape = (" << dvec.size() << ",)" << endl;
getters.get_segments_timbre(dvec);
cout << "segments_timbre: shape = (" << dvec.size() / 12 << ", 12)" << endl;
getters.get_similar_artists(svec);
cout << "similar_artists: shape = (" << svec.size() << ",)" << endl;
dval = getters.get_song_hotttnesss();
cout << "song_hotttnesss: " << dval << endl;
sval = getters.get_song_id();
cout << "song_id: " << sval << endl;
dval = getters.get_start_of_fade_out();
cout << "start_of_fade_out: " << dval << endl;
getters.get_tatums_confidence(dvec);
cout << "tatums_confidence: shape = (" << dvec.size() << ",)" << endl;
getters.get_tatums_start(dvec);
cout << "tatums_start: shape = (" << dvec.size() << ",)" << endl;
dval = getters.get_tempo();
cout << "tempo: " << dval << endl;
ival = getters.get_time_signature();
cout << "time_signature: " << ival << endl;
dval = getters.get_time_signature_confidence();
cout << "time_signature_confidence: " << dval << endl;
sval = getters.get_title();
cout << "title: " << sval << endl;
ival = getters.get_track_7digitalid();
cout << "track_7digitalid: " << ival << endl;
sval = getters.get_track_id();
cout << "track_id: " << sval << endl;
ival = getters.get_year();
cout << "year: " << ival << endl;
return 0; // succesfully terminated
}
测试:
@echo off
x64\Release\ReadHDF5.exe data\TRAAAAW128F429D538.h5
pause