uTools-Manuals/docs/java/javax/sound/sampled/TargetDataLine.html

264 lines
18 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="header">
<div class="subTitle">
javax.sound.sampled
</div>
<h2 class="title" title="Interface TargetDataLine">Interface TargetDataLine</h2>
</div><div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>
All Superinterfaces:
</dt>
<dd>
<span><a href="../../../java/lang/AutoCloseable.html" title="java.lang中的接口">AutoCloseable</a> <a href="../../../javax/sound/sampled/DataLine.html" title="javax.sound.sampled中的接口">DataLine</a> <a href="../../../javax/sound/sampled/Line.html" title="javax.sound.sampled中的接口">Line</a></span>
</dd>
</dl>
<hr/> <br/> <pre>public interface <span class="typeNameLabel">TargetDataLine</span>
extends <a href="../../../javax/sound/sampled/DataLine.html" title="interface in javax.sound.sampled">DataLine</a></pre>
<div class="block">
<span>目标数据线是可<code><a href="../../../javax/sound/sampled/DataLine.html" title="interface in javax.sound.sampled"><code>DataLine</code></a></code>读取音频数据的类型<code><a href="../../../javax/sound/sampled/DataLine.html" title="interface in javax.sound.sampled"><code>DataLine</code></a></code></span>
<span>最常见的示例是从音频捕获设备获取其数据的数据线。</span>
<span>(该设备实现为写入目标数据线的混音器。)</span>
<p> <span>请注意,此接口的命名约定反映了线路与其调音台之间的关系。</span> <span>从应用的角度来看,目标数据线可以用作音频数据的源。</span> </p>
<p> <span>目标数据线可以通过调用具有适当的<code><a href="../../../javax/sound/sampled/DataLine.Info.html" title="class in javax.sound.sampled"><code>DataLine.Info</code></a></code>对象的<code>Mixer</code><code><a href="../../../javax/sound/sampled/Mixer.html#getLine-javax.sound.sampled.Line.Info-"><code>getLine</code></a></code>方法从混合器获得。</span> </p>
<p> <span><code>TargetDataLine</code>接口提供了从目标数据线缓冲区读取捕获数据的方法。记录音频的应用程序应该从目标数据行读取数据足够快,以防止缓冲区溢出,这可能导致被捕获的数据的不连续性作为点击。</span> <span>应用程序可以使用<code><a href="../../../javax/sound/sampled/DataLine.html#available--"><code>available</code></a></code>中所定义的方法<code>DataLine</code>界面来确定当前在数据线的缓冲器排队的数据的量。</span> <span>如果缓冲区溢出,则丢弃最旧的排队数据并替换为新数据。</span> </p>
</div>
<dl>
<dt>
<span class="simpleTagLabel">从以下版本开始:</span>
</dt>
<dd>
1.3
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sound/sampled/Mixer.html" title="javax.sound.sampled中的接口"><code>Mixer</code></a> <a href="../../../javax/sound/sampled/DataLine.html" title="javax.sound.sampled中的接口"><code>DataLine</code></a> <a href="../../../javax/sound/sampled/SourceDataLine.html" title="javax.sound.sampled中的接口"><code>SourceDataLine</code></a></span>
</dd>
</dl> </li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- --> </a> <h3>Nested Class Summary</h3>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.javax.sound.sampled.DataLine">
<!-- --> </a> <h3>Nested classes/interfaces inherited from interface javax.sound.sampled.<a href="../../../javax/sound/sampled/DataLine.html" title="interface in javax.sound.sampled">DataLine</a></h3> <code><a href="../../../javax/sound/sampled/DataLine.Info.html" title="class in javax.sound.sampled">DataLine.Info</a></code></li>
</ul> </li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- --> </a> <h3>方法摘要</h3>
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Method Summary table, listing methods, and an explanation">
<caption>
<span class="activeTableTab" id="t0"><span>所有方法</span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t2"><span><a href="javascript:show(2);">接口方法</a></span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t3"><span><a href="javascript:show(4);">抽象方法</a></span><span class="tabEnd"> </span></span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor" id="i0">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sound/sampled/TargetDataLine.html#open-javax.sound.sampled.AudioFormat-">open</a></span>(<a href="../../../javax/sound/sampled/AudioFormat.html" title="class in javax.sound.sampled">AudioFormat</a> format)</code>
<div class="block">
以指定的格式打开行,使该行获取任何所需的系统资源,并可以运行。
</div> </td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sound/sampled/TargetDataLine.html#open-javax.sound.sampled.AudioFormat-int-">open</a></span>(<a href="../../../javax/sound/sampled/AudioFormat.html" title="class in javax.sound.sampled">AudioFormat</a> format, int bufferSize)</code>
<div class="block">
打开具有指定格式和请求的缓冲区大小的行,使该行获取任何所需的系统资源并变为可操作。
</div> </td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/sound/sampled/TargetDataLine.html#read-byte:A-int-int-">read</a></span>(byte[] b, int off, int len)</code>
<div class="block">
从数据线的输入缓冲区读取音频数据。
</div> </td>
</tr>
</tbody>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.javax.sound.sampled.DataLine">
<!-- --> </a> <h3>Methods inherited from interface javax.sound.sampled.<a href="../../../javax/sound/sampled/DataLine.html" title="interface in javax.sound.sampled">DataLine</a></h3> <code><a href="../../../javax/sound/sampled/DataLine.html#available--">available</a>, <a href="../../../javax/sound/sampled/DataLine.html#drain--">drain</a>, <a href="../../../javax/sound/sampled/DataLine.html#flush--">flush</a>, <a href="../../../javax/sound/sampled/DataLine.html#getBufferSize--">getBufferSize</a>, <a href="../../../javax/sound/sampled/DataLine.html#getFormat--">getFormat</a>, <a href="../../../javax/sound/sampled/DataLine.html#getFramePosition--">getFramePosition</a>, <a href="../../../javax/sound/sampled/DataLine.html#getLevel--">getLevel</a>, <a href="../../../javax/sound/sampled/DataLine.html#getLongFramePosition--">getLongFramePosition</a>, <a href="../../../javax/sound/sampled/DataLine.html#getMicrosecondPosition--">getMicrosecondPosition</a>, <a href="../../../javax/sound/sampled/DataLine.html#isActive--">isActive</a>, <a href="../../../javax/sound/sampled/DataLine.html#isRunning--">isRunning</a>, <a href="../../../javax/sound/sampled/DataLine.html#start--">start</a>, <a href="../../../javax/sound/sampled/DataLine.html#stop--">stop</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.javax.sound.sampled.Line">
<!-- --> </a> <h3>Methods inherited from interface javax.sound.sampled.<a href="../../../javax/sound/sampled/Line.html" title="interface in javax.sound.sampled">Line</a></h3> <code><a href="../../../javax/sound/sampled/Line.html#addLineListener-javax.sound.sampled.LineListener-">addLineListener</a>, <a href="../../../javax/sound/sampled/Line.html#close--">close</a>, <a href="../../../javax/sound/sampled/Line.html#getControl-javax.sound.sampled.Control.Type-">getControl</a>, <a href="../../../javax/sound/sampled/Line.html#getControls--">getControls</a>, <a href="../../../javax/sound/sampled/Line.html#getLineInfo--">getLineInfo</a>, <a href="../../../javax/sound/sampled/Line.html#isControlSupported-javax.sound.sampled.Control.Type-">isControlSupported</a>, <a href="../../../javax/sound/sampled/Line.html#isOpen--">isOpen</a>, <a href="../../../javax/sound/sampled/Line.html#open--">open</a>, <a href="../../../javax/sound/sampled/Line.html#removeLineListener-javax.sound.sampled.LineListener-">removeLineListener</a></code></li>
</ul> </li>
</ul> </li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- --> </a> <h3>方法详细信息</h3> <a name="open-javax.sound.sampled.AudioFormat-int-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>open</h4> <pre>void open(<a href="../../../javax/sound/sampled/AudioFormat.html" title="class in javax.sound.sampled">AudioFormat</a> format,
int bufferSize)
throws <a href="../../../javax/sound/sampled/LineUnavailableException.html" title="class in javax.sound.sampled">LineUnavailableException</a></pre>
<div class="block">
<span>打开具有指定格式和请求的缓冲区大小的行,使该行获取任何所需的系统资源并变为可操作。</span>
<p> <span>缓冲区大小以字节指定,但必须表示整数个采样帧。</span> <span>以不满足此要求的请求缓冲区大小调用此方法可能会导致IllegalArgumentException异常。</span> <span>开放行的实际缓冲区大小可能与请求的缓冲区大小不同。</span> <span>实际设置的值可以随后调用<code><a href="../../../javax/sound/sampled/DataLine.html#getBufferSize--"><code>DataLine.getBufferSize()</code></a></code>来查询</span> </p>
<p> <span>如果此操作成功,该行将被标记为打开,并且<code><a href="../../../javax/sound/sampled/LineEvent.Type.html#OPEN"><code>OPEN</code></a></code>事件将调度到该行的监听器。</span> </p>
<p> <span>在已经打开的行上调用此方法是非法的,可能会导致<code>IllegalStateException</code></span> </p>
<p> <span>一些封闭的线条无法重新开放。</span> <span>尝试重新打开此行将始终导致<code>LineUnavailableException</code></span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>format</code> - 所需的音频格式
</dd>
<dd>
<code>bufferSize</code> - 所需的缓冲区大小(以字节为单位)。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../javax/sound/sampled/LineUnavailableException.html" title="class in javax.sound.sampled">LineUnavailableException</a></code> - 如果由于资源限制,该行无法打开
</dd>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果缓冲区大小不表示采样帧的整数,或者
<code>format</code>未完全指定或无效
</dd>
<dd>
<code><a href="../../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果该行已经打开
</dd>
<dd>
<code><a href="../../../java/lang/SecurityException.html" title="class in java.lang">SecurityException</a></code> - 如果由于安全限制,该行无法打开
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sound/sampled/TargetDataLine.html#open-javax.sound.sampled.AudioFormat-"><code>open(AudioFormat)</code></a> <a href="../../../javax/sound/sampled/Line.html#open--"><code>Line.open()</code></a> <a href="../../../javax/sound/sampled/Line.html#close--"><code>Line.close()</code></a> <a href="../../../javax/sound/sampled/Line.html#isOpen--"><code>Line.isOpen()</code></a> <a href="../../../javax/sound/sampled/LineEvent.html" title="javax.sound.sampled中的类"><code>LineEvent</code></a></span>
</dd>
</dl> </li>
</ul> <a name="open-javax.sound.sampled.AudioFormat-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>open</h4> <pre>void open(<a href="../../../javax/sound/sampled/AudioFormat.html" title="class in javax.sound.sampled">AudioFormat</a> format)
throws <a href="../../../javax/sound/sampled/LineUnavailableException.html" title="class in javax.sound.sampled">LineUnavailableException</a></pre>
<div class="block">
<span>以指定的格式打开行,使该行获取任何所需的系统资源,并可以运行。</span>
<p> <span>该实现选择一个缓冲区大小,以字节为单位测量,但包含整数个采样帧。</span> <span>系统选择的缓冲区大小可以随后调用<code><a href="../../../javax/sound/sampled/DataLine.html#getBufferSize--"><code>DataLine.getBufferSize()</code></a></code>来查询</span> </p>
<p> <span>如果此操作成功,该行将被标记为打开,并且<code><a href="../../../javax/sound/sampled/LineEvent.Type.html#OPEN"><code>OPEN</code></a></code>事件将调度到该行的监听器。</span> </p>
<p> <span>在已经打开的行上调用此方法是非法的,可能会导致<code>IllegalStateException</code></span> </p>
<p> <span>一些封闭的线条无法重新开放。</span> <span>尝试重新打开此行将始终导致<code>LineUnavailableException</code></span> </p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>format</code> - 所需的音频格式
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../javax/sound/sampled/LineUnavailableException.html" title="class in javax.sound.sampled">LineUnavailableException</a></code> - 如果由于资源限制,该行无法打开
</dd>
<dd>
<code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果
<code>format</code>未完全指定或无效
</dd>
<dd>
<code><a href="../../../java/lang/IllegalStateException.html" title="class in java.lang">IllegalStateException</a></code> - 如果该行已经打开
</dd>
<dd>
<code><a href="../../../java/lang/SecurityException.html" title="class in java.lang">SecurityException</a></code> - 如果由于安全限制,该行无法打开
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../javax/sound/sampled/TargetDataLine.html#open-javax.sound.sampled.AudioFormat-int-"><code>open(AudioFormat, int)</code></a> <a href="../../../javax/sound/sampled/Line.html#open--"><code>Line.open()</code></a> <a href="../../../javax/sound/sampled/Line.html#close--"><code>Line.close()</code></a> <a href="../../../javax/sound/sampled/Line.html#isOpen--"><code>Line.isOpen()</code></a> <a href="../../../javax/sound/sampled/LineEvent.html" title="javax.sound.sampled中的类"><code>LineEvent</code></a></span>
</dd>
</dl> </li>
</ul> <a name="read-byte:A-int-int-">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>read</h4> <pre>int read(byte[] b,
int off,
int len)</pre>
<div class="block">
<span>从数据线的输入缓冲区读取音频数据。</span>
<span>请求的字节数被读入指定的数组,从指定的偏移开始到数组中,以字节为单位。</span>
<span>该方法阻塞,直到所请求的数据量被读取为止。</span>
<span>但是,如果在读取请求的数据量之前关闭数据线,停止,排出或刷新,则该方法不再阻塞,但返回到目前为止读取的字节数。</span>
<p> <span>可以不受阻塞读取的字节数可以使用被确定<code><a href="../../../javax/sound/sampled/DataLine.html#available--"><code>available</code></a></code>所述的方法<code>DataLine</code>接口。</span> <span>(虽然保证这个字节数可以无阻塞地读取,但不能保证读取附加数据的尝试将被阻止。)</span> </p>
<p> <span>要读取的字节数必须表示整数个采样帧,使得:</span> <br/></p>
<center>
<code>[ bytes read ] % [frame size in bytes ] == 0</code>
</center>
<br/>
<span>返回值将始终满足此要求。</span>
<span>读取表示非整数样本帧的字节数的请求无法实现并可能导致IllegalArgumentException异常。</span>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>b</code> - 当该方法返回时将包含所请求的输入数据的字节数组
</dd>
<dd>
<code>off</code> - 数组
<code>off</code>的偏移量(以字节为单位)
</dd>
<dd>
<code>len</code> - 要读取的请求的字节数
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
实际读取的字节数
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<span><code><a href="../../../java/lang/IllegalArgumentException.html" title="class in java.lang">IllegalArgumentException</a></code> - 如果请求的字节数不表示整数个样本帧。</span>
<span>或者如果<code>len</code>为负数。</span>
</dd>
<dd>
<code><a href="../../../java/lang/ArrayIndexOutOfBoundsException.html" title="class in java.lang">ArrayIndexOutOfBoundsException</a></code> - 如果
<code>off</code>为负数,或
<code>off+len</code>大于阵列长度
<code>b</code>
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../javax/sound/sampled/SourceDataLine.html#write-byte:A-int-int-"><code>SourceDataLine.write(byte[], int, int)</code></a>
<a href="../../../javax/sound/sampled/DataLine.html#available--"><code>DataLine.available()</code></a>
</dd>
</dl> </li>
</ul> </li>
</ul> </li>
</ul>
</div>
</div>