blob: 84d15b5d2d8c2f88997e620bb583d70ea36ba0ac (
plain)
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
|
---
title: AudioBufferSourceNode
slug: Web/API/AudioBufferSourceNode
translation_of: Web/API/AudioBufferSourceNode
---
<div>{{APIRef("Web Audio API")}}</div>
<p><span class="seoSummary"><strong><code>AudioBufferSourceNode</code></strong> 의 오디오 소스는 in-memory 의 {{domxref("AudioNode")}} 상에 저장된 데이터로 구성되어있다. 이는 오디오 소스 그 자체처럼 동작을 한다.</span></p>
<p><code>AudioBufferSourceNode</code> 는 입력정보를 가지지 않고 정확히 하나의 출력정보를 가진다. 출력상의 여러 채널은 <code>AudioBufferSourceNode.buffer</code> 프로퍼티로로 동작할 {{domxref("AudioBuffer")}} 의 채널의 수와 일치한다. 만약에 <code>AudioBufferSourceNode.buffer</code>가 <code>null</code>이라면 출력은 오직 무음으로 출력이된다. {{domxref("AudioBufferSourceNode")}}는 오직 한번만 재생이 된다. 즉 <code>AudioBufferSourceNode.start()</code>가 한번만 호출될수 있다. 만약에 한번더 재생하기를 원한다면 또 다른 <code>AudioBufferSourceNode</code>를 생성해야 한다. 이 노드는 매우 간편히 생성가능하다. <code>AudioBuffer</code>는 다른 곳에서 접근해 재생이 가능하다. <code>AudioBufferSourceNode</code>s는 "fire and forget(쓰고 잊자)" 처럼 한번 쓰고 나면 해당노드의 모든 참조들이 없어지고 자동적으로 가비지 콜렉터로 가게된다.</p>
<p>여러번 실행을 하면 <code>AudioBufferSourceNode.stop()</code>을 통해 정지가 가능하다. 가장 최근의 실행된것이 이전의 것으로 대체가 되어 <code>AudioBufferSourceNode</code>버퍼의 마지막에 도착하지 않은 상태가 된다.</p>
<p><br>
<img alt="The AudioBufferSourceNode takes the content of an AudioBuffer and m" src="https://mdn.mozillademos.org/files/9717/WebAudioAudioBufferSourceNode.png" style="display: block; height: 193px; margin: 0px auto; width: 365px;"></p>
<table class="properties">
<tbody>
<tr>
<th scope="row">Number of inputs</th>
<td><code>0</code></td>
</tr>
<tr>
<th scope="row">Number of outputs</th>
<td><code>1</code></td>
</tr>
<tr>
<th scope="row">Channel count</th>
<td>defined by the associated {{domxref("AudioBuffer")}}</td>
</tr>
</tbody>
</table>
<h2 id="Properties">Properties</h2>
<p><em> </em><em>{{domxref("AudioNode")}}</em> 를 부모로 가지는 프로퍼티.</p>
<dl>
<dt>{{domxref("AudioBufferSourceNode.buffer")}}</dt>
<dd>{{domxref("AudioBuffer")}} 의 음원이 재생이 되거나 값이 NULL 이라면 채널하나을 무음으로 정의한다.</dd>
<dt>{{domxref("AudioBufferSourceNode.playbackRate")}} {{readOnlyinline}}</dt>
<dd>{{domxref("AudioParam")}}에는 두개의 파라메터가 있는 데 그중의 하나인 <a href="/ko/docs/Web/API/AudioParam#a-rate">a-rate</a>을 재생이될 정보의 속도요소로 정의 한다. 출력에 수정된 음의 보정이 있지않으므로 이 는 샘플의 음을 변경하는데 사용이 가능하다.</dd>
<dt>{{domxref("AudioBufferSourceNode.loop")}}</dt>
<dd>Boolean값으로 음원이 재생되어 {{domxref("AudioBuffer")}}의 끝에 다달했음을 알리는 값이다. false를 기본값으로 가진다.</dd>
<dt>{{domxref("AudioBufferSourceNode.loopStart")}}</dt>
<dd>double값으로 {{domxref("AudioBuffer")}}가 재시작이 되는 경우 반드시 발생한다. 기본값은 0이다.</dd>
<dt>{{domxref("AudioBufferSourceNode.loopEnd")}}</dt>
<dd>double값으로 {{domxref("AudioBuffer")}}가 다시 재생이 되는 경우 재생을 멈춰야 한다(그리고 결국에는 다시 시작한다). 기본값은 0이다.</dd>
</dl>
<h3 id="Event_handlers">Event handlers</h3>
<dl>
<dt>{{domxref("AudioBufferSourceNode.onended")}}</dt>
<dd>{{domxref("EventHandler")}}로 {{event("ended_(Web_Audio)", "ended")}}이벤트와 연관된 콜백함수를 가진다.</dd>
</dl>
<h2 id="Methods">Methods</h2>
<p><em>{{domxref("AudioNode")}}</em> 를 부모로 가지는 매서드.</p>
<dl>
<dt>{{domxref("AudioBufferSourceNode.start()")}}</dt>
<dd>음원이 재생되는 시작되는 시점.</dd>
<dt>{{domxref("AudioBufferSourceNode.stop()")}}</dt>
<dd>음원이 재생되는 끝나는 시점.</dd>
</dl>
<h2 id="Examples">Examples</h2>
<p>이 예제는 two-second buffer를 생성하여 화이트 노이즈로 채워 이를 <code>AudioBufferSourceNode을 통해 재생한다.</code></p>
<div class="note">
<p><strong>Note</strong>: You can also <a class="external external-icon" href="http://mdn.github.io/audio-buffer/">run the code live</a>, or <a class="external external-icon" href="https://github.com/mdn/audio-buffer">view the source</a>.</p>
</div>
<pre class="brush: js">var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var button = document.querySelector('button');
var pre = document.querySelector('pre');
var myScript = document.querySelector('script');
pre.innerHTML = myScript.innerHTML;
// Stereo
var channels = 2;
// Create an empty two-second stereo buffer at the
// sample rate of the AudioContext
var frameCount = audioCtx.sampleRate * 2.0;
var myArrayBuffer = audioCtx.createBuffer(2, frameCount, audioCtx.sampleRate);
button.onclick = function() {
// Fill the buffer with white noise;
//just random values between -1.0 and 1.0
for (var channel = 0; channel < channels; channel++) {
// This gives us the actual ArrayBuffer that contains the data
var nowBuffering = myArrayBuffer.getChannelData(channel);
for (var i = 0; i < frameCount; i++) {
// Math.random() is in [0; 1.0]
// audio needs to be in [-1.0; 1.0]
nowBuffering[i] = Math.random() * 2 - 1;
}
}
// Get an AudioBufferSourceNode.
// This is the AudioNode to use when we want to play an AudioBuffer
var source = audioCtx.createBufferSource();
// set the buffer in the AudioBufferSourceNode
source.buffer = myArrayBuffer;
// connect the AudioBufferSourceNode to the
// destination so we can hear the sound
source.connect(audioCtx.destination);
// start the source playing
source.start();
}</pre>
<div class="note">
<p><strong>Note</strong>: For a <code>decodeAudioData</code> example, see the {{domxref("AudioContext.decodeAudioData")}} page.</p>
</div>
<h2 id="Specification">Specification</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</th>
</tr>
<tr>
<td>{{SpecName('Web Audio API', '#the-audiobuffersourcenode-interface', 'AudioBufferSourceNode')}}</td>
<td>{{Spec2('Web Audio API')}}</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="Browser_compatibility">Browser compatibility</h2>
<div>{{Compat("api.AudioBufferSourceNode")}}</div>
<h2 id="See_also">See also</h2>
<ul>
<li><a href="/en-US/docs/Web/API/Web_Audio_API/Using_Web_Audio_API">Using the Web Audio API</a></li>
</ul>
|