📄 metadata.cpp
字号:
FLAC__uint64 CueSheet::get_lead_in() const
{
FLAC__ASSERT(is_valid());
return object_->data.cue_sheet.lead_in;
}
bool CueSheet::get_is_cd() const
{
FLAC__ASSERT(is_valid());
return object_->data.cue_sheet.is_cd? true : false;
}
unsigned CueSheet::get_num_tracks() const
{
FLAC__ASSERT(is_valid());
return object_->data.cue_sheet.num_tracks;
}
CueSheet::Track CueSheet::get_track(unsigned i) const
{
FLAC__ASSERT(is_valid());
FLAC__ASSERT(i < object_->data.cue_sheet.num_tracks);
return Track(object_->data.cue_sheet.tracks + i);
}
void CueSheet::set_media_catalog_number(const char value[128])
{
FLAC__ASSERT(is_valid());
FLAC__ASSERT(0 != value);
memcpy(object_->data.cue_sheet.media_catalog_number, value, 128);
object_->data.cue_sheet.media_catalog_number[128] = '\0';
}
void CueSheet::set_lead_in(FLAC__uint64 value)
{
FLAC__ASSERT(is_valid());
object_->data.cue_sheet.lead_in = value;
}
void CueSheet::set_is_cd(bool value)
{
FLAC__ASSERT(is_valid());
object_->data.cue_sheet.is_cd = value;
}
void CueSheet::set_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index)
{
FLAC__ASSERT(is_valid());
FLAC__ASSERT(track_num < object_->data.cue_sheet.num_tracks);
FLAC__ASSERT(index_num < object_->data.cue_sheet.tracks[track_num].num_indices);
object_->data.cue_sheet.tracks[track_num].indices[index_num] = index;
}
bool CueSheet::insert_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index)
{
FLAC__ASSERT(is_valid());
FLAC__ASSERT(track_num < object_->data.cue_sheet.num_tracks);
FLAC__ASSERT(index_num <= object_->data.cue_sheet.tracks[track_num].num_indices);
return (bool)::FLAC__metadata_object_cuesheet_track_insert_index(object_, track_num, index_num, index);
}
bool CueSheet::delete_index(unsigned track_num, unsigned index_num)
{
FLAC__ASSERT(is_valid());
FLAC__ASSERT(track_num < object_->data.cue_sheet.num_tracks);
FLAC__ASSERT(index_num < object_->data.cue_sheet.tracks[track_num].num_indices);
return (bool)::FLAC__metadata_object_cuesheet_track_delete_index(object_, track_num, index_num);
}
bool CueSheet::set_track(unsigned i, const CueSheet::Track &track)
{
FLAC__ASSERT(is_valid());
FLAC__ASSERT(i < object_->data.cue_sheet.num_tracks);
// We can safely const_cast since copy=true
return (bool)::FLAC__metadata_object_cuesheet_set_track(object_, i, const_cast< ::FLAC__StreamMetadata_CueSheet_Track*>(track.get_track()), /*copy=*/true);
}
bool CueSheet::insert_track(unsigned i, const CueSheet::Track &track)
{
FLAC__ASSERT(is_valid());
FLAC__ASSERT(i <= object_->data.cue_sheet.num_tracks);
// We can safely const_cast since copy=true
return (bool)::FLAC__metadata_object_cuesheet_insert_track(object_, i, const_cast< ::FLAC__StreamMetadata_CueSheet_Track*>(track.get_track()), /*copy=*/true);
}
bool CueSheet::delete_track(unsigned i)
{
FLAC__ASSERT(is_valid());
FLAC__ASSERT(i < object_->data.cue_sheet.num_tracks);
return (bool)::FLAC__metadata_object_cuesheet_delete_track(object_, i);
}
bool CueSheet::is_legal(bool check_cd_da_subset, const char **violation) const
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_object_cuesheet_is_legal(object_, check_cd_da_subset, violation);
}
//
// Unknown
//
Unknown::Unknown():
Prototype(FLAC__metadata_object_new(FLAC__METADATA_TYPE_APPLICATION), /*copy=*/false)
{ }
Unknown::~Unknown()
{ }
const FLAC__byte *Unknown::get_data() const
{
FLAC__ASSERT(is_valid());
return object_->data.application.data;
}
bool Unknown::set_data(const FLAC__byte *data, unsigned length)
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_object_application_set_data(object_, (FLAC__byte*)data, length, true);
}
bool Unknown::set_data(FLAC__byte *data, unsigned length, bool copy)
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_object_application_set_data(object_, data, length, copy);
}
// ============================================================
//
// Level 0
//
// ============================================================
FLACPP_API bool get_streaminfo(const char *filename, StreamInfo &streaminfo)
{
FLAC__ASSERT(0 != filename);
::FLAC__StreamMetadata object;
if(::FLAC__metadata_get_streaminfo(filename, &object)) {
streaminfo = object;
return true;
}
else
return false;
}
FLACPP_API bool get_tags(const char *filename, VorbisComment *&tags)
{
FLAC__ASSERT(0 != filename);
::FLAC__StreamMetadata *object;
tags = 0;
if(::FLAC__metadata_get_tags(filename, &object)) {
tags = new VorbisComment(object, /*copy=*/false);
return true;
}
else
return false;
}
FLACPP_API bool get_tags(const char *filename, VorbisComment &tags)
{
FLAC__ASSERT(0 != filename);
::FLAC__StreamMetadata *object;
if(::FLAC__metadata_get_tags(filename, &object)) {
tags.assign(object, /*copy=*/false);
return true;
}
else
return false;
}
// ============================================================
//
// Level 1
//
// ============================================================
SimpleIterator::SimpleIterator():
iterator_(::FLAC__metadata_simple_iterator_new())
{ }
SimpleIterator::~SimpleIterator()
{
clear();
}
void SimpleIterator::clear()
{
if(0 != iterator_)
FLAC__metadata_simple_iterator_delete(iterator_);
iterator_ = 0;
}
bool SimpleIterator::init(const char *filename, bool read_only, bool preserve_file_stats)
{
FLAC__ASSERT(0 != filename);
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_simple_iterator_init(iterator_, filename, read_only, preserve_file_stats);
}
bool SimpleIterator::is_valid() const
{
return 0 != iterator_;
}
SimpleIterator::Status SimpleIterator::status()
{
FLAC__ASSERT(is_valid());
return Status(::FLAC__metadata_simple_iterator_status(iterator_));
}
bool SimpleIterator::is_writable() const
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_simple_iterator_is_writable(iterator_);
}
bool SimpleIterator::next()
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_simple_iterator_next(iterator_);
}
bool SimpleIterator::prev()
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_simple_iterator_prev(iterator_);
}
::FLAC__MetadataType SimpleIterator::get_block_type() const
{
FLAC__ASSERT(is_valid());
return ::FLAC__metadata_simple_iterator_get_block_type(iterator_);
}
Prototype *SimpleIterator::get_block()
{
FLAC__ASSERT(is_valid());
return local::construct_block(::FLAC__metadata_simple_iterator_get_block(iterator_));
}
bool SimpleIterator::set_block(Prototype *block, bool use_padding)
{
FLAC__ASSERT(0 != block);
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_simple_iterator_set_block(iterator_, block->object_, use_padding);
}
bool SimpleIterator::insert_block_after(Prototype *block, bool use_padding)
{
FLAC__ASSERT(0 != block);
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_simple_iterator_insert_block_after(iterator_, block->object_, use_padding);
}
bool SimpleIterator::delete_block(bool use_padding)
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_simple_iterator_delete_block(iterator_, use_padding);
}
// ============================================================
//
// Level 2
//
// ============================================================
Chain::Chain():
chain_(::FLAC__metadata_chain_new())
{ }
Chain::~Chain()
{
clear();
}
void Chain::clear()
{
if(0 != chain_)
FLAC__metadata_chain_delete(chain_);
chain_ = 0;
}
bool Chain::is_valid() const
{
return 0 != chain_;
}
Chain::Status Chain::status()
{
FLAC__ASSERT(is_valid());
return Status(::FLAC__metadata_chain_status(chain_));
}
bool Chain::read(const char *filename)
{
FLAC__ASSERT(0 != filename);
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_chain_read(chain_, filename);
}
bool Chain::read(FLAC__IOHandle handle, ::FLAC__IOCallbacks callbacks)
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_chain_read_with_callbacks(chain_, handle, callbacks);
}
bool Chain::check_if_tempfile_needed(bool use_padding)
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_chain_check_if_tempfile_needed(chain_, use_padding);
}
bool Chain::write(bool use_padding, bool preserve_file_stats)
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_chain_write(chain_, use_padding, preserve_file_stats);
}
bool Chain::write(bool use_padding, ::FLAC__IOHandle handle, ::FLAC__IOCallbacks callbacks)
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_chain_write_with_callbacks(chain_, use_padding, handle, callbacks);
}
bool Chain::write(bool use_padding, ::FLAC__IOHandle handle, ::FLAC__IOCallbacks callbacks, ::FLAC__IOHandle temp_handle, ::FLAC__IOCallbacks temp_callbacks)
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_chain_write_with_callbacks_and_tempfile(chain_, use_padding, handle, callbacks, temp_handle, temp_callbacks);
}
void Chain::merge_padding()
{
FLAC__ASSERT(is_valid());
::FLAC__metadata_chain_merge_padding(chain_);
}
void Chain::sort_padding()
{
FLAC__ASSERT(is_valid());
::FLAC__metadata_chain_sort_padding(chain_);
}
Iterator::Iterator():
iterator_(::FLAC__metadata_iterator_new())
{ }
Iterator::~Iterator()
{
clear();
}
void Iterator::clear()
{
if(0 != iterator_)
FLAC__metadata_iterator_delete(iterator_);
iterator_ = 0;
}
bool Iterator::is_valid() const
{
return 0 != iterator_;
}
void Iterator::init(Chain &chain)
{
FLAC__ASSERT(is_valid());
FLAC__ASSERT(chain.is_valid());
::FLAC__metadata_iterator_init(iterator_, chain.chain_);
}
bool Iterator::next()
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_iterator_next(iterator_);
}
bool Iterator::prev()
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_iterator_prev(iterator_);
}
::FLAC__MetadataType Iterator::get_block_type() const
{
FLAC__ASSERT(is_valid());
return ::FLAC__metadata_iterator_get_block_type(iterator_);
}
Prototype *Iterator::get_block()
{
FLAC__ASSERT(is_valid());
Prototype *block = local::construct_block(::FLAC__metadata_iterator_get_block(iterator_));
if(0 != block)
block->set_reference(true);
return block;
}
bool Iterator::set_block(Prototype *block)
{
FLAC__ASSERT(0 != block);
FLAC__ASSERT(is_valid());
bool ret = (bool)::FLAC__metadata_iterator_set_block(iterator_, block->object_);
if(ret) {
block->set_reference(true);
delete block;
}
return ret;
}
bool Iterator::delete_block(bool replace_with_padding)
{
FLAC__ASSERT(is_valid());
return (bool)::FLAC__metadata_iterator_delete_block(iterator_, replace_with_padding);
}
bool Iterator::insert_block_before(Prototype *block)
{
FLAC__ASSERT(0 != block);
FLAC__ASSERT(is_valid());
bool ret = (bool)::FLAC__metadata_iterator_insert_block_before(iterator_, block->object_);
if(ret) {
block->set_reference(true);
delete block;
}
return ret;
}
bool Iterator::insert_block_after(Prototype *block)
{
FLAC__ASSERT(0 != block);
FLAC__ASSERT(is_valid());
bool ret = (bool)::FLAC__metadata_iterator_insert_block_after(iterator_, block->object_);
if(ret) {
block->set_reference(true);
delete block;
}
return ret;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -