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
|
---
title: AudioBuffer
slug: Web/API/AudioBuffer
tags:
- API
- Experimental
- Reference
- Web Audio API
translation_of: Web/API/AudioBuffer
---
<p>{{APIRef("Web Audio API")}}</p>
<p>L'interface AudioBuffer représente une ressource audio stockée en mémoire, créée à partir d'un fichier audio avec la méthode {{ domxref("AudioContext.decodeAudioData()") }}, ou à partir de données brutes avec {{ domxref("AudioContext.createBuffer()") }}. Une fois mises en mémoire dans un AudioBuffer, les données audio sont transférées dans un {{ domxref("AudioBufferSourceNode") }} afin d'être lues.<br>
<br>
Ce type d'objet est conçu pour contenir de petit extraits audio, durant généralement moins de 45s. Pour les sons plus longs, les objets implémentant {{domxref ("MediaAudioElementSourceNode")}} sont plus adaptés. La mémoire tampon contient des données au format non entrelacé IEEE 32-bit PCM linéaire, avec une portée nominale comprise entre -1 et +1. S'il y a plusieurs canaux, ils sont stockés dans des mémoires-tampon distinctes.</p>
<h2 id="Constructeur">Constructeur</h2>
<dl>
<dt>{{domxref("AudioBuffer.AudioBuffer", "AudioBuffer()")}}</dt>
<dd>Crée et retourne un nouvel objet <code>AudioBuffer</code>.</dd>
</dl>
<h2 id="Propriétés">Propriétés</h2>
<dl>
<dt>{{domxref("AudioBuffer.sampleRate")}} {{readonlyInline}}</dt>
<dd>Retourne un nombre flottant qui représente la fréquence d'échantillonnage, en échantillons par seconde, des données PCM stockées dans la mémoire tampon.</dd>
<dt>{{domxref("AudioBuffer.length")}} {{readonlyInline}}</dt>
<dd>Retourne un nombre entier qui représente la longueur, en trames d'échantillonnage , des données PCM stockées dans la mémoire tampon.</dd>
<dt>{{domxref("AudioBuffer.duration")}} {{readonlyInline}}</dt>
<dd>Retourne un nombre à virgule flottante de double précision qui représente la durée, exprimée en secondes, des données PCM stockées dans la mémoire tampon.</dd>
<dt>{{domxref("AudioBuffer.numberOfChannels")}} {{readonlyInline}}</dt>
<dd>Retourne un nombre entier qui représente le nombre de canaux audio discrets décrits par les données PCM stockées dans la mémoire tampon.</dd>
</dl>
<h2 id="Méthodes">Méthodes</h2>
<dl>
<dt>{{domxref("AudioBuffer.getChannelData()")}}</dt>
<dd>Retourne un {{domxref ("Float32Array")}} contenant les données PCM associés au canal, défini par l'index du canal (0 représentant le premier canal).</dd>
<dt>{{domxref("AudioBuffer.copyFromChannel()")}}</dt>
<dd>Copie les échantillons du canal associé à <span class="idlType"><code>AudioBuffer</code></span> dans un tableau de destination.</dd>
<dt>{{domxref("AudioBuffer.copyToChannel()")}}</dt>
<dd>Copie les échantillons dans le canal associé à <span class="idlType"><code>AudioBuffer</code></span>, depuis le tableau <code>source</code>.</dd>
</dl>
<h2 id="Exemple">Exemple</h2>
<p>L'exemple suivant montre comment créer un <code>AudioBuffer</code> et le remplir avec du bruit blanc. Le code source est disponible sur notre repo <a href="https://github.com/mdn/audio-buffer">audio-buffer demo</a>; une <a href="http://mdn.github.io/audio-buffer/">version live</a> est également consultable.</p>
<pre class="brush: js;highlight:[7,14,27] line-numbers language-js"><code class="language-js"><span class="comment token">// Stéréo</span>
<span class="keyword token">var</span> nombreCanaux <span class="operator token">=</span> <span class="number token">2</span><span class="punctuation token">;</span>
<span class="comment token">// Crée une mémoire tampon vide de 2 secondes</span>
<span class="comment token">// à la fréquence d'échantillonage du contexte AudioContext</span>
<span class="keyword token">var</span> nombreFrames <span class="operator token">=</span> contexteAudio<span class="punctuation token">.</span>sampleRate <span class="operator token">*</span> <span class="number token">2.0</span><span class="punctuation token">;</span>
<span class="keyword token">var</span> tableauDonnees <span class="operator token">=</span> audioCtx<span class="punctuation token">.</span><span class="function token">createBuffer</span><span class="punctuation token">(</span>nombreCanaux<span class="punctuation token">,</span> nombreFrames<span class="punctuation token">,</span> contexteAudio<span class="punctuation token">.</span>sampleRate<span class="punctuation token">)</span><span class="punctuation token">;</span>
bouton<span class="punctuation token">.</span>onclick <span class="operator token">=</span> <span class="keyword token">function</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
<span class="comment token">// remplit la mémoire tampon avec du bruit blanc</span>
<span class="comment token">// valeurs aléatoires entre -1.0 et 1.0</span>
<span class="keyword token">for</span> <span class="punctuation token">(</span><span class="keyword token">var</span> canal <span class="operator token">=</span> <span class="number token">0</span><span class="punctuation token">;</span> canal <span class="operator token"><</span> nombreCanaux<span class="punctuation token">;</span> canal<span class="operator token">++</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
<span class="comment token">// génère le tableau contenant les données</span>
<span class="keyword token">var</span> tampon <span class="operator token">=</span> tableauDonnees<span class="punctuation token">.</span><span class="function token">getChannelData</span><span class="punctuation token">(canal</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="keyword token">for</span> <span class="punctuation token">(</span><span class="keyword token">var</span> i <span class="operator token">=</span> <span class="number token">0</span><span class="punctuation token">;</span> i <span class="operator token"><</span> nombreFrames<span class="punctuation token">;</span> i<span class="operator token">++</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
<span class="comment token">// Math.random() donne une valeur comprise entre [0; 1.0]</span>
<span class="comment token">// l'audio doit être compris entre [-1.0; 1.0]</span>
tampon<span class="punctuation token">[</span>i<span class="punctuation token">]</span> <span class="operator token">=</span> Math<span class="punctuation token">.</span><span class="function token">random</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="operator token">*</span> <span class="number token">2</span> <span class="operator token">-</span> <span class="number token">1</span><span class="punctuation token">;</span>
<span class="punctuation token">}</span>
<span class="punctuation token">}</span>
<span class="comment token">// Récupère un AudioBufferSourceNode.</span>
<span class="comment token">// C'est un AudioNode à utiliser quand on veut jouer AudioBuffer</span>
<span class="keyword token">var</span> source <span class="operator token">=</span> contexteAudio<span class="punctuation token">.</span><span class="function token">createBufferSource</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="comment token">// assigne le buffer au AudioBufferSourceNode</span>
source<span class="punctuation token">.</span>buffer <span class="operator token">=</span> tableauDonnees<span class="punctuation token">;</span>
<span class="comment token">// connecte le AudioBufferSourceNode avec</span>
<span class="comment token">// la destination pour qu'on puisse entendre le son</span>
source<span class="punctuation token">.</span><span class="function token">connect</span><span class="punctuation token">(</span>contexteAudio<span class="punctuation token">.</span>destination<span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="comment token">// lance la lecture du so</span>
source<span class="punctuation token">.</span><span class="function token">start</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="punctuation token">}</span></code></pre>
<h2 id="Spécifications">Spécifications</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Spécification</th>
<th scope="col">Statut</th>
<th scope="col">Commentaire</th>
</tr>
<tr>
<td>{{SpecName('Web Audio API', '#AudioBuffer-section', 'AudioBuffer')}}</td>
<td>{{Spec2('Web Audio API')}}</td>
<td>Définition initiale</td>
</tr>
</tbody>
</table>
<h2 id="Compatibilité_navigateurs">Compatibilité navigateurs</h2>
<div>{{CompatibilityTable}}</div>
<div id="compat-desktop">
<table class="compat-table">
<tbody>
<tr>
<th>Feature</th>
<th>Chrome</th>
<th>Edge</th>
<th>Firefox (Gecko)</th>
<th>Internet Explorer</th>
<th>Opera</th>
<th>Safari (WebKit)</th>
</tr>
<tr>
<td>Support basique</td>
<td>{{CompatChrome(14.0)}} {{property_prefix("webkit")}}</td>
<td>{{CompatVersionUnknown}}</td>
<td>{{CompatGeckoDesktop(25)}}</td>
<td>{{CompatNo}}</td>
<td>{{CompatOpera(15)}} {{property_prefix("webkit")}}<br>
{{CompatOpera(22)}}</td>
<td>6 {{property_prefix("webkit")}}</td>
</tr>
<tr>
<td><code>copyFromChannel()</code> and <code>copyToChannel()</code></td>
<td>{{CompatVersionUnknown}}</td>
<td>{{CompatVersionUnknown}}</td>
<td>{{CompatGeckoDesktop(27)}}</td>
<td>{{CompatNo}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatNo}}</td>
</tr>
<tr>
<td>constructeur</td>
<td>{{CompatChrome(55.0)}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatOpera(42)}}</td>
<td>{{CompatUnknown}}</td>
</tr>
</tbody>
</table>
</div>
<div id="compat-mobile">
<table class="compat-table">
<tbody>
<tr>
<th>Fonctionnalité</th>
<th>Android</th>
<th>Android Webview</th>
<th>Edge</th>
<th>Firefox Mobile (Gecko)</th>
<th>Firefox OS</th>
<th>IE Phone</th>
<th>Opera Mobile</th>
<th>Safari Mobile</th>
<th>Chrome for Android</th>
</tr>
<tr>
<td>Support basique</td>
<td>{{CompatNo}}</td>
<td>{{CompatVersionUnknown}}</td>
<td>{{CompatVersionUnknown}}</td>
<td>{{CompatGeckoMobile(25)}}</td>
<td>1.2</td>
<td>{{CompatNo}}</td>
<td>{{CompatVersionUnknown}}</td>
<td>6 {{property_prefix("webkit")}}</td>
<td>{{CompatChrome(28.0)}} {{property_prefix("webkit")}}</td>
</tr>
<tr>
<td><code>copyFromChannel()</code> and <code>copyToChannel()</code></td>
<td>{{CompatNo}}</td>
<td>{{CompatVersionUnknown}}</td>
<td>{{CompatVersionUnknown}}</td>
<td>{{CompatGeckoMobile(27)}}</td>
<td> </td>
<td>{{CompatNo}}</td>
<td>{{CompatVersionUnknown}}</td>
<td>{{CompatNo}}</td>
<td>{{CompatVersionUnknown}}</td>
</tr>
<tr>
<td>constructeur</td>
<td>{{CompatNo}}</td>
<td>{{CompatChrome(55.0)}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatOperaMobile(42)}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatChrome(55.0)}}</td>
</tr>
</tbody>
</table>
</div>
<h2 id="Voir_aussi">Voir aussi</h2>
<ul>
<li><a href="https://developer.mozilla.org/fr/docs/Web/API/Web_Audio_API/Using_Web_Audio_API">Utiliser la Web Audio API</a></li>
</ul>
|