日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 声音池,Android使用SoundPool实现播放音效

發(fā)布時間:2023/12/29 Android 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 声音池,Android使用SoundPool实现播放音效 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如果在程序應用中(比如:游戲的音效等)需要播放密集、短促的音效,這時就使用SoundPool來播放音效,SoundPool使用音效池的概念來管理多個短促的音效,例如它可以開始就10個音效,以后在程序中按音效的ID進行播放。

SoundPool主要用于播放一些較短的聲音片段,與MediaPlayer相比,SoundPool的優(yōu)勢在 于CPU資源占用量低和反應延遲小。另外,SoundPool還支持自行設置聲音的品質、音量、播放比率等參數(shù)。

一般使用SoundPool播放聲音的步驟如下:

Step1:調用SoundPool.Builder的構造器創(chuàng)建SoundPool.Builder對象,并可通過該Builder對象為SoundPool設置屬性;

Step2:調用SoundPool的構造器創(chuàng)建SoundPool對象;

Step3:調用SoundPool對象的load()方法從指定資源、文件中加載聲音。最好使用HashMap< Integer, Integer>來管理所加載的聲音;

Step4:調用SoundPool的play()方法播放聲音。

下面的Demo程序示范了如何使用SoundPool來播放音效,該程序提供三個按鈕,分別用于播放不同的聲音。

layout/activity_main.xml界面代碼如下:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:id="@+id/bomb"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="爆炸聲" />

android:id="@+id/shot"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="射擊聲" />

android:id="@+id/arrow"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="射箭聲" />

MainActivity.java邏輯代碼如下:

package com.fukaimei.soundpooltest;

import android.media.AudioAttributes;

import android.media.SoundPool;

import android.os.Build;

import android.support.annotation.RequiresApi;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import java.util.HashMap;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

Button bomb, shot, arrow;

// 定義一個SoundPool

SoundPool soundPool;

HashMap soundMap = new HashMap<>();

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

bomb = (Button) findViewById(R.id.bomb);

shot = (Button) findViewById(R.id.shot);

arrow = (Button) findViewById(R.id.arrow);

AudioAttributes attr = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_GAME) // 設置音效使用場景

.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).build(); // 設置音效的類型

soundPool = new SoundPool.Builder().setAudioAttributes(attr) // 設置音效池的屬性

.setMaxStreams(10) // 設置最多可容納10個音頻流

.build(); // ①

// load方法加載指定音頻文件,并返回所加載的音效ID

// 此處使用HashMap來管理這些音頻流

soundMap.put(1, soundPool.load(this, R.raw.bomb, 1)); // ②

soundMap.put(2, soundPool.load(this, R.raw.shot, 1)); // ②

soundMap.put(3, soundPool.load(this, R.raw.arrow, 1)); // ②

bomb.setOnClickListener(this);

shot.setOnClickListener(this);

arrow.setOnClickListener(this);

}

// 重寫OnClickListener監(jiān)聽器接口的方法

@Override

public void onClick(View v) {

// 判斷哪個按鈕被單擊

if (v.getId() == R.id.bomb) {

soundPool.play(soundMap.get(1), 1, 1, 0, 0, 1); // ③

} else if (v.getId() == R.id.shot) {

soundPool.play(soundMap.get(2), 1, 1, 0, 0, 1); // ③

} else if (v.getId() == R.id.arrow) {

soundPool.play(soundMap.get(3), 1, 1, 0, 0, 1); // ③

}

}

}

上面Demo程序代碼中標①的代碼用于創(chuàng)建SoundPool對象;標②的代碼用于使用SoundPool加載多個不同的聲音;標③的代碼則用于根據(jù)聲音ID來播放指定的聲音。這就是使用SoundPool播放聲音的標準過程。

實際使用SoundPool播放聲音時有如下幾點需要注意:SoundPool雖然可以一次性加載多個聲音,但由于內存限制,因此應該避免使用SoundPool來播放歌曲,只有那些短促、密集的聲音才考慮使用SoundPool進行播放。

Demo程序運行效果界面截圖如下:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

總結

以上是生活随笔為你收集整理的android 声音池,Android使用SoundPool实现播放音效的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。