web-dev-qa-db-ja.com

API21のSoundPool.Builderクラスでオーディオ属性を設定します

私は、API以前で21回設計されたAndroidプログラミングビデオ講義シリーズをフォローしています。したがって、次の方法でSoundPool変数を作成するように指示されます。

_SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
//SoundPool(int maxStreams, int streamType, int srcQuality)
_

ただし、このSoundPool for API21も使用したいと思います。だから、私はこれをやっています:

_if((Android.os.Build.VERSION.SDK_INT) == 21){
    sp21 = new SoundPool.Builder();
    sp21.setMaxStreams(5);
    sp = sp21.build();
}
else{
    sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
}
_

sp21はAPI21のBuilderタイプの変数であり、spはSoundPoolタイプです。

これは、API21を備えたAVDとAPI19を備えた実際のデバイスで非常にうまく機能します(API 21を備えた実際のデバイスで試したことはありませんが、うまくいくと思います)。ここで、sp = sp21.build();の前のifブロックでstreamTypeを_USAGE_MEDIA_に設定します。だから私はタイプします:

_sp21.setAudioAttributes(AudioAttributes.USAGE_MEDIA);
_

しかし、Lintはそれを赤でマークし、次のように述べています。

タイプSoundPool.BuilderのメソッドsetAudioAttributes(AudioAttributes)は、引数(int)には適用できません。

USAGE_MEDIAに設定しなくても、デフォルトで同じに設定されることを知っています。しかし、USAGE_ALARMのような他の何かに設定する必要がある場合は、将来の参照を求めています。

どうすればよいですか?

助けてください!

オーディオ属性SoundPoolSoundPool.builder および AudioManager を参照しました。

13
Pranit Bankar

AudioAttributesインスタンスは、そのビルダーであるAudioAttributes.Builderを介して構築されます。

以下のように使用できます。

sp21.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build());

参照: https://developer.Android.com/reference/Android/media/AudioAttributes.html

18
rmdroid

ここに追加するものがあります。私はゲームアプリでSoundPoolを使用して、小さくて単純なoggオーディオファイルを再生していました。 API 21を使用するエミュレーターでも正常に機能していました。今日、SoundPool.Builder()を使用するように変更することにしました。

AndroidのSoundPool.Builderドキュメントを見ました。そこに書いてあります

public static class
SoundPool.Builder
extends Object
Java.lang.Object
↳   Android.media.SoundPool.Builder
Class Overview
Builder class for SoundPool objects.

「SoundPoolオブジェクトのビルダークラス」という行に注意してください。したがって、SoundPool.Builder()はSoundPoolオブジェクトを作成します。 SoundPool()は、SoundPoolオブジェクトも作成します。だからこれは私がしたことです。

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {

        AudioAttributes audioAttrib = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_GAME)
                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .build();
        mSound = new SoundPool.Builder().setAudioAttributes(audioAttrib).setMaxStreams(6).build();
    }
    else {

        mSound = new SoundPool(6, AudioManager.STREAM_MUSIC, 0);
    }

mSoundは次のように宣言されています

    private SoundPool mSound;

残りのコード(サウンドのロード、再生、停止、リリース)は、以前とまったく同じです。そしてそれはAPI21以前のバージョンで動作しています

これが皆さんのお役に立てば幸いです

16
Rohit