/usr/share/doc/libraul-doc/html/TimeSlice_8hpp_source.html is in libraul-doc 0.8.0+dfsg0-0.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>RAUL: TimeSlice.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">RAUL
 <span id="projectnumber">0.8.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- Generated by Doxygen 1.7.6.1 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File List</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="headertitle">
<div class="title">TimeSlice.hpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* This file is part of Raul.</span>
<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2007-2009 David Robillard <http://drobilla.net></span>
<a name="l00003"></a>00003 <span class="comment"> *</span>
<a name="l00004"></a>00004 <span class="comment"> * Raul is free software; you can redistribute it and/or modify it under the</span>
<a name="l00005"></a>00005 <span class="comment"> * terms of the GNU General Public License as published by the Free Software</span>
<a name="l00006"></a>00006 <span class="comment"> * Foundation; either version 2 of the License, or (at your option) any later</span>
<a name="l00007"></a>00007 <span class="comment"> * version.</span>
<a name="l00008"></a>00008 <span class="comment"> *</span>
<a name="l00009"></a>00009 <span class="comment"> * Raul is distributed in the hope that it will be useful, but WITHOUT ANY</span>
<a name="l00010"></a>00010 <span class="comment"> * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span>
<a name="l00011"></a>00011 <span class="comment"> * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.</span>
<a name="l00012"></a>00012 <span class="comment"> *</span>
<a name="l00013"></a>00013 <span class="comment"> * You should have received a copy of the GNU General Public License along</span>
<a name="l00014"></a>00014 <span class="comment"> * with this program; if not, write to the Free Software Foundation, Inc.,</span>
<a name="l00015"></a>00015 <span class="comment"> * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA</span>
<a name="l00016"></a>00016 <span class="comment"> */</span>
<a name="l00017"></a>00017
<a name="l00018"></a>00018 <span class="preprocessor">#ifndef RAUL_TIME_SLICE_HPP</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define RAUL_TIME_SLICE_HPP</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span>
<a name="l00021"></a>00021 <span class="preprocessor">#include <cassert></span>
<a name="l00022"></a>00022 <span class="preprocessor">#include <cmath></span>
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <span class="preprocessor">#include <boost/utility.hpp></span>
<a name="l00025"></a>00025
<a name="l00026"></a>00026 <span class="preprocessor">#include "raul/TimeStamp.hpp"</span>
<a name="l00027"></a>00027
<a name="l00028"></a>00028 <span class="keyword">namespace </span>Raul {
<a name="l00029"></a>00029
<a name="l00030"></a>00030
<a name="l00031"></a>00031 <span class="comment">/* FIXME: all the conversion here is wrong now */</span>
<a name="l00032"></a>00032
<a name="l00051"></a><a class="code" href="classRaul_1_1TimeSlice.html">00051</a> <span class="keyword">class </span><a class="code" href="classRaul_1_1TimeSlice.html" title="A duration of time, with conversion between tick time and beat time.">TimeSlice</a> : <span class="keyword">public</span> boost::noncopyable {
<a name="l00052"></a>00052 <span class="keyword">public</span>:
<a name="l00053"></a>00053 <a class="code" href="classRaul_1_1TimeSlice.html" title="A duration of time, with conversion between tick time and beat time.">TimeSlice</a>(uint32_t rate, uint32_t ppqn, <span class="keywordtype">double</span> bpm)
<a name="l00054"></a>00054 : _tick_rate(rate)
<a name="l00055"></a>00055 , _beat_rate(60.0/bpm)
<a name="l00056"></a>00056 , _start_ticks(<a class="code" href="classRaul_1_1TimeUnit.html" title="A type of time stamp.">Raul::TimeUnit</a>(Raul::TimeUnit::FRAMES, rate), 0, 0)
<a name="l00057"></a>00057 , _length_ticks(<a class="code" href="classRaul_1_1TimeUnit.html" title="A type of time stamp.">TimeUnit</a>(TimeUnit::FRAMES, rate), 0, 0)
<a name="l00058"></a>00058 , _start_beats(<a class="code" href="classRaul_1_1TimeUnit.html" title="A type of time stamp.">TimeUnit</a>(TimeUnit::BEATS, ppqn), 0, 0)
<a name="l00059"></a>00059 , _length_beats(<a class="code" href="classRaul_1_1TimeUnit.html" title="A type of time stamp.">TimeUnit</a>(TimeUnit::BEATS, ppqn), 0, 0)
<a name="l00060"></a>00060 , _offset_ticks(<a class="code" href="classRaul_1_1TimeUnit.html" title="A type of time stamp.">TimeUnit</a>(TimeUnit::FRAMES, rate), 0, 0)
<a name="l00061"></a>00061 {}
<a name="l00062"></a>00062
<a name="l00068"></a><a class="code" href="classRaul_1_1TimeSlice.html#ac1d0209d2f40224f150cd3c7d7f5a9ed">00068</a> <span class="keywordtype">void</span> <a class="code" href="classRaul_1_1TimeSlice.html#ac1d0209d2f40224f150cd3c7d7f5a9ed" title="Set the start and length of the slice.">set_slice</a>(<a class="code" href="classRaul_1_1TimeStamp.html" title="A real-time time stamp (possible units: frame, absolute (s), or beat).">TimeStamp</a> start, <a class="code" href="classRaul_1_1TimeStamp.html" title="A real-time time stamp (possible units: frame, absolute (s), or beat).">TimeDuration</a> length) {
<a name="l00069"></a>00069 assert(start.unit() == ticks_unit());
<a name="l00070"></a>00070 assert(length.unit() == ticks_unit());
<a name="l00071"></a>00071 _start_ticks = start;
<a name="l00072"></a>00072 _length_ticks = length;
<a name="l00073"></a>00073 update_beat_time();
<a name="l00074"></a>00074 }
<a name="l00075"></a>00075
<a name="l00076"></a>00076 <span class="keywordtype">void</span> set_length(<a class="code" href="classRaul_1_1TimeStamp.html" title="A real-time time stamp (possible units: frame, absolute (s), or beat).">TimeDuration</a> length) {
<a name="l00077"></a>00077 assert(length.unit() == ticks_unit());
<a name="l00078"></a>00078 _length_ticks = length;
<a name="l00079"></a>00079 _length_beats = ticks_to_beats(_length_ticks);
<a name="l00080"></a>00080 }
<a name="l00081"></a>00081
<a name="l00082"></a>00082 <span class="keywordtype">bool</span> contains(TimeStamp time)<span class="keyword"> const </span>{
<a name="l00083"></a>00083 <span class="keywordflow">return</span> (time >= <a class="code" href="classRaul_1_1TimeSlice.html#a33f9ecd79318df0a0c1adbb71de4aae7" title="Start of current sub-cycle in ticks.">start_ticks</a>() && time < <a class="code" href="classRaul_1_1TimeSlice.html#a33f9ecd79318df0a0c1adbb71de4aae7" title="Start of current sub-cycle in ticks.">start_ticks</a>() + <a class="code" href="classRaul_1_1TimeSlice.html#a59f5a1955b65b5937a3238a9eb872c3b" title="Length of current sub-cycle in ticks.">length_ticks</a>());
<a name="l00084"></a>00084 }
<a name="l00085"></a>00085
<a name="l00086"></a>00086 <span class="keywordtype">double</span> tick_rate()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _tick_rate; }
<a name="l00087"></a>00087 <span class="keywordtype">double</span> beat_rate()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _beat_rate; }
<a name="l00088"></a>00088 <span class="keywordtype">double</span> bpm()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 60/_beat_rate; }
<a name="l00089"></a>00089
<a name="l00090"></a>00090 <span class="keywordtype">void</span> set_tick_rate(<span class="keywordtype">double</span> tick_rate) {
<a name="l00091"></a>00091 _tick_rate = tick_rate;
<a name="l00092"></a>00092 update_beat_time();
<a name="l00093"></a>00093 }
<a name="l00094"></a>00094
<a name="l00095"></a>00095 <span class="keywordtype">void</span> set_bpm(<span class="keywordtype">double</span> bpm) {
<a name="l00096"></a>00096 _beat_rate = 60.0/bpm;
<a name="l00097"></a>00097 update_beat_time();
<a name="l00098"></a>00098 }
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <span class="keyword">inline</span> TimeStamp beats_to_seconds(TimeStamp beats)<span class="keyword"> const </span>{
<a name="l00101"></a>00101 <span class="keywordflow">return</span> TimeStamp(real_unit(), beats.to_double() * 1/(double)_beat_rate);
<a name="l00102"></a>00102 }
<a name="l00103"></a>00103
<a name="l00104"></a>00104 <span class="keyword">inline</span> TimeStamp beats_to_ticks(TimeStamp beats)<span class="keyword"> const </span>{
<a name="l00105"></a>00105 <span class="keywordflow">return</span> TimeStamp(ticks_unit(), beats.to_double() * (double)_beat_rate * _tick_rate);
<a name="l00106"></a>00106 }
<a name="l00107"></a>00107
<a name="l00108"></a>00108 <span class="keyword">inline</span> TimeStamp ticks_to_seconds(TimeStamp ticks)<span class="keyword"> const </span>{
<a name="l00109"></a>00109 <span class="keywordflow">return</span> TimeStamp(real_unit(), ticks.ticks() * 1/(double)_tick_rate);
<a name="l00110"></a>00110 }
<a name="l00111"></a>00111
<a name="l00112"></a>00112 <span class="keyword">inline</span> TimeStamp ticks_to_beats(TimeStamp ticks)<span class="keyword"> const </span>{
<a name="l00113"></a>00113 <span class="keywordflow">return</span> TimeStamp(beats_unit(), ticks.ticks() * 1/(double)_tick_rate * _beat_rate);
<a name="l00114"></a>00114 }
<a name="l00115"></a>00115
<a name="l00117"></a><a class="code" href="classRaul_1_1TimeSlice.html#a33f9ecd79318df0a0c1adbb71de4aae7">00117</a> <span class="keyword">inline</span> <a class="code" href="classRaul_1_1TimeStamp.html" title="A real-time time stamp (possible units: frame, absolute (s), or beat).">TimeStamp</a> <a class="code" href="classRaul_1_1TimeSlice.html#a33f9ecd79318df0a0c1adbb71de4aae7" title="Start of current sub-cycle in ticks.">start_ticks</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _start_ticks; }
<a name="l00118"></a>00118
<a name="l00120"></a><a class="code" href="classRaul_1_1TimeSlice.html#a59f5a1955b65b5937a3238a9eb872c3b">00120</a> <span class="keyword">inline</span> <a class="code" href="classRaul_1_1TimeStamp.html" title="A real-time time stamp (possible units: frame, absolute (s), or beat).">TimeDuration</a> <a class="code" href="classRaul_1_1TimeSlice.html#a59f5a1955b65b5937a3238a9eb872c3b" title="Length of current sub-cycle in ticks.">length_ticks</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _length_ticks; }
<a name="l00121"></a>00121
<a name="l00123"></a><a class="code" href="classRaul_1_1TimeSlice.html#a97521b3954662d7faf6b26db3039a8b0">00123</a> <span class="keyword">inline</span> <a class="code" href="classRaul_1_1TimeStamp.html" title="A real-time time stamp (possible units: frame, absolute (s), or beat).">TimeStamp</a> <a class="code" href="classRaul_1_1TimeSlice.html#a97521b3954662d7faf6b26db3039a8b0" title="Start of current sub-cycle in beats.">start_beats</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _start_beats; }
<a name="l00124"></a>00124
<a name="l00126"></a><a class="code" href="classRaul_1_1TimeSlice.html#a0e3953cc15f6cffe8b10c2fc957aa0fb">00126</a> <span class="keyword">inline</span> <a class="code" href="classRaul_1_1TimeStamp.html" title="A real-time time stamp (possible units: frame, absolute (s), or beat).">TimeDuration</a> <a class="code" href="classRaul_1_1TimeSlice.html#a0e3953cc15f6cffe8b10c2fc957aa0fb" title="Length of current sub-cycle in beats.">length_beats</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _length_beats; }
<a name="l00127"></a>00127
<a name="l00129"></a><a class="code" href="classRaul_1_1TimeSlice.html#a077a893ae8bd829b546b4ded72fed510">00129</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classRaul_1_1TimeSlice.html#a077a893ae8bd829b546b4ded72fed510" title="Set the offset between real-time and timeslice-time.">set_offset</a>(<a class="code" href="classRaul_1_1TimeStamp.html" title="A real-time time stamp (possible units: frame, absolute (s), or beat).">TimeDuration</a> offset) { _offset_ticks = offset; }
<a name="l00130"></a>00130
<a name="l00132"></a><a class="code" href="classRaul_1_1TimeSlice.html#adfd0fac70b35b56d085423178caa7267">00132</a> <span class="keyword">inline</span> <a class="code" href="classRaul_1_1TimeStamp.html" title="A real-time time stamp (possible units: frame, absolute (s), or beat).">TimeDuration</a> <a class="code" href="classRaul_1_1TimeSlice.html#adfd0fac70b35b56d085423178caa7267" title="Offset relative to external (e.g Jack) time.">offset_ticks</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _offset_ticks; }
<a name="l00133"></a>00133
<a name="l00134"></a>00134 <span class="keyword">inline</span> <a class="code" href="classRaul_1_1TimeUnit.html" title="A type of time stamp.">TimeUnit</a> beats_unit()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _start_beats.unit(); }
<a name="l00135"></a>00135 <span class="keyword">inline</span> TimeUnit ticks_unit()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _start_ticks.unit(); }
<a name="l00136"></a>00136 <span class="keyword">inline</span> TimeUnit real_unit()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> TimeUnit(TimeUnit::SECONDS, 0); }
<a name="l00137"></a>00137
<a name="l00138"></a>00138 <span class="keyword">private</span>:
<a name="l00139"></a>00139 <span class="keyword">inline</span> <span class="keywordtype">void</span> update_beat_time() {
<a name="l00140"></a>00140 _start_beats = ticks_to_beats(_start_ticks);
<a name="l00141"></a>00141 _length_beats = ticks_to_beats(_length_ticks);
<a name="l00142"></a>00142 }
<a name="l00143"></a>00143
<a name="l00144"></a>00144 <span class="comment">// Rate/Tempo</span>
<a name="l00145"></a>00145 <span class="keywordtype">double</span> _tick_rate;
<a name="l00146"></a>00146 <span class="keywordtype">double</span> _beat_rate;
<a name="l00147"></a>00147
<a name="l00148"></a>00148 <span class="comment">// Current time</span>
<a name="l00149"></a>00149 TimeStamp _start_ticks;
<a name="l00150"></a>00150 TimeDuration _length_ticks;
<a name="l00151"></a>00151 TimeStamp _start_beats;
<a name="l00152"></a>00152 TimeDuration _length_beats;
<a name="l00153"></a>00153
<a name="l00154"></a>00154 TimeDuration _offset_ticks;
<a name="l00155"></a>00155 };
<a name="l00156"></a>00156
<a name="l00157"></a>00157
<a name="l00158"></a>00158 } <span class="comment">// namespace Raul</span>
<a name="l00159"></a>00159
<a name="l00160"></a>00160 <span class="preprocessor">#endif // RAUL_TIME_SLICE_HPP</span>
</pre></div></div><!-- contents -->
<hr class="footer"/><address class="footer"><small>
Generated on Tue Jan 10 2012 10:10:15 for RAUL by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.6.1
</small></address>
</body>
</html>
|