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.
tdemultimedia/mpeglib/lib/output/audioTime.cpp

155 lines
2.5 KiB

/*
defines the format of an audio stream
Copyright (C) 1999 Martin Vogt
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as published by
the Free Software Foundation.
For more information look at the file COPYRIGHT in this package
*/
#include "audioTime.h"
#include <iostream>
using namespace std;
AudioTime::AudioTime(){
time=0.0;
}
AudioTime::~AudioTime() {
}
void AudioTime::setFormat(int stereo,int samplesize,int speed,int sign, int bigendian) {
setStereo(stereo);
setSampleSize(samplesize);
setSpeed(speed);
setSign(sign);
setBigendian(bigendian);
}
int AudioTime::getStereo() {
return stereo;
}
int AudioTime::getSampleSize() {
return samplesize;
}
int AudioTime::getSpeed() {
return speed;
}
int AudioTime::getSign() {
return _sign;
}
int AudioTime::getBigendian() {
return _bigendian;
}
void AudioTime::setStereo(int stereo) {
this->stereo=stereo;
}
void AudioTime::setSampleSize(int samplesize) {
this->samplesize=samplesize;
}
void AudioTime::setSpeed(int speed) {
this->speed=speed;
}
void AudioTime::setSign(int sign) {
this->_sign=sign;
}
void AudioTime::setBigendian(int bigendian) {
this->_bigendian = bigendian;
}
float AudioTime::getTime() {
return time;
}
void AudioTime::setTime(float time) {
this->time=time;
}
void AudioTime::forwardTime(int bytes){
time+=calculateTime(bytes);
}
float AudioTime::calculateTime(int bytes) {
float back=0;
bytes=bytes/(samplesize/8);
if (stereo==1) {
bytes=bytes/2;
}
if (speed != 0) {
back=(float)bytes/(float)speed;
}
return back;
}
/**
How much byte we need for time usecs?
*/
int AudioTime::calculateBytes(float time) {
float back=time;
if (speed != 0) {
back=back*(float)speed;
}
back=back*(float)(samplesize/8);
if (stereo==1) {
back=back*2.0;
}
return (int)back;
}
void AudioTime::sleepWrite(int size) {
timeval_t time;
float timeLength=calculateTime(size);
time.tv_sec=(long)timeLength;
time.tv_usec=(long)(1000000*(timeLength-time.tv_sec));
TimeWrapper::usleep(&time);
}
void AudioTime::print() {
cout << "AudioTime-begin-"<<endl;
cout << "stereo:"<<getStereo()<<" sampleSize:"<<getSampleSize()
<< " speed: "<<getSpeed()<<endl;
cout << "AudioTime-end-"<<endl;
}
void AudioTime::copyTo(AudioTime* dest) {
dest->setStereo(getStereo());
dest->setSampleSize(getSampleSize());
dest->setSpeed(getSpeed());
}