📄 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 + -