本文整理汇总了C++中BlockFile::ReadData方法的典型用法代码示例。如果您正苦于以下问题:C++ BlockFile::ReadData方法的具体用法?C++ BlockFile::ReadData怎么用?C++ BlockFile::ReadData使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BlockFile
的用法示例。
在下文中一共展示了BlockFile::ReadData方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Read
bool Sequence::Read(samplePtr buffer, sampleFormat format,
SeqBlock * b, sampleCount start, sampleCount len) const
{
wxASSERT(b);
wxASSERT(start >= 0);
wxASSERT(start + len <= b->len);
BlockFile *f = b->f;
int result = f->ReadData(buffer, format, start, len);
if (result != len) {
// TODO err
printf(_("Expected to read %d samples, got %d samples.\n"),
len, result);
}
return true;
}
示例2: ConvertToSampleFormat
bool Sequence::ConvertToSampleFormat(sampleFormat format)
{
if (format == mSampleFormat)
return true;
if (mBlock->Count() == 0) {
mSampleFormat = format;
return true;
}
sampleFormat oldFormat = mSampleFormat;
mSampleFormat = format;
for (unsigned int i = 0; i < mBlock->Count(); i++) {
BlockFile *oldBlock = mBlock->Item(i)->f;
sampleCount len = mBlock->Item(i)->len;
if (!oldBlock->IsAlias()) {
BlockFile *newBlock =
mDirManager->NewBlockFile(mSummary->totalSummaryBytes);
samplePtr buffer1 = NewSamples(len, oldFormat);
samplePtr buffer2 = NewSamples(len, mSampleFormat);
oldBlock->ReadData(buffer1, oldFormat, 0, len);
CopySamples(buffer1, oldFormat,
buffer2, mSampleFormat, len);
newBlock->WriteData(buffer2, mSampleFormat, len);
mBlock->Item(i)->f = newBlock;
mDirManager->Deref(oldBlock);
UpdateSummaries(buffer2, mBlock->Item(i), len);
DeleteSamples(buffer2);
DeleteSamples(buffer1);
}
}
return true;
}
示例3: Read
bool Sequence::Read(samplePtr buffer, sampleFormat format,
SeqBlock * b, sampleCount start, sampleCount len) const
{
wxASSERT(b);
wxASSERT(start >= 0);
wxASSERT(start + len <= b->f->GetLength());
BlockFile *f = b->f;
int result = f->ReadData(buffer, format, start, len);
if (result != len)
{
wxLogError(wxT("Expected to read %d samples, got %d samples.\n"), len, result);
if (result < 0)
result = 0;
ClearSamples(buffer, format, result, len-result);
}
return true;
}
示例4: ConvertToSampleFormat
bool Sequence::ConvertToSampleFormat(sampleFormat format)
{
if (format == mSampleFormat)
return true;
if (mBlock->Count() == 0) {
mSampleFormat = format;
return true;
}
sampleFormat oldFormat = mSampleFormat;
mSampleFormat = format;
for (unsigned int i = 0; i < mBlock->Count(); i++) {
SeqBlock *b = mBlock->Item(i);
BlockFile *oldBlock = b->f;
sampleCount len = b->f->GetLength();
if (!oldBlock->IsAlias()) {
BlockFile *newBlock;
samplePtr buffer1 = NewSamples(len, oldFormat);
samplePtr buffer2 = NewSamples(len, mSampleFormat);
oldBlock->ReadData(buffer1, oldFormat, 0, len);
CopySamples(buffer1, oldFormat,
buffer2, mSampleFormat, len);
newBlock = mDirManager->NewSimpleBlockFile(buffer2, len, mSampleFormat);
mBlock->Item(i)->f = newBlock;
mDirManager->Deref(oldBlock);
DeleteSamples(buffer2);
DeleteSamples(buffer1);
}
}
return true;
}
示例5: RemoveDependencies
// Given a project and a list of aliased files that should no
// longer be external dependencies (selected by the user), replace
// all of those alias block files with disk block files.
void RemoveDependencies(AudacityProject *project,
AliasedFileArray *aliasedFiles)
{
DirManager *dirManager = project->GetDirManager();
ProgressDialog *progress =
new ProgressDialog(_("Removing Dependencies"),
_("Copying audio data into project..."));
int updateResult = eProgressSuccess;
// Hash aliasedFiles based on their full paths and
// count total number of bytes to process.
AliasedFileHash aliasedFileHash;
wxLongLong totalBytesToProcess = 0;
unsigned int i;
for (i = 0; i < aliasedFiles->GetCount(); i++) {
totalBytesToProcess += aliasedFiles->Item(i).mByteCount;
wxString fileNameStr = aliasedFiles->Item(i).mFileName.GetFullPath();
aliasedFileHash[fileNameStr] = &aliasedFiles->Item(i);
}
BlockArray blocks;
GetAllSeqBlocks(project, &blocks);
const sampleFormat format = project->GetDefaultFormat();
ReplacedBlockFileHash blockFileHash;
wxLongLong completedBytes = 0;
for (i = 0; i < blocks.GetCount(); i++) {
BlockFile *f = blocks[i]->f;
if (f->IsAlias() && (blockFileHash.count(f) == 0))
{
// f is an alias block we have not yet processed.
AliasBlockFile *aliasBlockFile = (AliasBlockFile *)f;
wxFileName fileName = aliasBlockFile->GetAliasedFileName();
wxString fileNameStr = fileName.GetFullPath();
if (aliasedFileHash.count(fileNameStr) == 0)
// This aliased file was not selected to be replaced. Skip it.
continue;
// Convert it from an aliased file to an actual file in the project.
unsigned int len = aliasBlockFile->GetLength();
samplePtr buffer = NewSamples(len, format);
f->ReadData(buffer, format, 0, len);
BlockFile *newBlockFile =
dirManager->NewSimpleBlockFile(buffer, len, format);
DeleteSamples(buffer);
// Update our hash so we know what block files we've done
blockFileHash[f] = newBlockFile;
// Update the progress bar
completedBytes += SAMPLE_SIZE(format) * len;
updateResult = progress->Update(completedBytes, totalBytesToProcess);
if (updateResult != eProgressSuccess)
break;
}
}
// Above, we created a SimpleBlockFile contained in our project
// to go with each AliasBlockFile that we wanted to migrate.
// However, that didn't actually change any references to these
// blockfiles in the Sequences, so we do that next...
ReplaceBlockFiles(project, blockFileHash);
// Subtract one from reference count of new block files; they're
// now all referenced the proper number of times by the Sequences
ReplacedBlockFileHash::iterator it;
for( it = blockFileHash.begin(); it != blockFileHash.end(); ++it )
{
BlockFile *f = it->second;
dirManager->Deref(f);
}
delete progress;
}
示例6: RemoveDependencies
// Given a project and a list of aliased files that should no
// longer be self-contained (selected by the user), replace
// all of those alias block files with disk block files
bool RemoveDependencies(AudacityProject *project,
AliasedFileArray *aliasedFiles)
{
DirManager *dirManager = project->GetDirManager();
GetActiveProject()->ProgressShow(_("Removing Dependencies"),
_("Copying audio data into project..."));
AliasedFileHash aliasedFileHash;
ReplacedBlockFileHash blockFileHash;
double totalBytesToProcess = 0.0;
double completedBytes = 0.0;
unsigned int i;
for(i=0; i<aliasedFiles->GetCount(); i++) {
totalBytesToProcess += (double)aliasedFiles->Item(i).bytes;
wxString fileNameStr = aliasedFiles->Item(i).fileName.GetFullPath();
aliasedFileHash[fileNameStr] = &aliasedFiles->Item(i);
}
sampleFormat format = project->GetDefaultFormat();
BlockArray blocks;
GetAllSeqBlocks(project, &blocks);
for(i=0; i<blocks.GetCount(); i++) {
BlockFile *f = blocks[i]->f;
if (f->IsAlias() && !blockFileHash[f]) {
AliasBlockFile *aliasBlockFile = (AliasBlockFile *)f;
wxFileName fileName = aliasBlockFile->GetAliasedFile();
wxString fileNameStr = fileName.GetFullPath();
if (!aliasedFileHash[fileNameStr])
continue;
// Convert it from an aliased file to an actual file in the project
unsigned int len = aliasBlockFile->GetLength();
samplePtr buffer = NewSamples(len, format);
f->ReadData(buffer, format, 0, len);
BlockFile *newBlockFile =
dirManager->NewSimpleBlockFile(buffer, len, format);
DeleteSamples(buffer);
// Update our hash so we know what block files we've done
blockFileHash[f] = newBlockFile;
// Update the progress bar
completedBytes += (double)SAMPLE_SIZE(format) * len;
int progressValue =
(int)(completedBytes * 1000.0 / totalBytesToProcess);
GetActiveProject()->ProgressUpdate(progressValue);
}
}
// Above, we created a SimpleBlockFile contained in our project
// to go with each AliasBlockFile that we wanted to migrate.
// However, that didn't actually change any references to these
// blockfiles in the Sequences, so we do that next...
ReplaceBlockFiles(project, blockFileHash);
// Subtract one from reference count of new block files; they're
// now all referenced the proper number of times by the Sequences
ReplacedBlockFileHash::iterator it;
for( it = blockFileHash.begin(); it != blockFileHash.end(); ++it )
{
BlockFile *f = it->second;
dirManager->Deref(f);
}
GetActiveProject()->ProgressHide();
return true;
}