recursal/MDN huggingface dataset:
AnalyserNode: minDecibels プロパティ
===============================

**`minDecibels`** は `AnalyserNode` インターフェイスのプロパティで、符号なしバイト値に変換するための、 FFT 分析データの拡大縮小する範囲の最小出力値を表す double 値です。基本的には、 `getByteFrequencyData()` を使用したときの結果の範囲の最小値を指定します。

値
-

double 値で、 FFT 解析データを拡大縮小する際の最小デシベル値を表します。`0` dB は使用可能な最も小さな音、`-10` dB はその 10 分の 1 などです。既定値は `-100` dB です。

`getByteFrequencyData()` からデータを取得した場合、振幅が `minDecibels` 以下の周波数は `0` として返されます。

**メモ:** `AnalyserNode.maxDecibels` より大きい値を設定すると、 `INDEX_SIZE_ERR` 例外が発生します。

例
-

 次の例では、 `AudioContext` で `AnalyserNode` を作成し、 `requestAnimationFrame` と `<canvas>` で時刻領域のデータを繰り返し収集し、現在の音声入力の「オシロスコープ」出力を描画する基本的な使用方法を示します。
 より完全な応用例/情報については、 Voice-change-O-matic のデモを調べてください（関連するコードは app.js の 108 ～ 193 行目を参照）。


```js
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
const analyser = audioCtx.createAnalyser();
analyser.minDecibels = -90;
analyser.maxDecibels = -10;

// …

analyser.fftSize = 256;
const bufferLength = analyser.frequencyBinCount;
console.log(bufferLength);
const dataArray = new Uint8Array(bufferLength);

canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);

function draw() {
  drawVisual = requestAnimationFrame(draw);

  analyser.getByteFrequencyData(dataArray);

  canvasCtx.fillStyle = "rgb(0, 0, 0)";
  canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);

  const barWidth = (WIDTH / bufferLength) \* 2.5;
  let barHeight;
  let x = 0;

  for (let i = 0; i < bufferLength; i++) {
    barHeight = dataArray[i];

    canvasCtx.fillStyle = `rgb(${barHeight + 100}, 50, 50)`;
    canvasCtx.fillRect(x, HEIGHT - barHeight / 2, barWidth, barHeight / 2);

    x += barWidth + 1;
  }
}

draw();
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-analysernode-mindecibels |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* ウェブオーディオ API の使用
AnalyserNode: smoothingTimeConstant プロパティ
=========================================

**`smoothingTimeConstant`** は `AnalyserNode` インターフェイスのプロパティで、最後の分析フレームとの平均化定数を表す double 値です。これは基本的に、現在のバッファーと `AnalyserNode` が処理した最後のバッファーとの間の平均であり、結果として、よりスムーズな時間による値の変化の集合になります。

値
-

doublet で、 `0` から `1` までの範囲内です（`0` は平均時間ではありません）。既定値は `0.8` です。

0 が設定されている場合、平均化は行われませんが、1 の値は「値を計算する間に前回と現在のバッファーがかなりオーバーラップする」ことを意味しており、実質的に `AnalyserNode.getFloatFrequencyData`/`AnalyserNode.getByteFrequencyData` 呼び出し間の変化を滑らかにします。

専門用語では、ブラックマンウィンドウを適用し、時間による値の変化を平滑化します。ほとんどの場合、既定値で十分です。

**メモ:** 0～1 の範囲の外の値を設定するには、 `INDEX_SIZE_ERR` 例外が発生します。

例
-

 次の例では、 `AudioContext` で `AnalyserNode` を作成し、 `requestAnimationFrame` と `<canvas>` で時刻領域のデータを繰り返し収集し、現在の音声入力の「オシロスコープ」出力を描画する基本的な使用方法を示します。
 より完全な応用例/情報については、 Voice-change-O-matic のデモを調べてください（関連するコードは app.js の 108 ～ 193 行目を参照）。

`smoothingTimeConstant()` が持つ効果に興味がある場合は、上記の例を複製して、代わりに `analyser.smoothingTimeConstant = 0;` を設定してみてください。値の変化がより激しくなることがわかるでしょう。


```js
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
const analyser = audioCtx.createAnalyser();
analyser.minDecibels = -90;
analyser.maxDecibels = -10;
analyser.smoothingTimeConstant = 0.85;

// …

analyser.fftSize = 256;
const bufferLength = analyser.frequencyBinCount;
console.log(bufferLength);
const dataArray = new Uint8Array(bufferLength);

canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);

function draw() {
  drawVisual = requestAnimationFrame(draw);

  analyser.getByteFrequencyData(dataArray);

  canvasCtx.fillStyle = "rgb(0, 0, 0)";
  canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);

  const barWidth = (WIDTH / bufferLength) \* 2.5;
  let barHeight;
  let x = 0;

  for (let i = 0; i < bufferLength; i++) {
    barHeight = dataArray[i];

    canvasCtx.fillStyle = `rgb(${barHeight + 100}, 50, 50)`;
    canvasCtx.fillRect(x, HEIGHT - barHeight / 2, barWidth, barHeight / 2);

    x += barWidth + 1;
  }
}

draw();
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-analysernode-smoothingtimeconstant |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* ウェブオーディオ API の使用
AnalyserNode: maxDecibels プロパティ
===============================

**`maxDecibels`** は `AnalyserNode` インターフェイスのプロパティで、符号なしバイト値に変換するための、 FFT 分析データの拡大縮小する範囲の最大出力値を表す double 値です。基本的には、 `getByteFrequencyData()` を使用したときの結果の範囲の最大値を指定します。

値
-

double 値で、 FFT 解析データを拡大縮小する際の最大デシベル値を表します。`0` dB は使用可能な最も大きな音、`-10` dB はその 10 分の 1 などです。既定値は `-30` dB です。

`getByteFrequencyData()` からデータを取得した場合、振幅が `maxDecibels` 以上の周波数は `255` として返されます。

### 例外

`IndexSizeError` `DOMException`

`AnalyserNode.minDecibels` 以下の値が設定されている場合に発生します。

例
-

 次の例では、 `AudioContext` で `AnalyserNode` を作成し、 `requestAnimationFrame` と `<canvas>` で時刻領域のデータを繰り返し収集し、現在の音声入力の「オシロスコープ」出力を描画する基本的な使用方法を示します。
 より完全な応用例/情報については、 Voice-change-O-matic のデモを調べてください（関連するコードは app.js の 108 ～ 193 行目を参照）。


```js
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
const analyser = audioCtx.createAnalyser();
analyser.minDecibels = -90;
analyser.maxDecibels = -10;

// …

analyser.fftSize = 256;
const bufferLength = analyser.frequencyBinCount;
console.log(bufferLength);
const dataArray = new Uint8Array(bufferLength);

canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);

function draw() {
  drawVisual = requestAnimationFrame(draw);

  analyser.getByteFrequencyData(dataArray);

  canvasCtx.fillStyle = "rgb(0, 0, 0)";
  canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);

  const barWidth = (WIDTH / bufferLength) \* 2.5;
  let barHeight;
  let x = 0;

  for (let i = 0; i < bufferLength; i++) {
    barHeight = dataArray[i];

    canvasCtx.fillStyle = `rgb(${barHeight + 100}, 50, 50)`;
    canvasCtx.fillRect(x, HEIGHT - barHeight / 2, barWidth, barHeight / 2);

    x += barWidth + 1;
  }
}

draw();
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-analysernode-maxdecibels |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* ウェブオーディオ API の使用
AnalyserNode: getByteTimeDomainData() メソッド
==========================================

**`getByteTimeDomainData()`** は `AnalyserNode` インターフェイスのメソッドで、渡される `Uint8Array` （符号なしバイト配列）に、現在の波形または時間領域のデータをコピーします。

配列の持つ要素が `AnalyserNode.fftSize` より少なかった場合、余分な要素は削除されます。必要以上の要素があった場合、余分な要素は無視されます。

構文
--


```js
getByteTimeDomainData(array)
```

### 引数

`array`

 時間領域データのコピー先の `Uint8Array` です。
 配列の持つ要素が `AnalyserNode.fftSize` より少なかった場合、余分な要素は削除されます。必要以上の要素があった場合、余分な要素は無視されます。


### 返値

なし (`undefined`)。

例
-

 次の例では、 `AudioContext` で `AnalyserNode` を作成し、 `requestAnimationFrame` と `<canvas>` で時刻領域のデータを繰り返し収集し、現在の音声入力の「オシロスコープ」出力を描画する基本的な使用方法を示します。
 より完全な応用例/情報については、 Voice-change-O-matic のデモを調べてください（関連するコードは app.js の 108 ～ 193 行目を参照）。


```js
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
const analyser = audioCtx.createAnalyser();

// …

analyser.fftSize = 2048;
const bufferLength = analyser.fftSize;
const dataArray = new Uint8Array(bufferLength);
analyser.getByteTimeDomainData(dataArray);

// draw an oscilloscope of the current audio source
function draw() {
  drawVisual = requestAnimationFrame(draw);
  analyser.getByteTimeDomainData(dataArray);

  canvasCtx.fillStyle = "rgb(200, 200, 200)";
  canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);

  canvasCtx.lineWidth = 2;
  canvasCtx.strokeStyle = "rgb(0, 0, 0)";

  const sliceWidth = (WIDTH \* 1.0) / bufferLength;
  let x = 0;

  canvasCtx.beginPath();
  for (let i = 0; i < bufferLength; i++) {
    const v = dataArray[i] / 128.0;
    const y = (v \* HEIGHT) / 2;

    if (i === 0) {
      canvasCtx.moveTo(x, y);
    } else {
      canvasCtx.lineTo(x, y);
    }

    x += sliceWidth;
  }

  canvasCtx.lineTo(WIDTH, HEIGHT / 2);
  canvasCtx.stroke();
}

draw();
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-analysernode-getbytetimedomaindata |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* ウェブオーディオ API の使用
AnalyserNode: getFloatTimeDomainData() メソッド
===========================================

**`getFloatTimeDomainData()`** は `AnalyserNode` 渡された　`Float32Array`　配列に、現在の波形、つまり時間領域のデータをコピーします。配列の各値はサンプルで、それぞれの時点における信号の大きさです。

構文
--


```js
getFloatTimeDomainData(array)
```

### 引数

`array`

 時間領域データのコピー先となる `Float32Array` です。
 配列の持つ要素が `AnalyserNode.fftSize` より少なかった場合、余分な要素は削除されます。必要以上の要素があった場合、余分な要素は無視されます。


### 返値

なし (`undefined`)。

例
-

 次の例では、 `AudioContext` で `AnalyserNode` を作成し、 `requestAnimationFrame` と `<canvas>` で時刻領域のデータを繰り返し収集し、現在の音声入力の「オシロスコープ」出力を描画する基本的な使用方法を示します。
 より完全な応用例/情報については、 Voice-change-O-matic のデモを調べてください（関連するコードは app.js の 108 ～ 193 行目を参照）。


```js
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
const analyser = audioCtx.createAnalyser();

// …

analyser.fftSize = 1024;
const bufferLength = analyser.fftSize;
console.log(bufferLength);
const dataArray = new Float32Array(bufferLength);

canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);

function draw() {
  drawVisual = requestAnimationFrame(draw);
  analyser.getFloatTimeDomainData(dataArray);

  canvasCtx.fillStyle = "rgb(200, 200, 200)";
  canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);
  canvasCtx.lineWidth = 2;
  canvasCtx.strokeStyle = "rgb(0, 0, 0)";
  canvasCtx.beginPath();

  const sliceWidth = (WIDTH \* 1.0) / bufferLength;
  let x = 0;

  for (let i = 0; i < bufferLength; i++) {
    const v = dataArray[i] \* 200.0;
    const y = HEIGHT / 2 + v;

    if (i === 0) {
      canvasCtx.moveTo(x, y);
    } else {
      canvasCtx.lineTo(x, y);
    }
    x += sliceWidth;
  }

  canvasCtx.lineTo(canvas.width, canvas.height / 2);
  canvasCtx.stroke();
}

draw();
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-analysernode-getfloattimedomaindata |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* ウェブオーディオ API の使用
IIRFilterNode: getFrequencyResponse() メソッド
==========================================

`getFrequencyResponse()` は `IIRFilterNode` インターフェイスのメソッドで、現在のフィルタリングアルゴリズムの設定を受け取り、指定した周波数の配列で指定した周波数に対する周波数レスポンスを計算します。

2 つの出力配列 `magResponseOutput` と `phaseResponseOutput` は、このメソッドを呼び出す前に作成する必要があります。これらは、入力周波数の値の配列 (`frequencyArray`) と同じサイズでなければなりません。

構文
--


```js
getFrequencyResponse(frequencyArray, magResponseOutput, phaseResponseOutput)
```

### 引数

`frequencyArray`

`Float32Array` で、フィルターしたいヘルツ単位の周波数の配列が入ったものです。

`magResponseOutput`

`Float32Array` で、`frequencyArray` の各周波数値に対して計算された周波数レスポンスの大きさを受け取ります。

`phaseResponseOutput`

`Float32Array` で、入力 `frequencyArray` の各周波数値に対して計算された位相レスポンスの値をラジアン単位で受け取ります。

### 返値

なし (`undefined`)。

### 例外

`NotSupportedError` `DOMException`

指定された 3 つの配列がすべて同じ長さでない場合に発生します。

例
-

次の例では、メディアストリームで IIR フィルターを使用しています（完全なフルデモについては、stream-source-buffer デモをライブで参照するか、ソースを読んでください）。このデモでは、この IIR フィルターの周波数レスポンスを、5 つのサンプル周波数について取得します。入力周波数を格納するオブジェクトと、出力のマグニチュードとフェーズ値を受け取るためのオブジェクトを 2 つ、それぞれ作成する必要があります。


```js
const myFrequencyArray = new Float32Array(5);
myFrequencyArray[0] = 1000;
myFrequencyArray[1] = 2000;
myFrequencyArray[2] = 3000;
myFrequencyArray[3] = 4000;
myFrequencyArray[4] = 5000;

const magResponseOutput = new Float32Array(5);
const phaseResponseOutput = new Float32Array(5);
```


次に、結果を含む HTML に `<ul>` 要素を作成し、JavaScript でその参照を取得します。


```html
<p>IIR filter frequency response for:</p>
<ul class="freq-response-output"></ul>
```



```js
const freqResponseOutput = document.querySelector(".freq-response-output");
```


最後に、フィルターを作成した後、`getFrequencyResponse()` を使用してレスポンスデータを生成して配列に入れ、各データ集合をループ処理してページの下部に人間が読めるリストとして出力しています。


```js
const feedforwardCoefficients = [0.1, 0.2, 0.3, 0.4, 0.5];
const feedbackCoefficients = [0.5, 0.4, 0.3, 0.2, 0.1];

const iirFilter = audioCtx.createIIRFilter(
  feedforwardCoefficients,
  feedbackCoefficients,
);

// …

function calcFrequencyResponse() {
  iirFilter.getFrequencyResponse(
    myFrequencyArray,
    magResponseOutput,
    phaseResponseOutput,
  );

  for (let i = 0; i < myFrequencyArray.length; i++) {
    const listItem = document.createElement("li");
    listItem.textContent = `${myFrequencyArray[i]}Hz: Magnitude ${magResponseOutput[i]}, Phase ${phaseResponseOutput[i]} radians.`;
    freqResponseOutput.appendChild(listItem);
  }
}

calcFrequencyResponse();
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-iirfilternode-getfrequencyresponse |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* ウェブオーディオ API の使用
* `IIRFilterNode`
* `AudioNode`
IIRFilterNode: IIRFilterNode() コンストラクター
=======================================

**`IIRFilterNode()`** はウェブオーディオ API のコンストラクターで、一般的な無限インパルス応答フィルターを実装するための `IIRFilterNode` プロセッサーとなる新しい `AudioNode` オブジェクトを作成します。

構文
--


```js
new IIRFilterNode(context, options)
```

### 引数

`context`

`AudioContext` への参照です。

`options`

オプションは次の通りです。

`feedforward`

フィードフォワードの係数の列です。

`feedback`

フィードバック係数の列です。

`channelCount`

ノードへの任意の入力にアップミキシングおよびダウンミキシング接続する際に、何チャンネルを用いるか決めるために用いられる整数を表します。（詳細は`AudioNode.channelCount`を参照してください。）その使い方と正確な定義は `channelCountMode` の値に依存します。

`channelCountMode`

ノードの入力と出力の間でチャンネルを一致させる方法を記述する列挙値を表します。（既定値を含む詳細情報は `AudioNode.channelCountMode` を参照してください。）

`channelInterpretation`

 チャンネルの意味を説明する列挙値を表します。この解釈により、音声のアップミキシングおよびダウンミキシングがどう行われるかが定義されます。
 使用可能な値は `"speakers"` または `"discrete"` です。（既定値を含む詳細な情報は `AudioNode.channelCountMode` を参照してください。）




ウェブオーディオ API の他のノードとは異なり、IIR フィルターの作成時に渡されるオプションは、オプションではありません。フィルターは作業するためにこの値を必要とし、利用できるフィルターの範囲が広いため、既定値はありません。

### 返値

新しい `IIRFilterNode` オブジェクトインスタンスです。

例
-


```js
let feedForward = [0.00020298, 0.0004059599, 0.00020298];
let feedBackward = [1.0126964558, -1.9991880801, 0.9873035442];

const AudioContext = window.AudioContext || window.webkitAudioContext;
const audioCtx = new AudioContext();

const iirFilter = new IIRFilterNode(audioCtx, {
  feedforward: feedForward,
  feedback: feedBackward,
});
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-iirfilternode-constructor-iirfilternode |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
TreeWalker.root
===============

**`TreeWalker.root`** は読み取り専用のプロパティで、 `TreeWalker` を作成したときに指定したルートノードを返します。

値
-

`Node` オブジェクトです。

例
-


```js
var treeWalker = document.createTreeWalker(
  document.body, // root として document.body を指定している
  NodeFilter.SHOW\_ELEMENT,
  {
    acceptNode(node) {
      return NodeFilter.FILTER\_ACCEPT;
    },
  },
  false,
);
root = treeWalker.root; // document.body が返却される
```

仕様書
---

| Specification |
| --- |
| DOM Standard # dom-treewalker-root |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* `TreeWalker` インターフェイス
CSSLayerStatementRule: nameList プロパティ
=====================================

Baseline 2022
-------------

Newly availableSince March 2022, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

* Learn more
* See full compatibility
* Report feedback
**`nameList`** は `CSSLayerStatementRule` インターフェイスの読み取り専用プロパティで、関連づけられたカスケードレイヤーの名前のリストを返します。名前は変更できません。

値
-

文字列の配列 (`Array`) で、それぞれが `@layer` 文ルールで表されるカスケードレイヤーを表します。

例
-

### HTML


```html
<div></div>
```

### CSS


```css
@layer layerName, layerName2;

@layer layerName3 {
  div {
    font-family: serif;
  }
}
```

### JavaScript


```js
const item = document.getElementsByTagName("div")[0];
const rules = document.styleSheets[1].cssRules;
// スタイルシート #1 はこの埋め込み例に関連するスタイルシートであり、
// スタイルシート #0 は MDN ページ全体に関連するスタイルシート。

const layerStatementRule = rules[0]; // CSSLayerStatementRule
const layerBlockRule = rules[1]; // CSSLayerBlockRule には nameList プロパティがない

item.textContent = `@layer は ${layer.nameList.join(
 ", ",
)} レイヤーを宣言しています。`;
```

仕様書
---

| Specification |
| --- |
| CSS Cascading and Inheritance Level 5 # dom-csslayerstatementrule-namelist |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* `CSSLayerBlockRule.name`
* `@layer`
* 名前付きレイヤーのための @layer 文のアットルール
ReadableByteStreamController: error() メソッド
==========================================

**`error()`** は `ReadableByteStreamController` インターフェイスのメソッドで、関連するストリームとの今後のやり取りを、指定した理由でエラーとします。

 これは一般的に、データを取得するインターフェイスからのエラー（ファイル読み込みやソケットエラーなど）を表面化するために、基盤から呼び出されます。
 また、例えばストリームが依存しているシステムの別の部分に障害が発生した場合など、ストリームエラーを発生させるために他の場所から呼び出すこともできます。

構文
--


```js
error(errorObject)
```

### 引数

`errorObject`

今後のやり取りを失敗させるための任意のオブジェクトです。

### 返値

なし (`undefined`).

### 例外

`TypeError`

ソースオブジェクトが `ReadableByteStreamController` ではないか、何らかの理由でストリームが読み取り可能ではありません。

例
-

読み取り可能なバイトストリームの使用 > 読み取り可能なソケットプッシュバイトストリームの作成 の例では、`error()` を使用して、依存しているシステムの別の部分に障害が発生した場合に手動でストリームエラーを発生させる方法を示しています。

 具体的には、基盤ソースの `start()` メソッドは `readRepeatedly()` を呼び出して、すべてのセットアップ処理を行い、データのリクエストを行います。
 これはプロミスを返します。
 データを読み込む際に発生したエラーは、連鎖する `catch()` 関数で捕捉されます。
 `catch()` では、コントローラーの `error()` を呼び出して、その理由を基盤から渡します。


```js
function start(controller) {
  readRepeatedly().catch((e) => controller.error(e));
}

function readRepeatedly() {
  return socket.select2().then(() => {
    // …
  });
}
```

仕様書
---

| Specification |
| --- |
| Streams Standard # ref-for-rbs-controller-error① |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* 読み取り可能なバイトストリームの使用
ReadableByteStreamController: enqueue() メソッド
============================================

**`enqueue()`** は `ReadableByteStreamController` で、指定されたチャンクを、関連する読み取り可能なバイトストリームのキューに入れます（チャンクはストリーム内部のキューにコピーされます）。

これは、 `byobRequest` が `null` である場合にのみ、キューへのデータ移譲に使用しましょう。

構文
--


```js
enqueue(chunk)
```

### 引数

`chunk`

キューに入れるチャンク。

### 返値

なし (`undefined`)。

### 例外

`TypeError`

 ソースオブジェクトが `ReadableByteStreamController` ではないか、何らかの理由でストリームを読み取れないか、チャンクがオブジェクトではないか、チャンクの内部配列バッファーが存在しないか、切り離されています。
 ストリームが既に閉じられていたときにも発生します。


例
-

読み取り可能なバイトストリームの使用 > 読み取り可能なソケットプッシュバイトストリームの作成 の例では、未処理の `byobRequest` がない場合に `enqueue()` を使用してデータをストリームにコピーする方法を示します。
 もし `byobRequest` があれば、それを使用しましょう。

下記のコードでは、「仮定の」 `socket.readInto()` メソッドを使用してデータを `ArrayBuffer` に読み込ませ、その後キューに入れています（ただし、実際にデータがコピーされた場合のみ）。


```js
const buffer = new ArrayBuffer(DEFAULT\_CHUNK\_SIZE);
bytesRead = socket.readInto(buffer, 0, DEFAULT\_CHUNK\_SIZE);
if (bytesRead === 0) {
  controller.close();
} else {
  controller.enqueue(new Uint8Array(buffer, 0, bytesRead));
}
```

仕様書
---

| Specification |
| --- |
| Streams Standard # ref-for-rbs-controller-enqueue① |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* 読み取り可能なバイトストリームの使用
* `ReadableByteStreamController`
ReadableByteStreamController: close() メソッド
==========================================

**`close()`** は `ReadableByteStreamController` インターフェイスのメソッドで、関連するストリームを閉じます。

これは、そのデータソースが使い果たされたとき/完全に完了したときに、基盤ソースによって呼び出される可能性があります。

**メモ:** リーダーは、以前にキューに入れられたチャンクをストリームから読み取ることができますが、それらを読み取ってしまうとストリームは閉じられます。
 しかし、 `close()` が呼び出されたときに、未処理で部分的に書き込まれた `byobRequest` がある場合、ストリームはエラーになります。


構文
--


```js
close()
```

### 引数

なし。

### 返値

なし (`undefined`)。

### 例外

`TypeError`

ソースオブジェクトが `ReadableByteStreamController` ではないか、何らかの理由でストリームが読み取り可能ではありません。

例
-

読み取り可能なバイトストリームの使用 > 読み取り可能なソケットプッシュバイトストリームの作成の例で、データがなくなったときにストリームを閉じています。

 関連するコードを下記に示します。
 これは `readInto()` メソッドがデータがまだないときだけ 0 バイトを返すと仮定しています。


```js
bytesRead = socket.readInto(v.buffer, v.byteOffset, v.byteLength);
if (bytesRead === 0) {
  controller.close();
}
```


 closeを呼び出すと、ストリームは閉じられ、コンシューマーがあれば通知されます。
 例えば `ReadableStreamBYOBReader` を使用している場合、 `read()` リクエストは `done: true` で解決され、 `ReadableStreamBYOBReader.closed` からのプロミスも解決されます。

仕様書
---

| Specification |
| --- |
| Streams Standard # ref-for-rbs-controller-close① |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* 読み取り可能なバイトストリームの使用
* `ReadableByteStreamController`
ReadableByteStreamController: byobRequest プロパティ
===============================================

**`byobRequest`** は `ReadableByteStreamController` インターフェイスの読み取り専用プロパティで、現在の BYOB リクエストを返します。保留中のリクエストがない場合は `null` を返します。

 基盤となるバイトソースはこのプロパティを調べ、存在する場合はそれを使用してストリームにデータを書き込む必要があります（`ReadableByteStreamController.enqueue()`を使用するのではなく）。
 こうすることで、コンシューマーへのデータの効率的なゼロバイト移譲が実現します。

### 値

`ReadableStreamBYOBRequest` オブジェクトのインスタンス、または `null`。

例
-

読み取り可能なバイトストリームの使用 > 読み取り可能なソケットプッシュバイトストリームの作成の例では、 `byobRequest` を使用して（データが存在する場合は）データを移譲するか、 `ReadableByteStreamController.enqueue()` を使用してストリーム内部のキューにデータをコピーする方法を示しています。

 関連するコードを下記に示します。
 `byobRequest` が存在すれば、 `controller.byobRequest.view` にデータが読み込まれ、 `ReadableStreamBYOBRequest.respond()` が呼び出されて、移譲可能なデータ量を指示します。


```js
if (controller.byobRequest) {
  const v = controller.byobRequest.view;
  bytesRead = socket.readInto(v.buffer, v.byteOffset, v.byteLength);
  if (bytesRead === 0) {
    controller.close();
  }
  controller.byobRequest.respond(bytesRead);
} else {
  // Write to data using enqueue().
}
```

仕様書
---

| Specification |
| --- |
| Streams Standard # ref-for-rbs-controller-byob-request② |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* 読み取り可能なバイトストリームの使用
* `ReadableByteStreamController`
ReadableByteStreamController: desiredSize プロパティ
===============================================

**`desiredSize`** は `ReadableByteStreamController` インターフェイスの読み取り専用プロパティで、ストリームの内部キューを満たすために必要な「希望サイズ」を返します。

 この値は、ストリームが、基盤となるソースへの推奨する流量を示すために使用します。
 データ流入のスロットリングや一時停止に対応しているソース（すべてではありません）は、ストリームバッファの `desiredSize` が正の値で、使用可能な限りゼロに近づくように流入を制御する必要があります。

`desiredSize` は下流コンシューマーの背圧を適用するために使用します。

値
-

整数です。キューがいっぱいになった場合、これは負になる可能性があることに注意してください。

ストリームがエラーになったときは `null`、閉じられていたときは `0` になる可能性があります。

例
-

仕様書の A readable stream with an underlying push source and backpressure support の例には、ストリームが一杯になったことを手動で検出して背圧をかけるために `desiredSize` を使用する良い例が示されています。

この例では既定のソースを使用していますが、概念は読み取り可能なバイトソースとまったく同じです。

仕様書
---

| Specification |
| --- |
| Streams Standard # ref-for-rbs-controller-desired-size② |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* 読み取り可能なバイトストリームの使用
* `ReadableByteStreamController`
PeriodicWave()
==============

Web Audio API の **`PeriodicWave()`** コンストラクターは、新しい `PeriodicWave` オブジェクトのインスタンスを作成します。

構文
--


```js
new PeriodicWave(context)
new PeriodicWave(context, options)
```

### 引数

`context`

ノードを関連付ける音声コンテキストを表す `BaseAudioContext` です。

`options` 省略可

`PeriodicWave` に持たせるプロパティを定義する
 `PeriodicWaveOptions`
 の辞書オブジェクトです。(辞書 PeriodicWaveConstraints で定義されるオプションも継承しています)


`real`

 波形を作るための余弦 (コサイン) の項を格納した `Float32Array` です。
 (`BaseAudioContext.createPeriodicWave` の引数 `real` に相当します)


`imag`

 波形を作るための正弦 (サイン) の項を格納した `Float32Array` です。
 (`BaseAudioContext.createPeriodicWave` の引数 `imag` に相当します)


`channelCount`

ノードへの入力のアップミキシングとダウンミキシングを行う際に何個のチャンネルを用いるかを決めるために用いる整数です。(詳しくは `AudioNode.channelCount` を参照してください) 利用法と正確な定義は `channelCountMode` の値によります。

`channelCountMode`

ノードの入力と出力でチャンネルを対応させる方法を表す列挙値です。(デフォルト値など詳しくは `AudioNode.channelCountMode` を参照してください)

`channelInterpretation`

チャンネルの意味を表す列挙値です。これによりアップミキシングとダウンミキシングをどのように行うかを決定します。取りうる値は `"speakers"` および `"discrete"` です。(デフォルト値など詳しくは `AudioNode.channelCountMode` を参照してください)


### 返値

新しい `PeriodicWave` オブジェクトのインスタンスを返します。

例
-


```js
const real = new Float32Array(2);
const imag = new Float32Array(2);
const ac = new AudioContext();

real[0] = 0;
imag[0] = 0;
real[1] = 1;
imag[1] = 0;

const wave = new PeriodicWave(ac, {
  real,
  imag,
  disableNormalization: false,
});
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-periodicwave-periodicwave |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
TextDecoderStream: readable プロパティ
=================================

**`readable`** は `TextDecoderStream` インターフェイスの読み取り専用プロパティで、`ReadableStream` を返します。

値
-

`ReadableStream` です。

例
-

次の例は、`ReadableStream` を `TextDecoderStream` オブジェクトから返す方法を示しています。


```js
stream = new TextDecoderStream();
console.log(stream.readable); //a ReadableStream
```

仕様書
---

| Specification |
| --- |
| Streams Standard # dom-generictransformstream-readable |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.