jdkmidi class library documentation

Copyright © 2004 J.D. Koftinoff Software, Ltd.

Released under the GNU General Public License (GPL)




Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

jdkmidi::SMPTE Class Reference

#include <smpte.h>

List of all members.

Public Member Functions

 SMPTE (SMPTE_RATE smpte_rate=SMPTE_RATE_30, SAMPLE_RATE sample_rate=SAMPLE_48000)
 SMPTE (const SMPTE &s)
void SetSMPTERate (SMPTE_RATE r)
SMPTE_RATE GetSMPTERate ()
void SetSampleRate (SAMPLE_RATE r)
SAMPLE_RATE GetSampleRate ()
void SetSampleNumber (ulong n)
ulong GetSampleNumber ()
void SetTime (uchar h, uchar m, uchar s, uchar f=0, uchar sf=0)
uchar GetHours ()
uchar GetMinutes ()
uchar GetSeconds ()
uchar GetFrames ()
uchar GetSubFrames ()
void SetHours (uchar h)
void SetMinutes (uchar m)
void SetSeconds (uchar s)
void SetFrames (uchar f)
void SetSubFrames (uchar sf)
void AddHours (char h)
void AddMinutes (char m)
void AddSeconds (char s)
void AddFrames (char f)
void AddSubFrames (char sf)
void AddSamples (long n)
void IncHours ()
void IncMinutes ()
void IncSeconds ()
void IncFrames ()
void IncSubFrames ()
void IncSamples ()
void DecHours ()
void DecMinutes ()
void DecSeconds ()
void DecFrames ()
void DecSubFrames ()
void DecSamples ()
const SMPTEoperator= (const SMPTE &s)
bool operator== (SMPTE &s)
bool operator!= (SMPTE &s)
bool operator< (SMPTE &s)
bool operator> (SMPTE &s)
bool operator<= (SMPTE &s)
bool operator>= (SMPTE &s)
const SMPTEoperator+= (SMPTE &s)
const SMPTEoperator-= (SMPTE &s)

Protected Member Functions

void SampleToTime ()
void TimeToSample ()
void Copy (const SMPTE &s)
int Compare (SMPTE &s)
void Add (SMPTE &s)
void Subtract (SMPTE &s)
long GetSampleRateLong ()
int GetSMPTERateLong ()

Private Attributes

SMPTE_RATE smpte_rate
SAMPLE_RATE sample_rate
ulong sample_number
uchar hours
uchar minutes
uchar seconds
uchar frames
uchar sub_frames
uchar sample_number_dirty

Friends

SMPTE operator+ (SMPTE a, SMPTE b)
SMPTE operator- (SMPTE a, SMPTE b)


Constructor & Destructor Documentation

jdkmidi::SMPTE::SMPTE SMPTE_RATE  smpte_rate = SMPTE_RATE_30,
SAMPLE_RATE  sample_rate = SAMPLE_48000
 

Definition at line 100 of file jdkmidi_smpte.cpp.

00104     :
00105     smpte_rate( smpte_rate_ ),
00106     sample_rate( sample_rate_ ),
00107     sample_number( 0 ),
00108     hours(0),
00109     minutes(0),
00110     seconds(0),
00111     frames(0),
00112     sub_frames(0),
00113     sample_number_dirty(false)
00114   {
00115     
00116   }
  

jdkmidi::SMPTE::SMPTE const SMPTE s  ) 
 

Definition at line 120 of file jdkmidi_smpte.cpp.

References Copy().

00123   {
00124     Copy(s);  
00125   }


Member Function Documentation

void jdkmidi::SMPTE::Add SMPTE s  )  [protected]
 

Definition at line 384 of file jdkmidi_smpte.cpp.

References GetSampleNumber(), SetSampleNumber(), and ulong.

00385   {
00386     ulong a=GetSampleNumber();
00387     ulong b=s.GetSampleNumber();
00388     
00389     SetSampleNumber( a+b );
00390   }

void jdkmidi::SMPTE::AddFrames char  f  ) 
 

Definition at line 164 of file jdkmidi_smpte.cpp.

References AddSamples(), GetSampleRateLong(), and GetSMPTERateLong().

00165   {
00166     AddSamples(
00167       GetSampleRateLong()   // samples per second times 10
00168       * f       // number of frames
00169       * 10      // times 10
00170       / GetSMPTERateLong()  // divide by smpte rate (frames per second) times 100
00171       );
00172   }

void jdkmidi::SMPTE::AddHours char  h  ) 
 

Definition at line 131 of file jdkmidi_smpte.cpp.

References AddSamples(), and GetSampleRateLong().

00132   {
00133     AddSamples(  GetSampleRateLong()// samples per second times 10
00134                  * h *
00135                  (  60    // seconds per minute
00136                     * 60    // minutes per hour
00137                     / 10    // compensate for freq*10
00138                    )
00139       );
00140   }

void jdkmidi::SMPTE::AddMinutes char  m  ) 
 

Definition at line 143 of file jdkmidi_smpte.cpp.

References AddSamples(), and GetSampleRateLong().

00144   {
00145     AddSamples(
00146       GetSampleRateLong()
00147       * m * // samples per second times 10
00148       ( 60    // seconds per minute
00149         / 10 )  // compensate for freq*10
00150       );
00151   }

void jdkmidi::SMPTE::AddSamples long  n  )  [inline]
 

Definition at line 163 of file smpte.h.

References GetSampleNumber(), sample_number, and SampleToTime().

void jdkmidi::SMPTE::AddSeconds char  s  ) 
 

Definition at line 154 of file jdkmidi_smpte.cpp.

References AddSamples(), and GetSampleRateLong().

00155   {
00156     AddSamples(
00157       GetSampleRateLong() // samples per second times 10
00158       * s    // number of seconds
00159       / 10     // compensate for freq*10
00160       );
00161   }

void jdkmidi::SMPTE::AddSubFrames char  sf  ) 
 

Definition at line 175 of file jdkmidi_smpte.cpp.

References AddSamples(), GetSampleRateLong(), and GetSMPTERateLong().

00176   {
00177     AddSamples(
00178       GetSampleRateLong() // samples per second times 10
00179       * sf      // number of sub frames
00180       / GetSMPTERateLong()  // divide by smpte rate (frames per second) times 100
00181       / 10      // divide by 10 to get hundredths of a frame
00182       );      
00183   }

int jdkmidi::SMPTE::Compare SMPTE s  )  [protected]
 

Definition at line 370 of file jdkmidi_smpte.cpp.

References GetSampleNumber(), and ulong.

00371   {
00372     ulong a = GetSampleNumber();
00373     ulong b = s.GetSampleNumber();
00374     
00375     if( a<b )
00376       return -1;
00377     if( a>b )
00378       return 1;
00379     
00380     return 0;
00381   }

void jdkmidi::SMPTE::Copy const SMPTE s  )  [protected]
 

Definition at line 356 of file jdkmidi_smpte.cpp.

References frames, hours, minutes, sample_number, sample_number_dirty, sample_rate, seconds, smpte_rate, and sub_frames.

00357   {
00358     smpte_rate=s.smpte_rate;
00359     sample_rate=s.sample_rate;
00360     sample_number=s.sample_number;
00361     hours=s.hours;
00362     minutes=s.minutes;
00363     seconds=s.seconds;
00364     frames=s.frames;
00365     sub_frames=s.sub_frames;
00366     sample_number_dirty=s.sample_number_dirty;
00367   }

void jdkmidi::SMPTE::DecFrames  )  [inline]
 

Definition at line 175 of file smpte.h.

References AddFrames().

00175 { AddFrames(-1);  }

void jdkmidi::SMPTE::DecHours  )  [inline]
 

Definition at line 172 of file smpte.h.

References AddHours().

00172 { AddHours(-1);   }

void jdkmidi::SMPTE::DecMinutes  )  [inline]
 

Definition at line 173 of file smpte.h.

References AddMinutes().

00173 { AddMinutes(-1); }

void jdkmidi::SMPTE::DecSamples  )  [inline]
 

Definition at line 177 of file smpte.h.

References AddSamples().

00177 { AddSamples(-1); }

void jdkmidi::SMPTE::DecSeconds  )  [inline]
 

Definition at line 174 of file smpte.h.

References AddSeconds().

00174 { AddSeconds(-1); }

void jdkmidi::SMPTE::DecSubFrames  )  [inline]
 

Definition at line 176 of file smpte.h.

References AddSubFrames().

00176 { AddSubFrames(-1); }

uchar jdkmidi::SMPTE::GetFrames  )  [inline]
 

Definition at line 149 of file smpte.h.

References frames, and uchar.

00149 { return frames;  }

uchar jdkmidi::SMPTE::GetHours  )  [inline]
 

Definition at line 146 of file smpte.h.

References hours, and uchar.

00146 { return hours;   }

uchar jdkmidi::SMPTE::GetMinutes  )  [inline]
 

Definition at line 147 of file smpte.h.

References minutes, and uchar.

00147 { return minutes; }

ulong jdkmidi::SMPTE::GetSampleNumber  )  [inline]
 

Definition at line 141 of file smpte.h.

References sample_number, sample_number_dirty, TimeToSample(), and ulong.

00141 { if( sample_number_dirty ) TimeToSample(); return sample_number; }

SAMPLE_RATE jdkmidi::SMPTE::GetSampleRate  )  [inline]
 

Definition at line 138 of file smpte.h.

References sample_rate, and jdkmidi::SAMPLE_RATE.

00138 { return sample_rate;       }  

long jdkmidi::SMPTE::GetSampleRateLong  )  [inline, protected]
 

Definition at line 201 of file smpte.h.

References jdkmidi::GetSampleRateFrequencyLong(), and sample_rate.

00202         { return GetSampleRateFrequencyLong( sample_rate ); }

uchar jdkmidi::SMPTE::GetSeconds  )  [inline]
 

Definition at line 148 of file smpte.h.

References seconds, and uchar.

00148 { return seconds; }

SMPTE_RATE jdkmidi::SMPTE::GetSMPTERate  )  [inline]
 

Definition at line 135 of file smpte.h.

References smpte_rate, and jdkmidi::SMPTE_RATE.

00135 { return smpte_rate;        }

int jdkmidi::SMPTE::GetSMPTERateLong  )  [inline, protected]
 

Definition at line 204 of file smpte.h.

References jdkmidi::GetSMPTERateFrequencyLong(), and smpte_rate.

00205         { return GetSMPTERateFrequencyLong( smpte_rate ); }

uchar jdkmidi::SMPTE::GetSubFrames  )  [inline]
 

Definition at line 150 of file smpte.h.

References sub_frames, and uchar.

00150 { return sub_frames;  }

void jdkmidi::SMPTE::IncFrames  )  [inline]
 

Definition at line 168 of file smpte.h.

References AddFrames().

00168 { AddFrames(1);   }

void jdkmidi::SMPTE::IncHours  )  [inline]
 

Definition at line 165 of file smpte.h.

References AddHours().

00165 { AddHours(1);    }

void jdkmidi::SMPTE::IncMinutes  )  [inline]
 

Definition at line 166 of file smpte.h.

References AddMinutes().

00166 { AddMinutes(1);  }

void jdkmidi::SMPTE::IncSamples  )  [inline]
 

Definition at line 170 of file smpte.h.

References AddSamples().

00170 { AddSamples(1);  }

void jdkmidi::SMPTE::IncSeconds  )  [inline]
 

Definition at line 167 of file smpte.h.

References AddSeconds().

00167 { AddSeconds(1);  }

void jdkmidi::SMPTE::IncSubFrames  )  [inline]
 

Definition at line 169 of file smpte.h.

References AddSubFrames().

00169 { AddSubFrames(1);  }

bool jdkmidi::SMPTE::operator!= SMPTE s  )  [inline]
 

Definition at line 183 of file smpte.h.

References Compare().

00183 { return Compare(s)!=0;   }

const SMPTE& jdkmidi::SMPTE::operator+= SMPTE s  )  [inline]
 

Definition at line 189 of file smpte.h.

References Add().

00189 { Add( s ); return *this; }

const SMPTE& jdkmidi::SMPTE::operator-= SMPTE s  )  [inline]
 

Definition at line 190 of file smpte.h.

References Subtract().

00190 { Subtract( s ); return *this;  }

bool jdkmidi::SMPTE::operator< SMPTE s  )  [inline]
 

Definition at line 184 of file smpte.h.

References Compare().

00184 { return Compare(s)<0;    }

bool jdkmidi::SMPTE::operator<= SMPTE s  )  [inline]
 

Definition at line 186 of file smpte.h.

References Compare().

00186 { return Compare(s)<=0;   }

const SMPTE& jdkmidi::SMPTE::operator= const SMPTE s  )  [inline]
 

Definition at line 181 of file smpte.h.

References Copy().

00181 { Copy(s); return *this;  }

bool jdkmidi::SMPTE::operator== SMPTE s  )  [inline]
 

Definition at line 182 of file smpte.h.

References Compare().

00182 { return Compare(s)==0;   }

bool jdkmidi::SMPTE::operator> SMPTE s  )  [inline]
 

Definition at line 185 of file smpte.h.

References Compare().

00185 { return Compare(s)>0;    }

bool jdkmidi::SMPTE::operator>= SMPTE s  )  [inline]
 

Definition at line 187 of file smpte.h.

References Compare().

00187 { return Compare(s)>=0;   }

void jdkmidi::SMPTE::SampleToTime  )  [protected]
 

Definition at line 187 of file jdkmidi_smpte.cpp.

References DBG, frames, hours, minutes, sample_number, sample_rate, seconds, jdkmidi::smpte_max_frames, smpte_rate, jdkmidi::SMPTE_RATE_2997DF, jdkmidi::SMPTE_RATE_30DF, jdkmidi::smpte_sample_rates, jdkmidi::smpte_smpte_rates, sub_frames, uchar, and ulong.

00188   {
00189     //
00190     // make a temporary copy of the sample number
00191     //
00192     
00193     ulong tmp_sample=sample_number;
00194     
00195     
00196     //
00197     // keep track of the actual rates in use in doubles.
00198     //
00199     
00200     double the_smpte_rate = smpte_smpte_rates[ smpte_rate ];
00201     double the_sample_rate = smpte_sample_rates[ sample_rate ];
00202     
00203     //
00204     // keep track of the maximum frame number for this smpte format.
00205     //
00206     
00207     uchar max_frame = smpte_max_frames[ smpte_rate ];
00208     
00209     //
00210     // Calculate the number of samples per frame.
00211     //
00212     
00213     double samples_per_frame=smpte_sample_rates[ sample_rate ] / smpte_smpte_rates[ smpte_rate ];
00214     
00215     //
00216     // if the smpte rate is a drop frame type, calculate the number
00217     // of frames that must be dropped.
00218     //
00219     
00220     if( smpte_rate==SMPTE_RATE_30DF || smpte_rate==SMPTE_RATE_2997DF )
00221     {
00222       //
00223       // Calculate number of minutes that have gone by
00224       //
00225       
00226       // short num_minutes = (short)((double)tmp_sample/(smpte_sample_rates[sample_rate]))/60;
00227       int num_minutes = tmp_sample/(48000*60);
00228       
00229       DBG( printf( "num_minutes=%d\n", (int)num_minutes ) );
00230       
00231       //
00232       // Calculate the number of tens of minutes that have gone by, including minute 00
00233       //
00234       
00235       int ten_minutes = num_minutes/10;
00236       
00237       DBG( printf( "ten_minutes=%d\n", (int)ten_minutes) );
00238       
00239       //
00240       // Calculate the number of frames that are dropped by this
00241       // time.
00242       //
00243       
00244       int drops=(num_minutes - ten_minutes)*2;
00245       
00246       DBG( printf( "drops=%d\n", (int)drops ) );
00247       
00248       //
00249       // Offset the tmp_sample number by this amount of frames.
00250       //
00251       
00252       DBG( printf( "tmp_sample before drops=%ld\n", (long)tmp_sample ) );
00253       
00254       tmp_sample+=(ulong)(drops*samples_per_frame);
00255       
00256       DBG( printf( "tmp_sample after drops=%ld\n", (long)tmp_sample ) );
00257     }
00258     
00259     //
00260     // Calculate the time in sub frames, frames, seconds, minutes, hours
00261     //
00262     
00263     ulong rounded_sub_frames= (ulong)((tmp_sample*the_smpte_rate * 100)/the_sample_rate +.5);
00264     
00265     DBG( printf( "rounded_sub_frames = %ld\n", rounded_sub_frames ) );
00266     
00267     sub_frames = (uchar) ((rounded_sub_frames)%100);
00268     frames     = (uchar) ((rounded_sub_frames/100) % max_frame);
00269     seconds    = (uchar) ((rounded_sub_frames/(100L*max_frame)) % 60 );
00270     minutes    = (uchar) ((rounded_sub_frames/(100L*60L*max_frame)) % 60 );
00271     hours    = (uchar) ((rounded_sub_frames/(100L*60L*24L*max_frame)) % 24 );
00272     
00273   }

void jdkmidi::SMPTE::SetFrames uchar  f  )  [inline]
 

Definition at line 155 of file smpte.h.

References frames, sample_number_dirty, and uchar.

00155 { frames=f;    sample_number_dirty=true;  }

void jdkmidi::SMPTE::SetHours uchar  h  )  [inline]
 

Definition at line 152 of file smpte.h.

References hours, sample_number_dirty, and uchar.

00152 { hours=h;     sample_number_dirty=true;  }

void jdkmidi::SMPTE::SetMinutes uchar  m  )  [inline]
 

Definition at line 153 of file smpte.h.

References minutes, sample_number_dirty, and uchar.

00153 { minutes=m;   sample_number_dirty=true;  }

void jdkmidi::SMPTE::SetSampleNumber ulong  n  )  [inline]
 

Definition at line 140 of file smpte.h.

References sample_number, SampleToTime(), and ulong.

00140 { sample_number=n; SampleToTime();    }

void jdkmidi::SMPTE::SetSampleRate SAMPLE_RATE  r  )  [inline]
 

Definition at line 137 of file smpte.h.

References sample_number_dirty, and sample_rate.

00137 { sample_rate=r; sample_number_dirty=true;  }

void jdkmidi::SMPTE::SetSeconds uchar  s  )  [inline]
 

Definition at line 154 of file smpte.h.

References sample_number_dirty, seconds, and uchar.

00154 { seconds=s;   sample_number_dirty=true;  }

void jdkmidi::SMPTE::SetSMPTERate SMPTE_RATE  r  )  [inline]
 

Definition at line 134 of file smpte.h.

References sample_number_dirty, and smpte_rate.

00134 { smpte_rate=r; sample_number_dirty=true; }

void jdkmidi::SMPTE::SetSubFrames uchar  sf  )  [inline]
 

Definition at line 156 of file smpte.h.

References sample_number_dirty, sub_frames, and uchar.

00156 { sub_frames=sf; sample_number_dirty=true;  }

void jdkmidi::SMPTE::SetTime uchar  h,
uchar  m,
uchar  s,
uchar  f = 0,
uchar  sf = 0
[inline]
 

Definition at line 143 of file smpte.h.

References frames, hours, minutes, sample_number_dirty, seconds, sub_frames, and uchar.

00144         { hours=h; minutes=m; seconds=s; frames=f; sub_frames=sf; sample_number_dirty=true; }

void jdkmidi::SMPTE::Subtract SMPTE s  )  [protected]
 

Definition at line 392 of file jdkmidi_smpte.cpp.

References GetSampleNumber(), SetSampleNumber(), and ulong.

00393   {
00394     ulong a=GetSampleNumber();
00395     ulong b=s.GetSampleNumber();
00396     
00397     SetSampleNumber( a-b );
00398   }

void jdkmidi::SMPTE::TimeToSample  )  [protected]
 

Definition at line 276 of file jdkmidi_smpte.cpp.

References DBG, frames, hours, minutes, sample_number, sample_rate, seconds, smpte_rate, jdkmidi::SMPTE_RATE_2997DF, jdkmidi::SMPTE_RATE_30DF, jdkmidi::smpte_sample_rates, jdkmidi::smpte_smpte_rates, sub_frames, and ulong.

00277   {
00278     
00279     //
00280     // keep track of the actual rates in use in doubles.
00281     //
00282     
00283     double the_smpte_rate = smpte_smpte_rates[ smpte_rate ];
00284     double the_sample_rate = smpte_sample_rates[ sample_rate ];
00285     
00286     //
00287     // optimize a coupla similiar double divides by calculating it once.
00288     //
00289     
00290     double samples_per_frame=the_sample_rate / the_smpte_rate;
00291     
00292     //
00293     // calculate the sample number
00294     //
00295     
00296     double tmp_sample = (double) (
00297       ( (hours    * the_sample_rate * (60 * 60) )
00298         + (minutes  * the_sample_rate * 60 )
00299         +   (seconds  * the_sample_rate )
00300         +   (frames   * samples_per_frame )
00301         + (sub_frames   * samples_per_frame * (1.0/100.0) ) +.5)
00302       );
00303     
00304     //
00305     // Now compensate for Drop Frame mode if we are in drop frame mode.
00306     //
00307     
00308     if( smpte_rate == SMPTE_RATE_30DF || smpte_rate==SMPTE_RATE_2997DF )
00309     {
00310       //
00311       // Calculate number of minutes that have gone by
00312       //
00313       
00314       int num_minutes = (int)((double)tmp_sample/(smpte_sample_rates[sample_rate]*60));
00315       
00316       DBG( printf( "num_minutes=%d\n", (int)num_minutes ) );
00317       
00318       //
00319       // Calculate the number of tens of minutes that have gone by, including minute 00
00320       //
00321       
00322       int ten_minutes = num_minutes/10;
00323       
00324       DBG( printf( "ten_minutes=%d\n", (int)ten_minutes) );
00325       
00326       //
00327       // Calculate the number of frames that are dropped by this
00328       // time.
00329       //
00330       
00331       int drops=(num_minutes - ten_minutes)*2;
00332       
00333       DBG( printf( "drops=%d\n", (int)drops ) );
00334       
00335       //
00336       // Offset the tmp_sample number by this amount of frames.
00337       //
00338       
00339       DBG( printf( "tmp_sample before drops=%ld\n", (long)tmp_sample ) );
00340       
00341       tmp_sample-=drops*samples_per_frame;
00342       
00343       DBG( printf( "tmp_sample after drops=%ld\n", (long)tmp_sample ) );
00344       
00345     }
00346     
00347     //
00348     // save the calculated sample number in self.
00349     //
00350     
00351     sample_number=(ulong)tmp_sample;
00352   }


Friends And Related Function Documentation

SMPTE operator+ SMPTE  a,
SMPTE  b
[friend]
 

Definition at line 224 of file smpte.h.

00225     {
00226       SMPTE c(a);
00227       
00228       c+=b;
00229       return c;
00230     }

SMPTE operator- SMPTE  a,
SMPTE  b
[friend]
 

Definition at line 232 of file smpte.h.

00233     {
00234       SMPTE c(a);
00235       
00236       c-=b;
00237       return c;
00238     }


Member Data Documentation

uchar jdkmidi::SMPTE::frames [private]
 

Definition at line 215 of file smpte.h.

uchar jdkmidi::SMPTE::hours [private]
 

Definition at line 212 of file smpte.h.

uchar jdkmidi::SMPTE::minutes [private]
 

Definition at line 213 of file smpte.h.

ulong jdkmidi::SMPTE::sample_number [private]
 

Definition at line 210 of file smpte.h.

uchar jdkmidi::SMPTE::sample_number_dirty [private]
 

Definition at line 217 of file smpte.h.

SAMPLE_RATE jdkmidi::SMPTE::sample_rate [private]
 

Definition at line 209 of file smpte.h.

uchar jdkmidi::SMPTE::seconds [private]
 

Definition at line 214 of file smpte.h.

SMPTE_RATE jdkmidi::SMPTE::smpte_rate [private]
 

Definition at line 208 of file smpte.h.

uchar jdkmidi::SMPTE::sub_frames [private]
 

Definition at line 216 of file smpte.h.


The documentation for this class was generated from the following files: