摘自: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 Universitytb2332@columbia.eduCode to access fields of a MSD HDF5 song file.This is part of the Million Song Dataset project fromLabROSA (Columbia University) and The Echo Nest.Copyright 2011, Thierry Bertin-MahieuxThis program is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong 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 128class HDF5Getters {private:// fileH5File* h5file;// the 3 groupsGroup GROUP_METADATA;Group GROUP_ANALYSIS;Group GROUP_MUSICBRAINZ;// utility functionsstatic 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:// constructorHDF5Getters(const char filename[]);// destructor~HDF5Getters();// get the number of songsint get_num_songs() const;// membersdouble 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 Universitytb2332@columbia.eduCode to access fields of a MSD HDF5 song file.This is part of the Million Song Dataset project fromLabROSA (Columbia University) and The Echo Nest.Copyright 2011, Thierry Bertin-MahieuxThis program is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong 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 128HDF5Getters::HDF5Getters(const char filename[]) {// open the fileconst H5std_string h5filename(filename);h5file = new H5File(h5filename, H5F_ACC_RDONLY);// create the 3 groups' namesconst H5std_string NAME_GROUP_METADATA("metadata");const H5std_string NAME_GROUP_ANALYSIS("analysis");const H5std_string NAME_GROUP_MUSICBRAINZ("musicbrainz");// open the 3 groupsGROUP_METADATA = h5file->openGroup( NAME_GROUP_METADATA );GROUP_ANALYSIS = h5file->openGroup( NAME_GROUP_ANALYSIS );GROUP_MUSICBRAINZ = h5file->openGroup( NAME_GROUP_MUSICBRAINZ );}/** Destructor*/
HDF5Getters::~HDF5Getters() {// GroupsGROUP_METADATA.close();GROUP_ANALYSIS.close();GROUP_MUSICBRAINZ.close();// Fileh5file->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 dimensionsfilespace.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 dimensionsint 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 readdataset.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 dimensionsint 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 valueschar * 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 HDF5in_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 Universitytb2332@columbia.eduDemo code to display all fields of a given MSD HDF5 song file.This is part of the Million Song Dataset project fromLabROSA (Columbia University) and The Echo Nest.Copyright 2011, Thierry Bertin-MahieuxThis program is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong 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 wrapperHDF5Getters getters(argv[1]);// init valuesdouble 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 offx64\Release\ReadHDF5.exe data\TRAAAAW128F429D538.h5pause

摘自一个MILLION SONG DATASET里的一段读取基于HDF5文件格式的歌曲信息相关推荐

  1. 写一个APP控制第三方播放器播放,以及获取正在播放的歌曲信息

    最近遇到这么一个需求,就是在自己的应用中控制第三方播放器播放,以及获取正在播放的歌曲信息,包括名字,歌手,专辑,显示出来.一开始觉得很简单,但实际上遇到了不少的麻烦,最终实现了两种方案,读者可根据自己 ...

  2. 音乐推荐数据集Million Song Dataset

    最近在看<集体智慧编程>,打算做音乐推荐相关的研究.几经探索,终于找到一个满足自己需求的公开数据集:Million Song Dataset(MSD). Million Song是一个开放 ...

  3. 一个整型数组里除了两个数字之外,其他的数字都出现了两次

    题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次 解答: 我们从头到尾异或数组中的每个数字,那么最终的结果是两个只出现一次数字的异或的结果,由于两个数字不一样,那么异或的结果肯定不为0, ...

  4. C# - list数据填充到Dataset里

    C# - list<>数据填充到Dataset里 publicstatic DataSet ConvertToDataSet<T>(IList<T> list) { ...

  5. 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字

    package demo;import java.util.Arrays;/** 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.*/ //num ...

  6. 在新手机里如何找回上一个手机便签里的内容

    为了保证手机的流畅性和续航能力,使用智能手机的人,差不多每两三年都要更换手机.在换手机的时候,我们手机上的数据也要及时转移到新手机上.像手机便签这种软件,存储了我们大量信息,换手机转移信息的时候,大概 ...

  7. iOS 7 跳过的一个坑又掉里了 - 图片渲染模式

    iOS 7 跳过的一个坑又掉里了 - 图片渲染模式 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作 ...

  8. java将多个文件写入到一个文件流中再有规律的取出_编写java程序,往一个txt文件里写入学生的基本信息,然后再读出这些信息并打印出来,最后把该文件拷贝到指...

    满意答案 azonyb 2014.02.18 采纳率:59%    等级:12 已帮助:13223人 import java.io.BufferedInputStream; import java.i ...

  9. html 合并文件到excel,Excel2013把多个文件合并到一个Excel文档里方法图解

    日常工作当中,会产生很多Excel文档,每当需要整理的时候又很难归类.查询.这个时候就需要把诺干个Excel文档,合并到一个Excel文档里.一个Excel文档对应一个Sheet工作表,方便查询.归类 ...

最新文章

  1. Angular模块/服务/MVVM
  2. 2014年JAVA省赛B组---第四题---大衍数列
  3. POJ 3050 Hopscotch
  4. 判断某个值是否存在指定枚举类中
  5. sas程序matlab,MATLAB/SAS学习笔记
  6. EXCEL 2016常用知识--Excel基础操作
  7. 数据仓库详细介绍(九.数据质量)流程与工具
  8. java实现小写金额转换大写金额
  9. 机器人学中一些常用的三角函数公式
  10. 个人的OKR该怎么写?
  11. 农夫山泉2面面试经历
  12. Google新一代操作系统Fuchsia详解
  13. 电容0.1uF和104有什么区别?
  14. html 水印插件,jquery图片水印插件
  15. java中整数的整数次方_数值的整数次方
  16. You_Probably_Dont_Need_RAC
  17. 关于解决'\u'开头的字符串转中文的方法
  18. 计算机毕业设计(42)java小程序毕设作品之小说电子书阅读小程序系统
  19. 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定 解决方法
  20. 基于人工蜂群优化的BP神经网络(分类应用) - 附代码

热门文章

  1. 【学习笔记】Ubuntu双系统+搭建个人服务器
  2. 7-1 用格里高利公式求给定精度的PI值 (15分)
  3. 算法设计与分析大作业 关于核算检测次数的问题研究 (分治策略 二分法 实例生活运用)
  4. C/C++程序员面试指南
  5. 心电信号调理电路设计
  6. 我花了一个五一终于搞懂了OpenLDAP
  7. 【Windows网络调试笔记】如何打开Windows(Win10为例)的telnet客户端?
  8. 安装mavros时,运行 wstool update -t src -j8 时出错解决
  9. android .trace 文件,android - 了解Android应用程序的.trace文件 - SO中文参考 - www.soinside.com...
  10. HackTheBox-Jeeves