recursal/MDN huggingface dataset:
RadioNodeList: value プロパティ
==========================

基盤となる要素の集合にラジオボタンが含まれている場合、**`RadioNodeList.value`** プロパティはチェック状態のラジオボタンを表します。`value` プロパティを取得すると、現在 `checked` 状態になっているラジオボタンの `value` が文字列として返されます。集合内にラジオボタンが含まれていなかったり、集合内のラジオボタンに `checked` 状態のものがなかったりした場合は、空文字列が返されます。`value` プロパティを設定すると、`value` プロパティが新しい値と等しい最初のラジオボタン入力要素に `checked` 状態が設定されます。

構文
--


```js
value = radioNodeList.value
radioNodeList.value = string
```

例
-

### HTML


```html
<form>
  <label><input type="radio" name="color" value="blue" />青</label>
  <label><input type="radio" name="color" value="red" />赤</label>
</form>
```

### JavaScript


```js
// フォームを取得
const form = document.forms[0];

// フォームのラジオボタンの集合を取得
const radios = form.elements["color"];

// 「赤」の選択肢を選択
radios.value = "red";
```

### 結果

仕様書
---

| Specification |
| --- |
| HTML Standard # dom-radionodelist-value |

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

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

関連情報
----

* `<form>`、`<fieldset>`、`<input>` 要素
PushManager: registrations() メソッド
=================================

**非推奨:** この機能は非推奨になりました。まだ対応しているブラウザーがあるかもしれませんが、すでに関連するウェブ標準から削除されているか、削除の手続き中であるか、互換性のためだけに残されている可能性があります。使用を避け、できれば既存のコードは更新してください。このページの下部にある互換性一覧表を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。

**`registrations`** メソッドは、プッシュ通知の端点登録の存在に関してシステムに問い合わせするために使用します。

**メモ:** このメソッドは `PushManager.getSubscription()` メソッドに置き換えられました。

構文
--


```js
registrations()
```

### 引数

なし。

### 返値

`DOMRequest` オブジェクトで、このメソッド呼び出しの成功または失敗を扱います。

メソッドの呼び出しが成功した場合、リクエストの `result` は PushRegistration オブジェクトの配列になります。

### PushRegistration

このオブジェクトは無名の JavaScript オブジェクトで、以下のプロパティがあります。

`pushEndpoint`

端点の URL を表す文字列です。

`version`

プッシュ通知の端点の現在のバージョンです。

例
-


```js
const req = navigator.push.registrations();

req.onsuccess = (e) => {
  if (req.result.length > 0) {
    req.result.forEach((result) => {
      console.log(
        `Existing registration ${result.pushEndpoint} ${result.version}`,
      );
    });
    // Reuse existing endpoints.
  } else {
    // Register for a new endpoint.
    const register = navigator.push.register();
    register.onsuccess = (e) => {
      console.log(`Registered new endpoint: ${register.result}`);
    };
  }
};
```

仕様書
---

この機能はもうどの仕様にも属していません。標準化の予定はなくなりました。

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

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

関連情報
----

* `PushManager`
PushManager: getSubscription() メソッド
===================================

**`PushManager.getSubscription()`** は `PushManager` インターフェイスのメソッドで、既存のプッシュサブスクリプションを取得します。

これは既存のプッシュサブスクリプションの詳細を含む `PushSubscription` で解決する `Promise` を返します。既存のプッシュサブスクリプションが存在しない場合 `null` 値で解決します。

構文
--


```js
getSubscription()
```

### 引数

なし。

### 返値

`Promise` です。これは `PushSubscription` オブジェクトまたは `null` で解決されます。

例
-

このコードスニペットは、 push messaging and notification sample から取得したものです（使用できるライブデモはありません）。


```js
// サブスクリプションをチェックするためにサービスワーカーの登録が必要
navigator.serviceWorker.ready.then((serviceWorkerRegistration) => {
  // 既にプッシュメッセージのサブスクリプションがあるか？
  serviceWorkerRegistration.pushManager
    .getSubscription()
    .then((subscription) => {
      // プッシュメッセージに加入／脱退する任意の UI を有効にする
      const pushButton = document.querySelector(".js-push-button");
      pushButton.disabled = false;

      if (!subscription) {
        // プッシュに参加していない場合、ユーザーがプッシュを
        // 有効化できるように UI を設定
        return;
      }

      // 最新の subscriptionId でサーバー同期を維持
      sendSubscriptionToServer(subscription);

      showCurlCommand(subscription);

      // プッシュメッセージに参加していることを表示するために
      // UI を設定
      pushButton.textContent = "Disable Push Messages";
      isPushEnabled = true;
    })
    .catch((err) => {
      console.error(`Error during getSubscription(): ${err}`);
    });
});
```

仕様書
---

| Specification |
| --- |
| Push API # dom-pushmanager-getsubscription |

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
PushManager: hasPermission() メソッド
=================================

**非推奨:** この機能は非推奨になりました。まだ対応しているブラウザーがあるかもしれませんが、すでに関連するウェブ標準から削除されているか、削除の手続き中であるか、互換性のためだけに残されている可能性があります。使用を避け、できれば既存のコードは更新してください。このページの下部にある互換性一覧表を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。

**`PushManager.hasPermission()`** は `PushManager` インターフェイスのメソッドで、 `Promise` を返します。このプロミスは、ウェブアプリへのリクエストの `PushPermissionStatus` に解決し、 `granted`, `denied`, `default` のいずれかになります。

**メモ:** この機能は `PushManager.permissionState()` メソッドに置き換えられました。

構文
--


```js
hasPermission()
```

### 引数

なし。

### 返値

`Promise` で、このプロミスは `PushPermissionStatus` に解決します。

例
-


```js
// TBD
```

仕様書
---

この機能はもうどの仕様にも属していません。標準化の予定はなくなりました。

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
PushManager: permissionState() メソッド
===================================

**`permissionState()`** は `PushManager` インターフェイスのメソッドで、プッシュマネージャーの許可状態を示す文字列で解決される `Promise` を返します。許可状態は、`'prompt'` か `'denied'`、`'granted'` のいずれかです。

**メモ:** Firefox 44 では、通知とプッシュの許可が統合されています。
 通知が許可された場合、プッシュも利用できます。


構文
--


```js
permissionState()
permissionState(options)
```

### 引数

`options` 省略可

オプションの設定パラメーターを含むオブジェクト。以下のプロパティが利用可能です。

`userVisibleOnly`

論理値で、返されたプッシュサブスクリプションは、その効果がユーザーに見えるようにされたメッセージに のみ使用することを示します。

`applicationServerKey`

プッシュサーバー経由でクライアントアプリにメッセージを送信する際に、プッシュサーバーが使用する公開鍵。この値はアプリケーションサーバーが生成する署名鍵ペアの一部であり、 P-256 曲線上の楕円曲線デジタル署名 (ECDSA) で使用できます。


### 返値

`Promise` で、`'prompt'`、`'denied'`、`'granted'` のいずれかの値の文字列に解決します。

仕様書
---

| Specification |
| --- |
| Push API # dom-pushmanager-permissionstate |

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
PushManager: supportedContentEncodings 静的プロパティ
==============================================

**`supportedContentEncodings`** は `PushManager` インターフェイスの静的な読み取り専用プロパティで、プッシュメッセージのペイロードを暗号化するために使用できる、対応しているコンテンツコードの配列を返します。

値
-

文字列の配列です。

仕様書
---

| Specification |
| --- |
| Push API # dom-pushmanager-supportedcontentencodings |

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
PushManager: register() メソッド
============================

**非推奨:** この機能は非推奨になりました。まだ対応しているブラウザーがあるかもしれませんが、すでに関連するウェブ標準から削除されているか、削除の手続き中であるか、互換性のためだけに残されている可能性があります。使用を避け、できれば既存のコードは更新してください。このページの下部にある互換性一覧表を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。

**`register`** メソッドは、システムにプッシュ通知の新しい端点をリクエストするために使用します。

**メモ:** このメソッドは `PushManager.subscribe()` に置き換えられました。

構文
--


```js
register()
```

### 引数

なし。

### 返値

`DOMRequest` オブジェクトで、このメソッド呼び出しの成功または失敗を扱います。

メソッドの呼び出しに成功したら、リクエストの `result` が端点の URL を表す文字列になります。

**メモ:** この URL が必要なくなったら、 `PushManager.unregister()` を使用して自分自身を掃除してください。

例
-


```js
const req = navigator.push.register();

req.onsuccess = (e) => {
  const endpoint = req.result;
  console.log(`New endpoint: ${endpoint}`);
};

req.onerror = (e) => {
  console.error(`Error getting a new endpoint: ${e.error}`);
};
```

仕様書
---

この機能はもうどの仕様にも属していません。標準化の予定はなくなりました。

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

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

関連情報
----

* `PushManager`
PushManager: subscribe() メソッド
=============================

**`subscribe()`** は `PushManager` インターフェイスのメソッドで、プッシュサービスに加入します。

これは、プッシュサブスクリプションの詳細を含む `PushSubscription` オブジェクトで解決される `Promise` を返します。現在のサービスワーカーに既存のサブスクリプションがない場合、新しいプッシュサブスクリプションが生成されます。

構文
--


```js
subscribe(options)
```

### 引数

`options` 省略可

オプションの設定パラメーターを含むオブジェクトです。以下のプロパティを指定することができます。

`userVisibleOnly`

論理値で、返されたプッシュサブスクリプションの効果が、ユーザーに表示するメッセージにのみ使われるかを示します。

`applicationServerKey`

Base64 でエンコードされた文字列または `ArrayBuffer` で、プッシュサーバーがアプリケーションサーバーを認証するために使用する楕円曲線 DSA P-256 公開鍵が入ります。指定した場合は、アプリケーションサーバーから発するすべてのメッセージで VAPID 認証スキームを使用しなければならず、また対応する秘密鍵で署名した JWT を含めなければなりません。この鍵は、データを暗号化するために使用する ECDH 鍵と***同じではありません***。詳しくは "Using VAPID with WebPush" をご覧ください。


**メモ:** この引数は Chrome や Edge など、一部のブラウザーでは必須です。

### 返値

`Promise` です。これは `PushSubscription` オブジェクトで解決します。

例
-


```js
this.onpush = (event) => {
  console.log(event.data);
  // ここから、IndexedDB にデータを書き込んだり、いずれかのウィンドウに
  // それを送信したり、通知を表示したりできます。
};

navigator.serviceWorker.register("serviceworker.js");

// serviceWorker.ready を使用して、プッシュの購読ができることを確かめます。
navigator.serviceWorker.ready.then((serviceWorkerRegistration) => {
  const options = {
    userVisibleOnly: true,
    applicationServerKey,
  };
  serviceWorkerRegistration.pushManager.subscribe(options).then(
    (pushSubscription) => {
      console.log(pushSubscription.endpoint);
      // アプリケーションサーバが必要としているプッシュサブスクリプションの
      // 詳細はここから使用できます。たとえば、XMLHttpRequest を使用して
      // これを送信できます。
    },
    (error) => {
      // 開発中は、コンソールにエラーを表示するのに役立ちます。
      // 本番環境では、アプリケーションサーバにエラー情報を送信
      // するためにも 役立ちます。
      console.error(error);
    },
  );
});
```

### ユーザーのジェスチャーへの反応

`subscribe()` の呼び出しは、例えばボタンをクリックするようなユーザーのジェスチャーに反応して行うべきです。


```js
btn.addEventListener("click", () => {
  serviceWorkerRegistration.pushManager
    .subscribe(options)
    .then((pushSubscription) => {
      // handle subscription
    });
});
```


これは最善の手法であるだけでなく、ユーザーが同意していない通知を送りつけるべきではありません。今後、ブラウザーはユーザーのジェスチャーに応答して発生していない通知を明示的に許可しないようになります。例えば、Firefox はバージョン 72 から既にこの例を行っています。

仕様書
---

| Specification |
| --- |
| Push API # dom-pushmanager-subscribe |

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
PushManager: unregister() メソッド
==============================

**非推奨:** この機能は非推奨になりました。まだ対応しているブラウザーがあるかもしれませんが、すでに関連するウェブ標準から削除されているか、削除の手続き中であるか、互換性のためだけに残されている可能性があります。使用を避け、できれば既存のコードは更新してください。このページの下部にある互換性一覧表を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。

**`unregister()`** メソッドは、システムに特定の端点の登録を脱退して削除するよう依頼するために使用していました。

**メモ:** 更新された API では、サブスクリプションは `PushSubscription.unsubscribe()` メソッドで脱退することができます。

構文
--


```js
unregister(pushEndpoint)
```

### 引数

`pushEndpoint`

脱退する端点です。

### 返値

`DOMRequest` オブジェクトで、このメソッド呼び出しの成功または失敗を扱います。

メソッドの呼び出しが成功した場合、リクエストの `result` は登録解除された端点を表す PushRegistration オブジェクトになります。

### PushRegistration

このオブジェクトは無名の JavaScript オブジェクトで、以下のプロパティがあります。

`pushEndpoint`

登録解除する端点の URL を表す文字列です。

`version`

`unregister.onsuccess` が呼び出された際には `undefined` です。

例
-


```js
const req = navigator.push.unregister(pushEndpoint);

req.onsuccess = (e) => {
  const endpoint = req.result;
  console.log(`Unregistered endpoint: ${endpoint}`);
};

req.onerror = (e) => {
  console.error(`Error unregistering the endpoint: ${e.error}`);
};
```

仕様書
---

この機能はもうどの仕様にも属していません。標準化の予定はなくなりました。

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

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

関連情報
----

* `PushManager`
WakeLockSentinel.released
=========================

**`released`** は `WakeLockSentinel` インターフェイスのプロパティで、 `WakeLockSentinel` がまだ解放されていないかどうかを示す論理値を返します。

構文
--


```js
var released = sentinel.released;
```

### 値

論理値で、最初は `false` であり、 `WakeLockSentinel` が解放され（`WakeLockSentinel.release()` が呼び出されるか、または自動的にロックが解除され） `release` イベントが発行された後は `true` となって変化しない値です。

例
-

この例は、 **`released`** の値が `WakeLockSentinel` のライフライクルの中でどのように変化するかを示します。


```js
const sentinel = await navigator.wakeLock.request("screen");
console.log(sentinel.released); // "false" と出力

sentinel.onrelease = () => {
  console.log(sentinel.released); // "true" と出力
};

await sentinel.release();
```

仕様書
---

| Specification |
| --- |
| Screen Wake Lock API # dom-wakelocksentinel-released |

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

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

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

**`type`** は `WakeLockSentinel` インターフェイスの読み取り専用プロパティで、現在取得している `WakeLockSentinel` の種別の文字列表現を返します。

構文
--


```js
var type = sentinel.type;
```

### 値

現在取得している起動ロックの種別の文字列表現です。

*type* 読取専用 

返される値は以下の通りです。

* `'screen'`: 画面の起動ロックです。端末の画面が暗くなったりロックされたりすることを防ぎます。

例
-

この例は、 `WakeLockSentinel` を取得し、コンソールにその種別を出力する非同期関数の例を示しています。


```js
const requestWakeLock = async () => {
  wakeLock = await navigator.wakeLock.request("screen");
  console.log(wakeLock.type); // 'screen' と出力
};

requestWakeLock();
```

仕様書
---

| Specification |
| --- |
| Screen Wake Lock API # the-type-attribute |

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
WakeLockSentinel: release イベント
==============================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

**`release`** は `WakeLockSentinel` インターフェイスのイベントで、この見張りオブジェクトのハンドルが解放されたときに発行されます。

`WakeLockSentinel` は `release()` メソッドにより手動で解放したり、プラットフォームの起動ロックにより自動的に解放されたりします。これは、文書がアクティブでなくなった場合や、見えなくなった場合、端末の電力が低下した場合、ユーザーが省電力モードをオンにした場合に発生する可能性があります。

構文
--

このイベント名を `addEventListener()` などで用いるか、イベントハンドラープロパティを設定するかしてください。


```js
addEventListener("release", (event) => {});

onrelease = (event) => {};
```

イベント型
-----

一般的な `Event` です。

例
-

この例では、起動ロックが解放されたときに UI を更新します。


```js
wakeLock.addEventListener("release", () => {
  // if wake lock is released alter the UI accordingly
  statusElement.textContent = "Wake Lock has been released";
});
```

仕様書
---

| Specification |
| --- |
| Screen Wake Lock API # the-onrelease-attribute |

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
WakeLockSentinel.release()
==========================

**安全なコンテキスト用:** この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

**`release()`** は `WakeLockSentinel` インターフェイスのメソッドで、 `WakeLockSentinel` を返し、この見張り (sentinel) の解放に成功したら解決する `Promise` を返します。

構文
--


```js
WakeLockSentinel.release().then(...);
```

### 引数

なし。

### 返値

`undefined` で解決する `Promise` を返します。

### 例外

例外は発生しません。起動ロックが解放されたかどうかを確認するには `release` イベントを待ち受けしてください。

例
-

この例では、ユーザーがボタンをクリックすると `WakeLockSentinel` が解放されます。


```js
wakeLockOffButton.addEventListener("click", () => {
  WakeLockSentinel.release();
});
```

仕様書
---

| Specification |
| --- |
| Screen Wake Lock API # the-release-method |

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

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

関連情報
----

* `WakeLockSentinel`
* `navigator.wakeLock.request()`
AudioParam: setValueCurveAtTime() メソッド
======================================

**`setValueCurveAtTime()`** は `AudioParam` インターフェイスのメソッドで、引数の値が、値のリストで定義された曲線を定義すること以下で変化するように設定します。

この曲線は、浮動小数点数の配列で定義された一連の値の間の線形補間であり、 `startTime` から始まる指定された間隔と固有の継続時間に収まるように拡大縮小されます。

構文
--


```js
setValueCurveAtTime(values, startTime, duration)
```

### 引数

`values`

浮動小数点数の配列で、`AudioParam` が指定した `duration` に沿って変化する値のカーブを表します。配列内のすべての値は有限でなければなりません。値が `NaN`、`Infinity`、`-Infinity` のいずれか場合、`TypeError` 例外が発生します。

`startTime`

倍精度浮動小数点値で、変更される `AudioContext` が最初に作成されてから（秒単位の）時間を表します。この値が `AudioContext.currentTime` より小さい場合、 `currentTime` にクランプされます。

`duration`

引数の `value` が指定した曲線以下に変化する合計時間（秒単位）を表すダブル値です。指定する値は、この時間に沿って等間隔に配置されます。

### 返値

この `AudioParam` オブジェクトへの参照です。一部の古いブラウザーの実装では、このインターフェイスは 'undefined' を返します。

### 例外

`InvalidStateError` `DOMException`

指定した `values` 配列の値が 2 未満の場合に発生します。

`RangeError`

指定する `startTime` が負の値か有限でない値、または `duration` が有限で厳密に正の値でない場合に発生します。

`TypeError`

配列 `values` に含まれる値の 1 つ以上が有限でない場合に発生します。無限でない値は `NaN`、`Infinity`、`-Infinity` です。

使用上の注意
------

パラメーターの値が曲線を以下に完了したとき、その値は `values` 引数で指定した値の集合の最後の値と一致することが保証されます。

**メモ:** ウェブオーディオ API の初期の実装では、これが確実に保持されず、予期せぬ結果を発生させるものがありました。

例
-

この単純な例では、2つのコントロールボタンを持つメディア要素のソースが特徴です（ソースコードは webaudio-examples リポジトリーを参照するか、またはこの例をライブで表示してください）。このボタンが押されると、 `setValueCurveAtTime()` が使用され、 waveArray 配列に格納されている値の間でゲインの値を変更します。


```js
// 音声コンテキストの作成
const audioCtx = new AudioContext();

// 例のための基本的な値を設定
const myAudio = document.querySelector("audio");

const valueCurve = document.querySelector(".value-curve");

// MediaElementAudioSourceNode を作成
// Feed the HTMLMediaElement into it
const source = audioCtx.createMediaElementSource(myAudio);

// ゲインノードを作成し、ゲイン値を 0.5 に設定
const gainNode = audioCtx.createGain();
gainNode.gain.value = 0.5;
const currGain = gainNode.gain.value;

// AudioBufferSourceNode を gainNodeに、
// gainNode を出力先に接続
source.connect(gainNode);
gainNode.connect(audioCtx.destination);

// onclick で何かするようにボタンを設定

const waveArray = new Float32Array(9);
waveArray[0] = 0.5;
waveArray[1] = 1;
waveArray[2] = 0.5;
waveArray[3] = 0;
waveArray[4] = 0.5;
waveArray[5] = 1;
waveArray[6] = 0.5;
waveArray[7] = 0;
waveArray[8] = 0.5;

valueCurve.onclick = () => {
  gainNode.gain.setValueCurveAtTime(waveArray, audioCtx.currentTime, 2);
};
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-audioparam-setvaluecurveattime |

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

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

Chrome 46 より前のバージョンでは、線形補間ではなく最近傍補間を使用します。

関連情報
----

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

**`minValue`** は `AudioParam` インターフェイスの読み取り専用プロパティで、このパラメーターの公称（有効）範囲の使用可能な最小値を表します。

値
-

浮動小数点の数値 (`Number`) で、このパラメーターの公称範囲内で許容される最小値です。

`minValue` の既定値では、単精度浮動小数点数の負の最小値 (-340,282,346,638,528,859,811,704,183,484,516,925,440) です。

例
-


```js
const audioCtx = new AudioContext();
const gainNode = audioCtx.createGain();
console.log(gainNode.gain.minValue); // -3.4028234663852886e38
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-audioparam-minvalue |

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

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

関連情報
----

* `AudioParam.maxValue`
AudioParam: value プロパティ
=======================

ウェブオーディオ API の `AudioParam` インターフェイスの **`value`** プロパティは、この `AudioParam` の現在の値を取得または設定します。初期状態では、値は `AudioParam.defaultValue` に設定されています。

`value` を設定すると、 `AudioContext` の `currentTime` プロパティが返す時刻で `AudioParam.setValueAtTime` を呼び出すのと同じ効果があります。

値
-

現在の時刻におけるパラメーターの値を示す浮動小数点の値 (`Number`) です。この値は `minValue` および `maxValue` プロパティで指定された値の間になります。

使用上の注意
------

### 値の精度とばらつき

内部的に `value` を格納するために使用されるデータ型は単精度（32 ビット）の浮動小数点数ですが、 JavaScript では 64 ビットの倍精度浮動小数点数を用います。そのため、 `value` プロパティから読み込んだ値が、常に設定した値と一致するとは限りません。

この例を考えてください。


```js
const source = new AudioBufferSourceNode(/\* … \*/);
const rate = 5.3;
source.playbackRate.value = rate;
console.log(source.playbackRate.value === rate);
```


ログ出力は `false` になります。これは、再生レートのパラメーターである `rate` が 5.3 に最も近い 32 ビット浮動小数点数に変換され、5.300000190734863 となったためです。解決策の 1 つは、 `value` を設定する際に、指定した 64 ビットの JavaScript 値に相当する単精度の値を返す `Math.fround()` メソッドを使用することです。


```js
const source = new AudioBufferSourceNode(/\* … \*/);
const rate = Math.fround(5.3);
source.playbackRate.value = rate;
console.log(source.playbackRate.value === rate);
```


この場合、ログ出力は `true` になります。

### 時間とともに変化するプロパティの値

`AudioParam` の `value` は固定されることもあれば、時間とともに変化することもあります。これは `value` ゲッターによって反映され、音声レンダリングエンジンの最新の**レンダリングクォンタム**（音声バッファーが処理され更新される瞬間）時点でのパラメーターの値を返します。音声バッファーが処理されるだけでなく、それぞれのレンダリングクォンタムは、現在の時刻と確立された時間ベースのパラメーターの値変更が指定された場合、必要に応じてそれぞれの `AudioParam` の `value` を更新します。

パラメーターを最初に作成した時、その値は `AudioParam.defaultValue` で指定された既定値に設定されます。これは、 0.0 秒の時刻におけるパラメーターの値であり、値が変更される最初のレンダリングクォンタムまで、パラメーターの値のままです。

レンダリングクォンタムの間、ブラウザーはパラメーターの値を管理するために以下のことを行います。

* `value` セッターが使用されてた場合、パラメーターの値は指定された値に変更されます。
* 現在の時刻が前回 `setValueAtTime()` を呼び出して指定した時刻と等しいか超えている場合、 `value` は `setValueAtTime()` に渡された値に変更されます。
* 段階的または漸進的な値変更メソッドが呼び出され、現在の時刻が段階的な値変更を行うべき時間範囲内にある場合、値は適切なアルゴリズムに基づいて更新されます。これらの漸進的または段階的な値変更メソッドには `linearRampToValueAtTime()`, `setTargetAtTime()`, `setValueCurveAtTime()` があります。

このように、パラメーターの `value` は、時間経過に伴うパラメーターの状態を正確に反映するように維持されます。

例
-

この例では、 `GainNode` の音量を即座に 40% に変更します。


```js
const audioCtx = new AudioContext();
const gainNode = audioCtx.createGain();
gainNode.gain.value = 0.4;
// 次のものと同じ
gainNode.gain.setValueAtTime(0.4, audioCtx.currentTime);
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-audioparam-value |

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

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

`GainNode` のゲイン値を変更する際、バージョン 64 （2018 年 1 月）以前の Google Chrome では、デジッパリングを防ぐためにスムーズな補間が行われていました。
 バージョン 64 からは、ウェブオーディオ仕様に準拠するため、値が即座に変更されます。詳しくは Chrome Platform Status をご覧ください。

関連情報
----

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

**`maxValue`** は `AudioParam` インターフェイスの読み取り専用プロパティで、このパラメーターの公称（有効）範囲の使用可能な最大値を表します。

値
-

浮動小数点の数値 (`Number`) で、このパラメーターの公称範囲内で許容される最大値です。

`maxValue` の既定値では、単精度浮動小数点数の正の最大値 (+340,282,346,638,528,859,811,704,183,484,516,925,440) です。

例
-


```js
const audioCtx = new AudioContext();
const gainNode = audioCtx.createGain();
console.log(gainNode.gain.maxValue); // 3.4028234663852886e38
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-audioparam-maxvalue |

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

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

関連情報
----

* `AudioParam.minValue`
AudioParam: setTargetAtTime() メソッド
==================================

`setTargetAtTime()` は `AudioParam` インターフェイスのメソッドで、 `AudioParam` の値を徐々に変化させる開始をスケジュールします。これは ADSR エンベロープのディケイやリリース部分に使用します。

構文
--


```js
setTargetAtTime(target, startTime, timeConstant)
```

### 引数

`target`

指定された開始時刻に引数が変化し始める値。

`startTime`

指数変化の開始時刻。 `AudioContext.currentTime` と同じ時間座標系で指定します。これが `AudioContext.currentTime` 以下の場合、引数はすぐに変化を始めます。

`timeConstant`

秒単位で指定された、指数関数的に対象とする手法に移行する際の時刻定数値。この値が大きいほど、遷移は遅くなります。

### 返値

この `AudioParam` オブジェクトへの参照です。このインターフェイスの古いブラウザーの実装の中には `undefined` を返すものもあります。

解説
--

変化は `startTime` で指定した時刻から始まり、指数関数的に `target` 引数で指定された値に向かって移動します。 `timeConstant` 引数で定義されているディケイレートは指数関数的です。 したがって、値が完全に `target` に到達することはありませんが、長さ `timeConstant` の各タイムステップの後、値は別の式 


1
-

e

-
1

≈
63.2
%

1 - e^{-1} \approx 63.2%

 で `target` に近づきます。完全な式（一次線形連続時不変システムを使用しています）については、ウェブオーディオ API 仕様書を調べてください。

どうしても特定の時刻までに目標値に到達する必要がある場合は、 `AudioParam.exponentialRampToValueAtTime()` を使用することができます。ただし、数学的な理由から、このメソッドは現在値や対象とする値が `0` の場合には動作しません。

### 良い `timeConstant` の選択

前述のように、この値は指数関数的に変化し、 `timeConstant` ごとに 63.2% ずつ対象とする値に向かって変化します。目標値に達することを心配する必要はありません。十分に近づけば、それ以上の変化は人間のリスナーには知覚できないでしょう。

使用する用途によっては、対象とする値の 95% になれば十分かもしれません。その場合は、 `timeConstant` を対象とする時間の 3 分の 1 に設定すればよいでしょう。

詳細については、時間の経過とともに値が 0% から 100% までどのように変化するか、以下の表で調べてください。

| `startTime` からの時間 | 値 |
| --- | --- |
| `0 * timeConstant` | 0% |
| `0.5 * timeConstant` | 39.3% |
| `1 * timeConstant` | 63.2% |
| `2 * timeConstant` | 86.5% |
| `3 * timeConstant` | 95.0% |
| `4 * timeConstant` | 98.2% |
| `5 * timeConstant` | 99.3% |
| `n * timeConstant` | 

1

 |



1
-

e

-
n

1 - e^{-n}

例
-

この例では、 2 つの制御ボタンを持つメディアソースがあります（ソースコードは audio-param repo を参照するか、またはこの例をライブで見てください）。これらのボタンが押されると、 `setTargetAtTime()` が使用され、それぞれゲイン値を 1.0 まで、 0 までフェードアップさせます。


```js
// 音声コンテキストの作成
const audioCtx = new AudioContext();

// 例のための基本的な値を設定
const myAudio = document.querySelector("audio");

const atTimePlus = document.querySelector(".at-time-plus");
const atTimeMinus = document.querySelector(".at-time-minus");

// MediaElementAudioSourceNode を作成
// Feed the HTMLMediaElement into it
const source = audioCtx.createMediaElementSource(myAudio);

// ゲインノードを作成し、ゲイン値を 0.5 に設定
const gainNode = audioCtx.createGain();
gainNode.gain.value = 0.5;
let currGain = gainNode.gain.value;

// AudioBufferSourceNode を gainNodeに、
// gainNode を出力先に接続
source.connect(gainNode);
gainNode.connect(audioCtx.destination);

// onclick で何かするようにボタンを設定
atTimePlus.onclick = () => {
  currGain = 1.0;
  gainNode.gain.setTargetAtTime(1.0, audioCtx.currentTime + 1, 0.5);
};

atTimeMinus.onclick = () => {
  currGain = 0;
  gainNode.gain.setTargetAtTime(0, audioCtx.currentTime + 1, 0.5);
};
```

仕様書
---

| Specification |
| --- |
| Web Audio API # dom-audioparam-settargetattime |

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

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

関連情報
----

* ウェブオーディオ API の使用