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 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
|
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html><head><title>QAudioInput Class Reference</title><style>h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
td.postheader { font-family: sans-serif }
tr.address { font-family: sans-serif }
body { background: #ffffff; color: black; }
</style></head><body><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr /><td align="left" valign="top" width="32"><img align="left" border="0" height="32" src="images/rb-logo.png" width="32" /></td><td width="1">  </td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a> · <a href="classes.html"><font color="#004faf">All Classes</font></a> · <a href="modules.html"><font color="#004faf">Modules</font></a></td></table><h1 align="center">QAudioInput Class Reference<br /><sup><sup>[<a href="qtmultimedia.html">QtMultimedia</a> module]</sup></sup></h1><p>The QAudioInput class provides an interface for receiving audio
data from an audio input device. <a href="#details">More...</a></p>
<p>Inherits <a href="qobject.html">QObject</a>.</p><h3>Methods</h3><ul><li><div class="fn" /><b><a href="qaudioinput.html#QAudioInput">__init__</a></b> (<i>self</i>, QAudioFormat <i>format</i> = QAudioFormat(), QObject <i>parent</i> = None)</li><li><div class="fn" /><b><a href="qaudioinput.html#QAudioInput-2">__init__</a></b> (<i>self</i>, QAudioDeviceInfo <i>audioDevice</i>, QAudioFormat <i>format</i> = QAudioFormat(), QObject <i>parent</i> = None)</li><li><div class="fn" />int <b><a href="qaudioinput.html#bufferSize">bufferSize</a></b> (<i>self</i>)</li><li><div class="fn" />int <b><a href="qaudioinput.html#bytesReady">bytesReady</a></b> (<i>self</i>)</li><li><div class="fn" />int <b><a href="qaudioinput.html#elapsedUSecs">elapsedUSecs</a></b> (<i>self</i>)</li><li><div class="fn" />QAudio.Error <b><a href="qaudioinput.html#error">error</a></b> (<i>self</i>)</li><li><div class="fn" />QAudioFormat <b><a href="qaudioinput.html#format">format</a></b> (<i>self</i>)</li><li><div class="fn" />int <b><a href="qaudioinput.html#notifyInterval">notifyInterval</a></b> (<i>self</i>)</li><li><div class="fn" />int <b><a href="qaudioinput.html#periodSize">periodSize</a></b> (<i>self</i>)</li><li><div class="fn" />int <b><a href="qaudioinput.html#processedUSecs">processedUSecs</a></b> (<i>self</i>)</li><li><div class="fn" /><b><a href="qaudioinput.html#reset">reset</a></b> (<i>self</i>)</li><li><div class="fn" /><b><a href="qaudioinput.html#resume">resume</a></b> (<i>self</i>)</li><li><div class="fn" /><b><a href="qaudioinput.html#setBufferSize">setBufferSize</a></b> (<i>self</i>, int <i>bytes</i>)</li><li><div class="fn" /><b><a href="qaudioinput.html#setNotifyInterval">setNotifyInterval</a></b> (<i>self</i>, int <i>milliSeconds</i>)</li><li><div class="fn" /><b><a href="qaudioinput.html#start">start</a></b> (<i>self</i>, QIODevice <i>device</i>)</li><li><div class="fn" />QIODevice <b><a href="qaudioinput.html#start-2">start</a></b> (<i>self</i>)</li><li><div class="fn" />QAudio.State <b><a href="qaudioinput.html#state">state</a></b> (<i>self</i>)</li><li><div class="fn" /><b><a href="qaudioinput.html#stop">stop</a></b> (<i>self</i>)</li><li><div class="fn" /><b><a href="qaudioinput.html#suspend">suspend</a></b> (<i>self</i>)</li></ul><h3>Qt Signals</h3><ul><li><div class="fn" />void <b><a href="qaudioinput.html#notify">notify</a></b> ()</li><li><div class="fn" />void <b><a href="qaudioinput.html#stateChanged">stateChanged</a></b> ( ::QAudio::State)</li></ul><a name="details" /><hr /><h2>Detailed Description</h2><p>The QAudioInput class provides an interface for receiving audio
data from an audio input device.</p>
<p>You can construct an audio input with the system's <a href="qaudiodeviceinfo.html#defaultInputDevice">default audio input
device</a>. It is also possible to create QAudioInput with a
specific <a href="qaudiodeviceinfo.html">QAudioDeviceInfo</a>. When
you create the audio input, you should also send in the <a href="qaudioformat.html">QAudioFormat</a> to be used for the recording
(see the <a href="qaudioformat.html">QAudioFormat</a> class
description for details).</p>
<p>To record to a file:</p>
<p>QAudioInput lets you record audio with an audio input device.
The default constructor of this class will use the systems default
audio device, but you can also specify a <a href="qaudiodeviceinfo.html">QAudioDeviceInfo</a> for a specific device.
You also need to pass in the <a href="qaudioformat.html">QAudioFormat</a> in which you wish to
record.</p>
<p>Starting up the QAudioInput is simply a matter of calling
<a href="qaudioinput.html#start">start</a>() with a <a href="qiodevice.html">QIODevice</a> opened for writing. For instance, to
record to a file, you can:</p>
<pre class="cpp">
<span class="type"><a href="qfile.html">QFile</a></span> outputFile; <span class="comment">// class member.</span>
<span class="type">QAudioInput</span> <span class="operator">*</span>audioInput; <span class="comment">// class member.</span>
...
<span class="type">void</span> startRecording()
{
outputFile<span class="operator">.</span>setFileName(<span class="string">"/tmp/test.raw"</span>);
outputFile<span class="operator">.</span>open( <span class="type"><a href="qiodevice.html">QIODevice</a></span><span class="operator">.</span>WriteOnly <span class="operator">|</span> <span class="type"><a href="qiodevice.html">QIODevice</a></span><span class="operator">.</span>Truncate );
<span class="type"><a href="qaudioformat.html">QAudioFormat</a></span> format;
<span class="comment">// set up the format you want, eg.</span>
format<span class="operator">.</span>setFrequency(<span class="number">8000</span>);
format<span class="operator">.</span>setChannels(<span class="number">1</span>);
format<span class="operator">.</span>setSampleSize(<span class="number">8</span>);
format<span class="operator">.</span>setCodec(<span class="string">"audio/pcm"</span>);
format<span class="operator">.</span>setByteOrder(<span class="type"><a href="qaudioformat.html">QAudioFormat</a></span><span class="operator">.</span>LittleEndian);
format<span class="operator">.</span>setSampleType(<span class="type"><a href="qaudioformat.html">QAudioFormat</a></span><span class="operator">.</span>UnSignedInt);
<span class="type"><a href="qaudiodeviceinfo.html">QAudioDeviceInfo</a></span> info <span class="operator">=</span> <span class="type"><a href="qaudiodeviceinfo.html">QAudioDeviceInfo</a></span><span class="operator">.</span>defaultInputDevice();
<span class="keyword">if</span> (<span class="operator">!</span>info<span class="operator">.</span>isFormatSupported(format)) {
<a href="qtcore.html#qWarning">qWarning</a>()<span class="operator"><</span><span class="operator"><</span><span class="string">"default format not supported try to use nearest"</span>;
format <span class="operator">=</span> info<span class="operator">.</span>nearestFormat(format);
}
audioInput <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAudioInput</span>(format<span class="operator">,</span> <span class="keyword">this</span>);
<span class="type"><a href="qtimer.html">QTimer</a></span><span class="operator">.</span>singleShot(<span class="number">3000</span><span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(stopRecording()));
audioInput<span class="operator">-</span><span class="operator">></span>start(<span class="operator">&</span>outputFile);
<span class="comment">// Records audio for 3000ms</span>
}
</pre>
<p>This will start recording if the format specified is supported
by the input device (you can check this with <a href="qaudiodeviceinfo.html#isFormatSupported">QAudioDeviceInfo.isFormatSupported</a>().
In case there are any snags, use the <a href="qaudioinput.html#error">error</a>() function to check what went
wrong. We stop recording in the <tt>stopRecording()</tt> slot.</p>
<pre class="cpp">
<span class="type">void</span> stopRecording()
{
audioInput<span class="operator">-</span><span class="operator">></span>stop();
outputFile<span class="operator">.</span>close();
<span class="keyword">delete</span> audioInput;
}
</pre>
<p>At any point in time, QAudioInput will be in one of four states:
active, suspended, stopped, or idle. These states are specified by
the <a href="qaudio.html#State-enum">QAudio.State</a> enum. You
can request a state change directly through <a href="qaudioinput.html#suspend">suspend</a>(), <a href="qaudioinput.html#resume">resume</a>(), <a href="qaudioinput.html#stop">stop</a>(), <a href="qaudioinput.html#reset">reset</a>(), and <a href="qaudioinput.html#start">start</a>(). The current state is reported
by <a href="qaudioinput.html#state">state</a>(). <a href="qaudiooutput.html">QAudioOutput</a> will also signal you when the
state changes (<a href="qaudioinput.html#stateChanged">stateChanged</a>()).</p>
<p>QAudioInput provides several ways of measuring the time that has
passed since the <a href="qaudioinput.html#start">start</a>() of
the recording. The <tt>processedUSecs()</tt> function returns the
length of the stream in microseconds written, i.e., it leaves out
the times the audio input was suspended or idle. The <a href="qaudioinput.html#elapsedUSecs">elapsedUSecs</a>() function returns
the time elapsed since <a href="qaudioinput.html#start">start</a>()
was called regardless of which states the QAudioInput has been
in.</p>
<p>If an error should occur, you can fetch its reason with <a href="qaudioinput.html#error">error</a>(). The possible error reasons
are described by the <a href="qaudio.html#Error-enum">QAudio.Error</a> enum. The QAudioInput
will enter the <a href="qaudio.html#State-enum">StoppedState</a>
when an error is encountered. Connect to the <a href="qaudioinput.html#stateChanged">stateChanged</a>() signal to handle
the error:</p>
<pre class="cpp">
<span class="type">void</span> stateChanged(<span class="type"><a href="qaudio.html">QAudio</a></span><span class="operator">.</span>State newState)
{
<span class="keyword">switch</span>(newState) {
<span class="keyword">case</span> <span class="type"><a href="qaudio.html">QAudio</a></span><span class="operator">.</span>StoppedState:
<span class="keyword">if</span> (audioInput<span class="operator">-</span><span class="operator">></span>error() <span class="operator">!</span><span class="operator">=</span> <span class="type"><a href="qaudio.html">QAudio</a></span><span class="operator">.</span>NoError) {
<span class="comment">// Perform error handling</span>
} <span class="keyword">else</span> {
}
<span class="keyword">break</span>;
</pre>
<a id="symbian-platform-security-requirements" name="symbian-platform-security-requirements" />
<h3>Symbian Platform Security Requirements</h3>
<p>On Symbian, processes which use this class must have the
<tt>UserEnvironment</tt> platform security capability. If the
client process lacks this capability, calls to either overload of
<a href="qaudioinput.html#start">start</a>() will fail. This
failure is indicated by the QAudioInput object setting its <a href="qaudioinput.html#error">error</a>() value to <a href="qaudio.html#Error-enum">QAudio.OpenError</a> and then emitting a
<a href="qaudioinput.html#stateChanged">stateChanged</a>(<a href="qaudio.html#State-enum">QAudio.StoppedState</a>) signal.</p>
<p>Platform security capabilities are added via the <a href="qmake-variable-reference.html#target-capability">TARGET.CAPABILITY</a>
qmake variable.</p>
<hr /><h2>Method Documentation</h2><h3 class="fn"><a name="QAudioInput" />QAudioInput.__init__ (<i>self</i>, <a href="qaudioformat.html">QAudioFormat</a> <i>format</i> = QAudioFormat(), <a href="qobject.html">QObject</a> <i>parent</i> = None)</h3><p>The <i>parent</i> argument, if not None, causes <i>self</i> to be owned by Qt instead of PyQt.</p><p>Construct a new audio input and attach it to <i>parent</i>. The
default audio input device is used with the output <i>format</i>
parameters.</p>
<h3 class="fn"><a name="QAudioInput-2" />QAudioInput.__init__ (<i>self</i>, <a href="qaudiodeviceinfo.html">QAudioDeviceInfo</a> <i>audioDevice</i>, <a href="qaudioformat.html">QAudioFormat</a> <i>format</i> = QAudioFormat(), <a href="qobject.html">QObject</a> <i>parent</i> = None)</h3><p>The <i>parent</i> argument, if not None, causes <i>self</i> to be owned by Qt instead of PyQt.</p><p>Construct a new audio input and attach it to <i>parent</i>. The
device referenced by <i>audioDevice</i> is used with the input
<i>format</i> parameters.</p>
<h3 class="fn"><a name="bufferSize" />int QAudioInput.bufferSize (<i>self</i>)</h3><p>Returns the audio buffer size in milliseconds.</p>
<p>If called before <a href="qaudioinput.html#start">start</a>(),
returns platform default value. If called before <a href="qaudioinput.html#start">start</a>() but <a href="qaudioinput.html#setBufferSize">setBufferSize</a>() was called
prior, returns value set by <a href="qaudioinput.html#setBufferSize">setBufferSize</a>(). If called
after <a href="qaudioinput.html#start">start</a>(), returns the
actual buffer size being used. This may not be what was set
previously by <a href="qaudioinput.html#setBufferSize">setBufferSize</a>().</p>
<p><b>See also</b> <a href="qaudioinput.html#setBufferSize">setBufferSize</a>().</p>
<h3 class="fn"><a name="bytesReady" />int QAudioInput.bytesReady (<i>self</i>)</h3><p>Returns the amount of audio data available to read in bytes.</p>
<p>NOTE: returned value is only valid while in <a href="qaudio.html#State-enum">QAudio.ActiveState</a> or <a href="qaudio.html#State-enum">QAudio.IdleState</a> state, otherwise
returns zero.</p>
<h3 class="fn"><a name="elapsedUSecs" />int QAudioInput.elapsedUSecs (<i>self</i>)</h3><p>Returns the microseconds since <a href="qaudioinput.html#start">start</a>() was called, including time in
Idle and Suspend states.</p>
<h3 class="fn"><a name="error" /><a href="qaudio.html#Error-enum">QAudio.Error</a> QAudioInput.error (<i>self</i>)</h3><p>Returns the error state.</p>
<h3 class="fn"><a name="format" /><a href="qaudioformat.html">QAudioFormat</a> QAudioInput.format (<i>self</i>)</h3><p>Returns the <a href="qaudioformat.html">QAudioFormat</a> being
used.</p>
<h3 class="fn"><a name="notifyInterval" />int QAudioInput.notifyInterval (<i>self</i>)</h3><p>Returns the notify interval in milliseconds.</p>
<p><b>See also</b> <a href="qaudioinput.html#setNotifyInterval">setNotifyInterval</a>().</p>
<h3 class="fn"><a name="periodSize" />int QAudioInput.periodSize (<i>self</i>)</h3><p>Returns the period size in bytes.</p>
<p>Note: This is the recommended read size in bytes.</p>
<h3 class="fn"><a name="processedUSecs" />int QAudioInput.processedUSecs (<i>self</i>)</h3><p>Returns the amount of audio data processed since <a href="qaudioinput.html#start">start</a>() was called in
microseconds.</p>
<h3 class="fn"><a name="reset" />QAudioInput.reset (<i>self</i>)</h3><p>Drops all audio data in the buffers, resets buffers to zero.</p>
<h3 class="fn"><a name="resume" />QAudioInput.resume (<i>self</i>)</h3><p>Resumes processing audio data after a <a href="qaudioinput.html#suspend">suspend</a>().</p>
<p>Sets <a href="qaudioinput.html#error">error</a>() to <a href="qaudio.html#Error-enum">QAudio.NoError</a>. Sets <a href="qaudioinput.html#state">state</a>() to <a href="qaudio.html#State-enum">QAudio.ActiveState</a> if you previously
called start(<a href="qiodevice.html">QIODevice</a>*). Sets
<a href="qaudioinput.html#state">state</a>() to <a href="qaudio.html#State-enum">QAudio.IdleState</a> if you previously
called <a href="qaudioinput.html#start">start</a>(). emits <a href="qaudioinput.html#stateChanged">stateChanged</a>() signal.</p>
<h3 class="fn"><a name="setBufferSize" />QAudioInput.setBufferSize (<i>self</i>, int <i>bytes</i>)</h3><p>Sets the audio buffer size to <i>value</i> milliseconds.</p>
<p>Note: This function can be called anytime before <a href="qaudioinput.html#start">start</a>(), calls to this are ignored
after <a href="qaudioinput.html#start">start</a>(). It should not
be assumed that the buffer size set is the actual buffer size used,
calling <a href="qaudioinput.html#bufferSize">bufferSize</a>()
anytime after <a href="qaudioinput.html#start">start</a>() will
return the actual buffer size being used.</p>
<p><b>See also</b> <a href="qaudioinput.html#bufferSize">bufferSize</a>().</p>
<h3 class="fn"><a name="setNotifyInterval" />QAudioInput.setNotifyInterval (<i>self</i>, int <i>milliSeconds</i>)</h3><p>Sets the interval for <a href="qaudioinput.html#notify">notify</a>() signal to be emitted. This
is based on the <i>ms</i> of audio data processed not on actual
real-time. The minimum resolution of the timer is platform specific
and values should be checked with <a href="qaudioinput.html#notifyInterval">notifyInterval</a>() to confirm
actual value being used.</p>
<p><b>See also</b> <a href="qaudioinput.html#notifyInterval">notifyInterval</a>().</p>
<h3 class="fn"><a name="start" />QAudioInput.start (<i>self</i>, <a href="qiodevice.html">QIODevice</a> <i>device</i>)</h3><p>Uses the <i>device</i> as the <a href="qiodevice.html">QIODevice</a> to transfer data. Passing a <a href="qiodevice.html">QIODevice</a> allows the data to be transferred
without any extra code. All that is required is to open the
<a href="qiodevice.html">QIODevice</a>. <a href="qaudioinput.html">QAudioInput</a> does not take ownership of
<i>device</i>.</p>
<p>The <a href="qaudioinput.html">QAudioInput</a> will write to the
device when new data is available. You can subclass <a href="qiodevice.html">QIODevice</a> and reimplement <a href="qiodevice.html#writeData">writeData()</a> if you wish to access
the data. If you simply want to save data to a file, you can pass a
<a href="qfile.html">QFile</a> to this function.</p>
<p>If able to successfully get audio data from the systems audio
device the <a href="qaudioinput.html#state">state</a>() is set to
either <a href="qaudio.html#State-enum">QAudio.ActiveState</a> or
<a href="qaudio.html#State-enum">QAudio.IdleState</a>, <a href="qaudioinput.html#error">error</a>() is set to <a href="qaudio.html#Error-enum">QAudio.NoError</a> and the <a href="qaudioinput.html#stateChanged">stateChanged</a>() signal is
emitted.</p>
<p>If a problem occurs during this process the <a href="qaudioinput.html#error">error</a>() is set to <a href="qaudio.html#Error-enum">QAudio.OpenError</a>, <a href="qaudioinput.html#state">state</a>() is set to <a href="qaudio.html#State-enum">QAudio.StoppedState</a> and <a href="qaudioinput.html#stateChanged">stateChanged</a>() signal is
emitted.</p>
<p><a href="qaudioinput.html#symbian-platform-security-requirements">QAudioInput#Symbian
Platform Security Requirements</a></p>
<p><b>See also</b> <a href="qiodevice.html">QIODevice</a>.</p>
<h3 class="fn"><a name="start-2" /><a href="qiodevice.html">QIODevice</a> QAudioInput.start (<i>self</i>)</h3><p>Returns a pointer to a new <a href="qiodevice.html">QIODevice</a> that will be used to handle the data
transfer. This <a href="qiodevice.html">QIODevice</a> can be used
to <a href="qiodevice.html#read">read()</a> audio data directly.
You will typically connect to the <a href="qiodevice.html#readyRead">readyRead()</a> signal, and read from
the device in the slot you connect to. <a href="qaudioinput.html">QAudioInput</a> keeps ownership of the
device.</p>
<p>If able to access the systems audio device the <a href="qaudioinput.html#state">state</a>() is set to <a href="qaudio.html#State-enum">QAudio.IdleState</a>, <a href="qaudioinput.html#error">error</a>() is set to <a href="qaudio.html#Error-enum">QAudio.NoError</a> and the <a href="qaudioinput.html#stateChanged">stateChanged</a>() signal is
emitted.</p>
<p>If a problem occurs during this process the <a href="qaudioinput.html#error">error</a>() is set to <a href="qaudio.html#Error-enum">QAudio.OpenError</a>, <a href="qaudioinput.html#state">state</a>() is set to <a href="qaudio.html#State-enum">QAudio.StoppedState</a> and <a href="qaudioinput.html#stateChanged">stateChanged</a>() signal is
emitted.</p>
<p><a href="qaudioinput.html#symbian-platform-security-requirements">QAudioInput#Symbian
Platform Security Requirements</a></p>
<p><b>See also</b> <a href="qiodevice.html">QIODevice</a>.</p>
<h3 class="fn"><a name="state" /><a href="qaudio.html#State-enum">QAudio.State</a> QAudioInput.state (<i>self</i>)</h3><p>Returns the state of audio processing.</p>
<h3 class="fn"><a name="stop" />QAudioInput.stop (<i>self</i>)</h3><p>Stops the audio input, detaching from the system resource.</p>
<p>Sets <a href="qaudioinput.html#error">error</a>() to <a href="qaudio.html#Error-enum">QAudio.NoError</a>, <a href="qaudioinput.html#state">state</a>() to <a href="qaudio.html#State-enum">QAudio.StoppedState</a> and emit <a href="qaudioinput.html#stateChanged">stateChanged</a>() signal.</p>
<h3 class="fn"><a name="suspend" />QAudioInput.suspend (<i>self</i>)</h3><p>Stops processing audio data, preserving buffered audio data.</p>
<p>Sets <a href="qaudioinput.html#error">error</a>() to <a href="qaudio.html#Error-enum">QAudio.NoError</a>, <a href="qaudioinput.html#state">state</a>() to <a href="qaudio.html#State-enum">QAudio.SuspendedState</a> and emit
<a href="qaudioinput.html#stateChanged">stateChanged</a>()
signal.</p>
<hr /><h2>Qt Signal Documentation</h2><h3 class="fn"><a name="notify" />void notify ()</h3><p>This is the default overload of this signal.</p><p>This signal is emitted when x ms of audio data has been
processed the interval set by setNotifyInterval(x).</p>
<h3 class="fn"><a name="stateChanged" />void stateChanged ( ::QAudio::State)</h3><p>This is the default overload of this signal.</p><p>This signal is emitted when the device <i>state</i> has
changed.</p>
<address><hr /><div align="center"><table border="0" cellspacing="0" width="100%"><tr class="address"><td align="left" width="25%">PyQt 4.12.1 for X11</td><td align="center" width="50%">Copyright © <a href="http://www.riverbankcomputing.com">Riverbank Computing Ltd</a> and <a href="http://www.qt.io">The Qt Company</a> 2015</td><td align="right" width="25%">Qt 4.8.7</td></tr></table></div></address></body></html>
|