You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
2.0 KiB
128 lines
2.0 KiB
/* MPEG/WAVE Sound library
|
|
|
|
(C) 1997 by Jung woo-jae */
|
|
|
|
// Mpegtoraw.cc
|
|
// Server which get mpeg format and put raw format.
|
|
|
|
|
|
#include "mpegsound.h"
|
|
#include "synthesis.h"
|
|
#include "dump.h"
|
|
#include "../frame/audioFrame.h"
|
|
|
|
#include <iostream>
|
|
|
|
using namespace std;
|
|
|
|
Mpegtoraw::Mpegtoraw(MpegAudioStream* mpegAudioStream,
|
|
MpegAudioHeader* mpegAudioHeader) {
|
|
|
|
this->mpegAudioStream=mpegAudioStream;
|
|
this->mpegAudioHeader=mpegAudioHeader;
|
|
|
|
this->lOutputStereo=true;
|
|
setStereo(true);
|
|
setDownSample(false);
|
|
|
|
dump=new Dump();
|
|
synthesis=new Synthesis();
|
|
initialize();
|
|
|
|
}
|
|
|
|
Mpegtoraw::~Mpegtoraw() {
|
|
|
|
delete synthesis;
|
|
delete dump;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Mpegtoraw::setStereo(int flag) {
|
|
lWantStereo=flag;
|
|
}
|
|
|
|
void Mpegtoraw::setDownSample(int flag) {
|
|
lDownSample=flag;
|
|
}
|
|
|
|
int Mpegtoraw::getStereo() {
|
|
return lWantStereo;
|
|
}
|
|
|
|
int Mpegtoraw::getDownSample() {
|
|
return lDownSample;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Convert mpeg to raw
|
|
// Mpeg headder class
|
|
void Mpegtoraw::initialize() {
|
|
|
|
|
|
|
|
layer3initialize();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Convert mpeg to raw
|
|
int Mpegtoraw::decode(AudioFrame* audioFrame) {
|
|
int back=true;
|
|
|
|
this->audioFrame=audioFrame;
|
|
if (audioFrame->getSize() < RAWDATASIZE) {
|
|
cout << "audioFrame needs at least:"<<RAWDATASIZE<<" size"<<endl;
|
|
exit(0);
|
|
}
|
|
|
|
audioFrame->clearrawdata();
|
|
synthesis->clearrawdata();
|
|
|
|
int layer=mpegAudioHeader->getLayer();
|
|
this->lOutputStereo=lWantStereo & mpegAudioHeader->getInputstereo();
|
|
|
|
if (mpegAudioHeader->getProtection()==false) {
|
|
mpegAudioStream->getbyte();
|
|
mpegAudioStream->getbyte();
|
|
}
|
|
switch(layer) {
|
|
case 3:
|
|
extractlayer3();
|
|
break;
|
|
case 2:
|
|
extractlayer2();
|
|
break;
|
|
case 1:
|
|
extractlayer1();
|
|
break;
|
|
default:
|
|
cout << "unknown layer:"<<layer<<endl;
|
|
back=false;
|
|
}
|
|
|
|
//
|
|
// Now put the frequencies/output etc.. in the frame
|
|
//
|
|
audioFrame->setFrameFormat(lOutputStereo,
|
|
mpegAudioHeader->getFrequencyHz()>>lDownSample);
|
|
|
|
audioFrame->putFloatData(synthesis->getOutputData(),synthesis->getLen());
|
|
return back;
|
|
|
|
}
|