Amazon Developer

as

Settings
Sign out
Notifications
Alexa
Amazonアプリストア
Ring
AWS
ドキュメント
Support
Contact Us
My Cases
開発
設計と開発
公開
リファレンス
サポート

@amazon-devices/keplerscript-audio-lib

@amazon-devices/keplerscript-audio-lib

VegaオーディオインターフェイスAPIは、アプリでオーディオを管理するための機能を提供します。これは、いくつかの主要コンポーネントで構成されています。

  • オーディオマネージャー: 音量、ミュート、デバイス管理など、システムレベルのオーディオコントロールを処理します。
  • オーディオ再生: オーディオストリームを再生できるようにします。カスタマイズ可能な属性を備えています。
  • オーディオフォーカス管理: さまざまなオーディオストリームのオーディオフォーカスを管理します。

このAPIは、Vega向けReact Nativeアプリと連携するように設計されており、次のような機能を持つオーディオ対応アプリを構築するための基盤を提供します。

  • さまざまなオーディオタイプの音量制御とミュート制御
  • オーディオデバイスの管理
  • システムサウンドの管理
  • オーディオフォーカスの処理
  • オーディオストリームの構成と管理

はじめに

セットアップ

  1. package.jsonファイルのdependenciesセクションに、以下のライブラリ依存関係を追加します。

    クリップボードにコピーしました。

     "@amazon-devices/keplerscript-audio-lib": "~2.0.18"
    
  2. manifest.tomlに、以下の権限リクエストとサービスリクエストを追加します。

    クリップボードにコピーしました。

    [[needs.privilege]]
    id = "com.amazon.audio.privilege.microphone.access" 
    
    [wants]
    
    // 必要なサービスのみを追加します 
    [[wants.service]]
    id = "com.amazon.audio.stream" // AudioStream APIを使用してオーディオ再生を実行する場合。
    [[wants.service]]
    id = "com.amazon.audio.control" // AudioManagerの場合、AudioFocus APIを使用します。
    [[wants.service]]
    id = "com.amazon.audio.system" // SoundPlayerまたはSystemSound APIを使用して低レイテンシで短いサウンドを再生する場合。
    

マニフェストファイルのneedsセクションの詳細については、マニフェストの[needs]セクションを参照してください。

使用方法

プロジェクトにKeplerAudioInterfaceターボモジュールをインポートします。

クリップボードにコピーしました。

import { 
    AudioManager,
    AudioPlaybackStream,
    AudioPlaybackStreamBuilder,
    AudioFocusManager,
    AudioFocusSession
} from '@amazon-devices/keplerscript-audio-lib';

オーディオ

オーディオ音量の管理

クリップボードにコピーしました。

// メディアの音量を設定します。
await AudioManager.setVolumeAsync(AudioVolumeType.VOLUME_TYPE_MEDIA, 75, AudioVolumeFlags.VOLUME_FLAG_SHOW_UI);

// 現在の音量を取得します。
const volume = await AudioManager.getVolumeAsync(AudioVolumeType.VOLUME_TYPE_MEDIA);

オーディオ再生の作成と管理

クリップボードにコピーしました。

// 再生ストリームを作成します。
const builder = new AudioPlaybackStreamBuilder();
builder.setAudioConfig({
    sampleRate: AudioSampleRate.SAMPLE_RATE_44_1_KHZ,
    channelMask: AudioChannelMask.CHANNEL_STEREO,
    format: AudioSampleFormat.FORMAT_PCM_16_BIT
});
builder.setAudioAttributes({
    contentType: AudioContentType.CONTENT_TYPE_MUSIC,
    usage: AudioUsageType.USAGE_MEDIA,
    flags: AudioFlags.FLAG_NONE
});

const playbackStream = await builder.buildAsync();
await playbackStream.startAsync();

Managing audio focus

クリップボードにコピーしました。

// オーディオフォーカスを作成してリクエストします。
const focusSession = await AudioFocusManager.createAudioFocusSessionAsync();
await focusSession.requestAudioFocusAsync({
    usage: AudioUsageType.USAGE_MEDIA
});

// フォーカスの変更通知に登録します。
await focusSession.registerAudioFocusListenerAsync((focusChange) => {
    console.log('フォーカスが変更されました:', focusChange);
});

イベントオブザーバー

オーディオマネージャーのイベント

クリップボードにコピーしました。

// システム全体のオーディオイベントに登録します。
await AudioManager.registerAudioEventObserverAsync((event) => {
    // イベントオブジェクトには、イベントタイプに基づいてさまざまなプロパティが格納されます。
    switch (event.audioEvent) {
        case AudioEvent.DEVICE_STATE_UPDATE:
            // オーディオデバイスの接続状態が変更されたときにトリガーされます。
            // パラメーター:
            // - device: AudioDevice列挙値
            // - role: AudioRole列挙値
            // - connect:デバイスが接続されたか(true)、切断されたか(false)を示すブール値
            console.log(`デバイス${event.device}(ロール${event.role})が${event.connect ? '接続' : '切断'}されました`);
            break;

        case AudioEvent.VOLUME_UPDATE:
            // いずれかのオーディオタイプの音量が変更されたときにトリガーされます。
            // パラメーター:
            // - type: AudioVolumeType列挙値
            // - volume:数値(0~100)
            console.log('音量が変更されました。タイプ:', event.type, '、音量:', event.volume);
            break;

        case AudioEvent.GLOBAL_VOLUME_MUTE_UPDATE:
            // グローバルのミュート状態が変更されたときにトリガーされます。
            // パラメーター:
            // - mute:システムがミュートになっているかどうかを示すブール値
            console.log('グローバルのミュート状態が更新されました:', event.mute);
            break;

        case AudioEvent.SERVER_DOWN:
            // オーディオサーバーが利用不可能になったときにトリガーされます。
            console.log('オーディオサーバーがダウンしました');
            break;

        case AudioEvent.SERVER_UP:
            // オーディオサーバーが利用可能になったときにトリガーされます。
            console.log('オーディオサーバーが稼働しました');
            break;

        case AudioEvent.AUDIO_USAGE_STATE_CHANGE:
            // オーディオの使用状態が変更されたときにトリガーされます。
            // パラメーター:
            // - usage: AudioUsageType列挙値
            // - active:使用タイプがアクティブになったかどうかを示すブール値
            console.log('使用タイプ:', event.usage);
            console.log('アクティブ状態:', event.active);
            break;

        case AudioEvent.MIC_MUTE_STATE_UPDATE:
            // マイクのミュート状態が変更されたときにトリガーされます。
            // パラメーター:
            // - state:マイクがミュートになっているかどうかを示すブール値
            console.log('マイクのミュート状態が変更されました:', event.muteState);
            break;

        case AudioEvent.VOLUME_MUTE_UPDATE:
            // 特定の音量タイプの音量ミュート状態が変更されたときにトリガーされます。
            // パラメーター:
            // - volumeType: AudioVolumeType列挙値
            // - mute:タイプがミュートになっているかどうかを示すブール値
            console.log('音量タイプ:', event.volumeType);
            console.log('ミュート状態:', event.muteState);
            break;

        case AudioEvent.TELEPHONY_MUTE_UPDATE:
            // 電話のミュート状態が変更されたときにトリガーされます。
            // パラメーター:
            // - deviceType: AudioDevice列挙値
            // - address:デバイスアドレスを表す文字列
            // - deviceName:デバイス名を表す文字列
            // - mute:電話がミュートになっているかどうかを示すブール値
            console.log('電話のミュート状態が更新されました:');
            console.log('デバイスタイプ:', event.deviceType);
            console.log('デバイスアドレス:', event.deviceAddress);
            console.log('デバイス名:', event.deviceName);
            console.log('デバイスのミュート状態:', event.muteState);
            break;
    }
});

// クリーンアップします。
await AudioManager.unregisterAudioEventObserverAsync();

ストリームの再生

クリップボードにコピーしました。

const playbackStream = await builder.buildAsync();

await playbackStream.registerEventObserverAsync((event) => {
    switch (event.type) {
        case AudioPlaybackEvent.DIED:
            // 再生ストリームが利用不可能になったときにトリガーされます。
            break;

        case AudioPlaybackEvent.RECOVERED:
            // 再生ストリームが利用不可能な状態から回復したときにトリガーされます。
            break;

        case AudioPlaybackEvent.STOPPED:
            // 再生ストリームが停止したときにトリガーされます。
            break;

        case AudioPlaybackEvent.MUTE_STATE_UPDATE:
            // ストリームのミュート状態が変更されたときにトリガーされます。
            // パラメーター:
            // - muted:ストリームがミュートになっているかどうかを示すブール値
            console.log('ミュート状態:', event.muteState);
            break;

        case AudioPlaybackEvent.FRAME_UNDERRUN:
            // バッファーアンダーランが発生したときにトリガーされます。
            // パラメーター:
            // - size:アンダーランのサイズをフレーム数で示す数値
            console.log('アンダーランの数:', event.underrunCount);
            break;
    }
});

// クリーンアップします。
await playbackStream.unregisterEventObserverAsync();

オーディオフォーカス

クリップボードにコピーしました。

const focusSession = await AudioFocusManager.createAudioFocusSessionAsync();

await focusSession.registerAudioFocusListenerAsync((focusChange) => {
    switch (focusChange.type) {
        case AudioFocusChange.GRANTED:
            // オーディオフォーカスが付与されたときにトリガーされます。
            break;

        case AudioFocusChange.RELEASED:
            // オーディオフォーカスが解放されたときにトリガーされます。
            break;

        case AudioFocusChange.DUCKED:
            // オーディオをダッキングする(音量を下げる)必要があるときにトリガーされます。
            break;

        case AudioFocusChange.PAUSED:
            // オーディオを一時停止する必要があるときにトリガーされます。
            break;

        case AudioFocusChange.STOPPED:
            // オーディオを停止する必要があるときにトリガーされます。
            break;
    }
});

// クリーンアップします。
await focusSession.unregisterAudioFocusListenerAsync();

トラブルシューティング

  1. 権限に問題がある:
    1. エラー: 「No Permission exception」
    2. 解決策: manifest.tomlで、必要な権限を宣言していることを確認してください。
  2. AudioManagerが作成されない:
    1. エラー:「getAudioManager() returns undefined」
    2. 解決策: アプリの環境で、KeplerAudioInterfaceターボモジュールが正しくセットアップされていることを確認してください。
  3. オブザーバーまたはコールバックが無効:
    1. エラー:「not invoking Callback」
    2. 解決策: オブザーバーのサブスクライブが正しいことを確認してください。
  4. サブスクリプションの解除に失敗する:
    1. エラー: 「Unsubscribe rejection」
    2. 解決策: 正しいオブザーバーオブジェクトを使用していることと、そのオブジェクトがまだサブスクライブ解除に使用されていないことを確認してください。

サポート

  • 特定の問題やバグについては、オーディオ開発サポートチームにお問い合わせください。

APIリファレンス

クラス

  • AudioAttributes - オーディオ再生ストリームの構築に使用するオーディオ属性を決定します。コンテンツタイプ、使用法、フラグなどに影響を及ぼします。
  • AudioConfig - オーディオ再生ストリームの構築に使用するオーディオ構成を決定します。オーディオサンプルレートや形式などに影響を及ぼします。
  • AudioConfigAttr - サポートされている構成を取得するためのAudioConfig。
  • AudioDeviceInfo - オーディオデバイスの説明を含むデータ型。
  • AudioFocusAttributes - AudioFocusをリクエストする際に使用します。
  • AudioFocusManager - オーディオフォーカスマネージャーを使用すると、オーディオフォーカスセッションの作成と破棄を行うことができます。
  • AudioFocusSession - オーディオフォーカスセッションを使用すると、オーディオフォーカスのリクエストなど、オーディオフォーカスの管理を行うことができます。
  • AudioManager - オーディオマネージャーを使用すると、音量調整やミュート制御などのオーディオ管理を行うことができます。
  • AudioPlaybackStream - オーディオ再生ストリームを使用すると、一時停止など、再生ストリームの制御を行うことができます。
  • AudioPlaybackStreamBuilder - オーディオ再生ストリームビルダーを使用すると、オーディオ再生ストリームの構成、作成、破棄を行うことができます。
  • AudioRecordStream
  • AudioRecordStreamBuilder - ## 必要な権限。
  • AudioTheme - AudioThemeオブジェクト。
  • SinkPolicies - SinkPoliciesオブジェクト。

列挙型

  • AudioChannelMask - オーディオチャンネルマスクの列挙型。
  • AudioContentType - オーディオコンテンツタイプの列挙型。
  • AudioDevice - 使用可能なオーディオデバイス。
  • AudioEvent - オーディオイベントの列挙型。
  • AudioFadeType - 音量の遷移に使用されるオーディオフェードカーブの種類。
  • AudioFlags - オーディオフラグの列挙型。
  • AudioFocusChange - 各値は、発生する可能性のある異なるタイプのオーディオフォーカス変更イベントを表します。
  • AudioFocusStatus - オーディオフォーカスの呼び出しが行われたときに発生する可能性のある、さまざまなステータスを表します。
  • AudioPlaybackEvent - プレイバックビルダーが使用する可能性のある再生イベント。
  • AudioRecordEvent - オーディオ録音イベントの列挙型。
  • AudioRole - オーディオデバイスが担う可能性がある役割。
  • AudioSampleFormat - オーディオサンプル形式の列挙型。
  • AudioSampleRate - オーディオサンプルレートの列挙型。
  • AudioSource - 使用可能なオーディオソース。
  • AudioStatus - オーディオステータスコードの列挙型。
  • AudioSystemSound - 使用可能なシステムサウンドタイプ。
  • AudioTelephonyMode - 使用可能なテレフォニーモード。
  • AudioUsageType - オーディオ使用タイプの列挙型。
  • AudioVolumeFlags - 各値は、それぞれ異なるタイプのオーディオ音量フラグを表します。SHOW_UIが設定されている場合は、音量コントロールが別のパネルで表示されます。
  • AudioVolumeType - 各値は、メディア、音声通話、ナビゲーションなど、それぞれ異なる音量タイプを表します。
  • DuckingMode - オーディオダッキングモードを示すvalueフィールドを持つ構造体。
  • SampleLayout - オーディオサンプルレイアウトを示す列挙型。
  • SinkFormatsSelectionPolicy - HDMI出力のユーザーオーディオモードを示すvalueフィールドを持つ構造体。
  • StreamDuckingPolicy - 使用可能なオーディオダッキングポリシー。
  • VolumeUpdate - オーディオ音量の更新タイプに使用される列挙型。

Last updated: 2026年7月22日