本文整理汇总了C++中keyfinder::AudioData类的典型用法代码示例。如果您正苦于以下问题:C++ AudioData类的具体用法?C++ AudioData怎么用?C++ AudioData使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了AudioData类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
TEST (AudioDataTest, FrameMutatorBounds) {
KeyFinder::AudioData a;
a.setChannels(2);
a.addToFrameCount(10);
ASSERT_THROW(a.getSampleByFrame(-1, 0), KeyFinder::Exception);
ASSERT_THROW(a.getSampleByFrame(10, 0), KeyFinder::Exception);
ASSERT_THROW(a.getSampleByFrame( 0,-1), KeyFinder::Exception);
ASSERT_THROW(a.getSampleByFrame( 0, 2), KeyFinder::Exception);
}
示例2:
TEST (LowPassFilterTest, InsistsOnMonophonicAudio) {
KeyFinder::AudioData a;
a.setChannels(2);
a.setFrameRate(frameRate);
a.addToSampleCount(frameRate);
KeyFinder::LowPassFilter* lpf = new KeyFinder::LowPassFilter(filterOrder, frameRate, cornerFrequency, filterFFT);
KeyFinder::Workspace w;
ASSERT_THROW(lpf->filter(a, w), KeyFinder::Exception);
a.reduceToMono();
ASSERT_NO_THROW(lpf->filter(a, w));
delete lpf;
}
示例3: keyDetectionProcess
KeyFinderResultWrapper keyDetectionProcess(const AsyncFileObject& object){
KeyFinderResultWrapper result;
result.batchRow = object.batchRow;
// initialise stream and decode file into it.
KeyFinder::AudioData* audio = NULL;
AudioFileDecoder* decoder = NULL;
try{
decoder = AudioFileDecoder::getDecoder();
}catch(KeyFinder::Exception& e){
delete decoder;
result.errorMessage = QString(e.what().c_str());
return result;
}
try{
audio = decoder->decodeFile(object.filePath);
delete decoder;
}catch(KeyFinder::Exception& e){
delete audio;
delete decoder;
result.errorMessage = QString(e.what().c_str());
return result;
}
// make audio stream monaural ahead of downsample to reduce load
audio->reduceToMono();
// downsample if necessary
if(object.prefs.getDFactor() > 1){
Downsampler* ds = Downsampler::getDownsampler(object.prefs.getDFactor(),audio->getFrameRate(),object.prefs.getLastFreq());
try{
audio = ds->downsample(audio,object.prefs.getDFactor());
}catch(KeyFinder::Exception& e){
delete audio;
delete ds;
result.errorMessage = QString(e.what().c_str());
return result;
}
delete ds;
}
KeyFinder::KeyFinder* kf = LibKeyFinderSingleton::getInstance()->getKeyFinder();
result.core = kf->findKey(*audio, object.prefs.core);
delete audio;
return result;
}
示例4:
TEST(AudioDataTest, SamplesBasic){
KeyFinder::AudioData a;
a.addToSampleCount(100);
ASSERT_EQ(100, a.getSampleCount());
// init values
for(int i=0; i<100; i++){
ASSERT_EQ(0.0, a.getSample(i));
}
a.setSample(0, 10.0);
ASSERT_EQ(10.0, a.getSample(0));
}
示例5: decodeFile
KeyFinder::AudioData* LibAvDecoder::decodeFile(const QString& filePath, const int maxDuration){
QMutexLocker codecMutexLocker(&codecMutex); // mutex the preparatory section of this method
AVCodec *codec = NULL;
AVFormatContext *fCtx = NULL;
AVCodecContext *cCtx = NULL;
AVDictionary* dict = NULL;
// convert filepath
#ifdef Q_OS_WIN
const wchar_t* filePathWc = reinterpret_cast<const wchar_t*>(filePath.constData());
const char* filePathCh = utf16_to_utf8(filePathWc);
#else
QByteArray encodedPath = QFile::encodeName(filePath);
const char* filePathCh = encodedPath;
#endif
// open file
int openInputResult = avformat_open_input(&fCtx, filePathCh, NULL, NULL);
if(openInputResult != 0){
throw KeyFinder::Exception(GuiStrings::getInstance()->libavCouldNotOpenFile(openInputResult).toLocal8Bit().constData());
}
if(avformat_find_stream_info(fCtx, NULL) < 0){
av_close_input_file(fCtx);
throw KeyFinder::Exception(GuiStrings::getInstance()->libavCouldNotFindStreamInformation().toLocal8Bit().constData());
}
int audioStream = -1;
for(int i=0; i<(signed)fCtx->nb_streams; i++){
if(fCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO){
audioStream = i;
break;
}
}
if(audioStream == -1){
av_close_input_file(fCtx);
throw KeyFinder::Exception(GuiStrings::getInstance()->libavCouldNotFindAudioStream().toLocal8Bit().constData());
}
// Determine duration
int durationSeconds = fCtx->duration / AV_TIME_BASE;
int durationMinutes = durationSeconds / 60;
// First condition is a hack for bizarre overestimation of some MP3s
if(durationMinutes < 720 && durationSeconds > maxDuration * 60){
av_close_input_file(fCtx);
throw KeyFinder::Exception(GuiStrings::getInstance()->durationExceedsPreference(durationMinutes, durationSeconds % 60, maxDuration).toLocal8Bit().constData());
}
// Determine stream codec
cCtx = fCtx->streams[audioStream]->codec;
codec = avcodec_find_decoder(cCtx->codec_id);
if(codec == NULL){
av_close_input_file(fCtx);
throw KeyFinder::Exception(GuiStrings::getInstance()->libavUnsupportedCodec().toLocal8Bit().constData());
}
// Open codec
int codecOpenResult = avcodec_open2(cCtx, codec, &dict);
if(codecOpenResult < 0){
av_close_input_file(fCtx);
throw KeyFinder::Exception(GuiStrings::getInstance()->libavCouldNotOpenCodec(codec->long_name, codecOpenResult).toLocal8Bit().constData());
}
ReSampleContext* rsCtx = av_audio_resample_init(
cCtx->channels, cCtx->channels,
cCtx->sample_rate, cCtx->sample_rate,
AV_SAMPLE_FMT_S16, cCtx->sample_fmt,
0, 0, 0, 0);
if(rsCtx == NULL){
avcodec_close(cCtx);
av_close_input_file(fCtx);
throw KeyFinder::Exception(GuiStrings::getInstance()->libavCouldNotCreateResampleContext().toLocal8Bit().constData());
}
qDebug("Decoding %s (%s, %d)", filePathCh, av_get_sample_fmt_name(cCtx->sample_fmt), cCtx->sample_rate);
codecMutexLocker.unlock();
// Prep buffer
KeyFinder::AudioData *audio = new KeyFinder::AudioData();
audio->setFrameRate(cCtx->sample_rate);
audio->setChannels(cCtx->channels);
// Decode stream
AVPacket avpkt;
int badPacketCount = 0;
int badPacketThreshold = 100;
while(true){
av_init_packet(&avpkt);
if(av_read_frame(fCtx, &avpkt) < 0)
break;
if(avpkt.stream_index == audioStream){
try{
int result = decodePacket(cCtx, rsCtx, &avpkt, audio);
if(result != 0){
if(badPacketCount < badPacketThreshold){
badPacketCount++;
}else{
avcodec_close(cCtx);
av_close_input_file(fCtx);
//.........这里部分代码省略.........
示例6: decodeFile
KeyFinder::AudioData* LibAvDecoder::decodeFile(const QString& filePath){
QMutexLocker codecMutexLocker(&codecMutex); // mutex the preparatory section of this method
AVCodec *codec = NULL;
AVFormatContext *fCtx = NULL;
AVCodecContext *cCtx = NULL;
AVDictionary* dict = NULL;
// convert filepath
#ifdef Q_OS_WIN
const wchar_t* filePathWc = reinterpret_cast<const wchar_t*>(filePath.constData());
const char* filePathCh = utf16_to_utf8(filePathWc);
#else
QByteArray encodedPath = QFile::encodeName(filePath);
const char* filePathCh = encodedPath;
#endif
// open file
int openInputResult = avformat_open_input(&fCtx, filePathCh, NULL, NULL);
if(openInputResult != 0){
std::ostringstream ss;
ss << "Could not open audio file (" << openInputResult << ")";
throw KeyFinder::Exception(ss.str());
}
if(avformat_find_stream_info(fCtx,NULL) < 0){
throw KeyFinder::Exception("Could not find stream information");
}
int audioStream = -1;
for(int i=0; i<(signed)fCtx->nb_streams; i++){
if(fCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO){
audioStream = i;
break;
}
}
if(audioStream == -1){
throw KeyFinder::Exception("Could not find an audio stream");
}
// Determine stream codec
cCtx = fCtx->streams[audioStream]->codec;
codec = avcodec_find_decoder(cCtx->codec_id);
if(codec == NULL){
throw KeyFinder::Exception("Audio stream has unsupported codec");
}
// Open codec
int codecOpenResult = avcodec_open2(cCtx, codec, &dict);
if(codecOpenResult < 0){
std::ostringstream ss;
ss << "Could not open audio codec: " << codec->long_name << " (" << codecOpenResult << ")";
throw KeyFinder::Exception(ss.str());
}
ReSampleContext* rsCtx = av_audio_resample_init(
cCtx->channels, cCtx->channels,
cCtx->sample_rate, cCtx->sample_rate,
AV_SAMPLE_FMT_S16, cCtx->sample_fmt,
0, 0, 0, 0);
if(rsCtx == NULL){
throw KeyFinder::Exception("Could not create ReSampleContext");
}
qDebug("Decoding %s (%s, %d)", filePathCh, av_get_sample_fmt_name(cCtx->sample_fmt), cCtx->sample_rate);
codecMutexLocker.unlock();
// Prep buffer
KeyFinder::AudioData *audio = new KeyFinder::AudioData();
audio->setFrameRate(cCtx->sample_rate);
audio->setChannels(cCtx->channels);
// Decode stream
AVPacket avpkt;
int badPacketCount = 0;
while(true){
av_init_packet(&avpkt);
if(av_read_frame(fCtx, &avpkt) < 0)
break;
if(avpkt.stream_index == audioStream){
try{
int result = decodePacket(cCtx, rsCtx, &avpkt, audio);
if(result != 0){
if(badPacketCount < 100){
badPacketCount++;
}else{
throw KeyFinder::Exception("100 bad packets");
}
}
}catch(KeyFinder::Exception& e){
throw e;
}
}
av_free_packet(&avpkt);
}
codecMutexLocker.relock();
audio_resample_close(rsCtx);
int codecCloseResult = avcodec_close(cCtx);
if(codecCloseResult < 0){
//.........这里部分代码省略.........
示例7: while
TEST (AudioDataTest, SliceFromBack) {
KeyFinder::AudioData a;
a.setChannels(1);
a.setFrameRate(1);
KeyFinder::AudioData* b = NULL;
KeyFinder::AudioData* nullPtr = NULL;
ASSERT_THROW(b = a.sliceSamplesFromBack(1), KeyFinder::Exception);
ASSERT_EQ(nullPtr, b);
a.addToFrameCount(10);
ASSERT_THROW(b = a.sliceSamplesFromBack(11), KeyFinder::Exception);
ASSERT_EQ(nullPtr, b);
a.resetIterators();
float v = 0;
while (a.writeIteratorWithinUpperBound()) {
a.setSampleAtWriteIterator(v);
a.advanceWriteIterator();
v += 1.0;
}
ASSERT_NO_THROW(b = a.sliceSamplesFromBack(5));
ASSERT_NE(nullPtr, b);
ASSERT_EQ(5, a.getSampleCount());
ASSERT_EQ(5, b->getSampleCount());
ASSERT_FLOAT_EQ(5.0, b->getSample(0));
ASSERT_FLOAT_EQ(9.0, b->getSample(4));
delete b;
}