Rivendellaudio/web/rdxport/audioinfo.cpp
Fred Gleason 7cf2b5b2f7 2017-04-20 Fred Gleason <fredg@paravelsystems.com>
* Added a '--enable-rdxport-debug' switch to 'configure.ac'.
2017-04-20 10:26:41 -04:00

114 lines
2.9 KiB
C++

// audioinfo.cpp
//
// Rivendell web service portal -- AudioInfo service
//
// (C) Copyright 2011,2016 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <rdformpost.h>
#include <rdweb.h>
#include <rdcart.h>
#include <rdwavefile.h>
#include <rdconf.h>
#include <rdxport.h>
void Xport::AudioInfo()
{
RDWaveFile::Format format=RDWaveFile::Pcm16;;
//
// Verify Post
//
int cartnum=0;
if(!xport_post->getValue("CART_NUMBER",&cartnum)) {
XmlExit("Missing CART_NUMBER",400,"audioinfo.cpp",LINE_NUMBER);
}
int cutnum=0;
if(!xport_post->getValue("CUT_NUMBER",&cutnum)) {
XmlExit("Missing CUT_NUMBER",400,"audioinfo.cpp",LINE_NUMBER);
}
//
// Verify User Perms
//
if(!xport_user->cartAuthorized(cartnum)) {
XmlExit("No such cart",404,"audioinfo.cpp",LINE_NUMBER);
}
//
// Open Audio File
//
RDWaveFile *wave=new RDWaveFile(RDCut::pathName(cartnum,cutnum));
if(!wave->openWave()) {
XmlExit("No such audio",404,"audioinfo.cpp",LINE_NUMBER);
}
//
// Send Data
//
printf("Content-type: application/xml\n\n");
switch(wave->getFormatTag()) {
case WAVE_FORMAT_PCM:
format=RDWaveFile::Pcm16;
break;
case WAVE_FORMAT_IEEE_FLOAT:
format=RDWaveFile::Float32;
break;
case WAVE_FORMAT_MPEG:
switch(wave->getHeadLayer()) {
case 1:
format=RDWaveFile::MpegL1;
break;
case 2:
format=RDWaveFile::MpegL2;
break;
case 3:
format=RDWaveFile::MpegL3;
break;
}
break;
default:
XmlExit("Unknown audio format",400,"audioinfo.cpp",LINE_NUMBER);
break;
}
printf("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
printf("<audioInfo>\n");
printf(" <cartNumber>%u</cartNumber>\n",cartnum);
printf(" <cutNumber>%u</cutNumber>\n",cutnum);
printf(" <format>%d</format>\n",format);
printf(" <channels>%d</channels>\n",wave->getChannels());
printf(" <sampleRate>%d</sampleRate>\n",wave->getSamplesPerSec());
printf(" <bitRate>%d</bitRate>\n",wave->getHeadBitRate());
printf(" <frames>%u</frames>\n",wave->getSampleLength());
printf(" <length>%u</length>\n",wave->getExtTimeLength());
printf("</audioInfo>\n");
delete wave;
Exit(0);
}