📄 metadata.h
字号:
void set_isrc(const char value[12]);
void set_type(unsigned value);
inline void set_pre_emphasis(bool value) { object_->pre_emphasis = value? 1 : 0; }
void set_index(unsigned i, const ::FLAC__StreamMetadata_CueSheet_Index &index);
//@@@ It's awkward but to insert/delete index points
//@@@ you must use the routines in the CueSheet class.
};
CueSheet();
//@{
/** Constructs a copy of the given object. This form
* always performs a deep copy.
*/
inline CueSheet(const CueSheet &object): Prototype(object) { }
inline CueSheet(const ::FLAC__StreamMetadata &object): Prototype(object) { }
inline CueSheet(const ::FLAC__StreamMetadata *object): Prototype(object) { }
//@}
/** Constructs an object with copy control. See
* Prototype(::FLAC__StreamMetadata *object, bool copy).
*/
inline CueSheet(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
~CueSheet();
//@{
/** Assign from another object. Always performs a deep copy. */
inline CueSheet &operator=(const CueSheet &object) { Prototype::operator=(object); return *this; }
inline CueSheet &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
inline CueSheet &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
//@}
/** Assigns an object with copy control. See
* Prototype::assign_object(::FLAC__StreamMetadata *object, bool copy).
*/
inline CueSheet &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
//@{
/** Check for equality, performing a deep compare by following pointers. */
inline bool operator==(const CueSheet &object) const { return Prototype::operator==(object); }
inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
//@}
//@{
/** Check for inequality, performing a deep compare by following pointers. */
inline bool operator!=(const CueSheet &object) const { return Prototype::operator!=(object); }
inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
//@}
const char *get_media_catalog_number() const;
FLAC__uint64 get_lead_in() const;
bool get_is_cd() const;
unsigned get_num_tracks() const;
Track get_track(unsigned i) const;
void set_media_catalog_number(const char value[128]);
void set_lead_in(FLAC__uint64 value);
void set_is_cd(bool value);
void set_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index);
//! See FLAC__metadata_object_cuesheet_track_insert_index()
bool insert_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index);
//! See FLAC__metadata_object_cuesheet_track_delete_index()
bool delete_index(unsigned track_num, unsigned index_num);
//! See FLAC__metadata_object_cuesheet_set_track()
bool set_track(unsigned i, const Track &track);
//! See FLAC__metadata_object_cuesheet_insert_track()
bool insert_track(unsigned i, const Track &track);
//! See FLAC__metadata_object_cuesheet_delete_track()
bool delete_track(unsigned i);
//! See FLAC__metadata_object_cuesheet_is_legal()
bool is_legal(bool check_cd_da_subset = false, const char **violation = 0) const;
};
/** Opaque metadata block for storing unknown types.
* This should not be used unless you know what you are doing;
* it is currently used only internally to support forward
* compatibility of metadata blocks.
*/
class FLACPP_API Unknown : public Prototype {
public:
Unknown();
//
//@{
/** Constructs a copy of the given object. This form
* always performs a deep copy.
*/
inline Unknown(const Unknown &object): Prototype(object) { }
inline Unknown(const ::FLAC__StreamMetadata &object): Prototype(object) { }
inline Unknown(const ::FLAC__StreamMetadata *object): Prototype(object) { }
//@}
/** Constructs an object with copy control. See
* Prototype(::FLAC__StreamMetadata *object, bool copy).
*/
inline Unknown(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
~Unknown();
//@{
/** Assign from another object. Always performs a deep copy. */
inline Unknown &operator=(const Unknown &object) { Prototype::operator=(object); return *this; }
inline Unknown &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
inline Unknown &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
//@}
/** Assigns an object with copy control. See
* Prototype::assign_object(::FLAC__StreamMetadata *object, bool copy).
*/
inline Unknown &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
//@{
/** Check for equality, performing a deep compare by following pointers. */
inline bool operator==(const Unknown &object) const { return Prototype::operator==(object); }
inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
//@}
//@{
/** Check for inequality, performing a deep compare by following pointers. */
inline bool operator!=(const Unknown &object) const { return Prototype::operator!=(object); }
inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
//@}
const FLAC__byte *get_data() const;
//! This form always copies \a data
bool set_data(const FLAC__byte *data, unsigned length);
bool set_data(FLAC__byte *data, unsigned length, bool copy);
};
/* \} */
/** \defgroup flacpp_metadata_level0 FLAC++/metadata.h: metadata level 0 interface
* \ingroup flacpp_metadata
*
* \brief
* Level 0 metadata iterators.
*
* See the \link flac_metadata_level0 C layer equivalent \endlink
* for more.
*
* \{
*/
//! See FLAC__metadata_get_streaminfo().
FLACPP_API bool get_streaminfo(const char *filename, StreamInfo &streaminfo);
//! See FLAC__metadata_get_tags().
FLACPP_API bool get_tags(const char *filename, VorbisComment *&tags);
FLACPP_API bool get_tags(const char *filename, VorbisComment &tags);
/* \} */
/** \defgroup flacpp_metadata_level1 FLAC++/metadata.h: metadata level 1 interface
* \ingroup flacpp_metadata
*
* \brief
* Level 1 metadata iterator.
*
* The flow through the iterator in the C++ layer is similar
* to the C layer:
* - Create a SimpleIterator instance
* - Check SimpleIterator::is_valid()
* - Call SimpleIterator::init() and check the return
* - Traverse and/or edit. Edits are written to file
* immediately.
* - Destroy the SimpleIterator instance
*
* The ownership of pointers in the C++ layer follows that in
* the C layer, i.e.
* - The objects returned by get_block() are yours to
* modify, but changes are not reflected in the FLAC file
* until you call set_block(). The objects are also
* yours to delete; they are not automatically deleted
* when passed to set_block() or insert_block_after().
*
* See the \link flac_metadata_level1 C layer equivalent \endlink
* for more.
*
* \{
*/
/** This class is a wrapper around the FLAC__metadata_simple_iterator
* structures and methods; see ::FLAC__Metadata_SimpleIterator.
*/
class FLACPP_API SimpleIterator {
public:
class FLACPP_API Status {
public:
inline Status(::FLAC__Metadata_SimpleIteratorStatus status): status_(status) { }
inline operator ::FLAC__Metadata_SimpleIteratorStatus() const { return status_; }
inline const char *as_cstring() const { return ::FLAC__Metadata_SimpleIteratorStatusString[status_]; }
protected:
::FLAC__Metadata_SimpleIteratorStatus status_;
};
SimpleIterator();
virtual ~SimpleIterator();
bool init(const char *filename, bool read_only, bool preserve_file_stats);
bool is_valid() const;
Status status();
bool is_writable() const;
bool next();
bool prev();
::FLAC__MetadataType get_block_type() const;
Prototype *get_block();
bool set_block(Prototype *block, bool use_padding = true);
bool insert_block_after(Prototype *block, bool use_padding = true);
bool delete_block(bool use_padding = true);
protected:
::FLAC__Metadata_SimpleIterator *iterator_;
void clear();
};
/* \} */
/** \defgroup flacpp_metadata_level2 FLAC++/metadata.h: metadata level 2 interface
* \ingroup flacpp_metadata
*
* \brief
* Level 2 metadata iterator.
*
* The flow through the iterator in the C++ layer is similar
* to the C layer:
* - Create a Chain instance
* - Check Chain::is_valid()
* - Call Chain::read() and check the return
* - Traverse and/or edit with an Iterator or with
* Chain::merge_padding() or Chain::sort_padding()
* - Write changes back to FLAC file with Chain::write()
* - Destroy the Chain instance
*
* The ownership of pointers in the C++ layer is slightly
* different than in the C layer, i.e.
* - The objects returned by Iterator::get_block() are NOT
* owned by the iterator and should be deleted by the
* caller when finished, BUT, when you modify the block,
* it will directly edit what's in the chain and you do
* not need to call Iterator::set_block(). However the
* changes will not be reflected in the FLAC file until
* the chain is written with Chain::write().
* - When you pass an object to Iterator::set_block(),
* Iterator::insert_block_before(), or
* Iterator::insert_block_after(), the iterator takes
* ownership of the block and it will be deleted by the
* chain.
*
* See the \link flac_metadata_level2 C layer equivalent \endlink
* for more.
*
* \{
*/
/** This class is a wrapper around the FLAC__metadata_chain
* structures and methods; see ::FLAC__Metadata_Chain.
*/
class FLACPP_API Chain {
public:
class FLACPP_API Status {
public:
inline Status(::FLAC__Metadata_ChainStatus status): status_(status) { }
inline operator ::FLAC__Metadata_ChainStatus() const { return status_; }
inline const char *as_cstring() const { return ::FLAC__Metadata_ChainStatusString[status_]; }
protected:
::FLAC__Metadata_ChainStatus status_;
};
Chain();
virtual ~Chain();
friend class Iterator;
bool is_valid() const;
Status status();
bool read(const char *filename);
bool read(FLAC__IOHandle handle, FLAC__IOCallbacks callbacks);
bool check_if_tempfile_needed(bool use_padding);
bool write(bool use_padding = true, bool preserve_file_stats = false);
bool write(bool use_padding, ::FLAC__IOHandle handle, ::FLAC__IOCallbacks callbacks);
bool write(bool use_padding, ::FLAC__IOHandle handle, ::FLAC__IOCallbacks callbacks, ::FLAC__IOHandle temp_handle, ::FLAC__IOCallbacks temp_callbacks);
void merge_padding();
void sort_padding();
protected:
::FLAC__Metadata_Chain *chain_;
virtual void clear();
};
/** This class is a wrapper around the FLAC__metadata_iterator
* structures and methods; see ::FLAC__Metadata_Iterator.
*/
class FLACPP_API Iterator {
public:
Iterator();
virtual ~Iterator();
bool is_valid() const;
void init(Chain &chain);
bool next();
bool prev();
::FLAC__MetadataType get_block_type() const;
Prototype *get_block();
bool set_block(Prototype *block);
bool delete_block(bool replace_with_padding);
bool insert_block_before(Prototype *block);
bool insert_block_after(Prototype *block);
protected:
::FLAC__Metadata_Iterator *iterator_;
virtual void clear();
};
/* \} */
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -