Android 的 SoundPool 没有播放任何声音
Android's SoundPool not playing any sound
我已尽一切努力使这项工作成功。 Android 的 SoundPool class 正在加载 .ogg 音频文件(已测试),但无法播放。
出于某种奇怪的原因,我无法使它正常工作。我已经关注了很多关于此事的教程和论坛,但仍然无法正常工作。
这是我的代码:
作为全局变量:
SoundPool soundPool;
boolean ya = false;
在我的 Activity 的 onCreate 上:
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
soundPool = new SoundPool.Builder()
.setMaxStreams(15)
.build();
}else{
soundPool = new SoundPool(15, AudioManager.STREAM_MUSIC, 0);
}
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool sp, int sampleId, int status) {
ya = true;
}
});
soundPool.load(this, R.raw.explosion_1, 1);
最后,在我的其中一个按钮的 onClick 方法上:
public void instructions(View v){
if(ya){
soundPool.play(R.raw.explosion_1, 0.99f, 0.99f, 1, 0, 0.99f);
}
}
请帮忙。
为了播放声音,您需要将从load()
获得的id
传入play()
。
int explosion = soundPool.load(this, R.raw.explosion_1, 1);
soundPool.play(explosion, 0.99f, 0.99f, 1, 0, 0.99f);
我使用以下代码播放了 SD 卡中的声音,它对我有用。
private SoundPool mSoundPool;
private int mSoundID;
private boolean isLoaded = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "Start Greeting View Activity...");
setContentView(R.layout.greeting_view_activity);
//mGiGiView = (GreetingWidget) findViewById(R.id.gigi_greet);
//mGiGiView.setOnTouchListener(this);
//Set default animation sound path.
String soundAnimUrl = "/gigi/anim/evening.ogg";
// get the Bundle out of the Intent.
Bundle extras = getIntent().getExtras();
if (extras != null) {
// check to see if "soundAnimUrl" is in the bundle, if so then
// assign it's value to animUrl if not, assign null to soundAnimUrl.
soundAnimUrl = extras.containsKey("soundAnimUrl") ? extras
.getString("soundAnimUrl") : null;
}
// Set the hardware buttons to control the music.
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
// Load the sound.
mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
isLoaded = true;
// Play the sound when loaded
play();
}
});
mSoundID = mSoundPool
.load(getFile(Environment.DIRECTORY_MUSIC, soundAnimUrl)
.getPath(), 1);
//Play sound from raw directory
// soundID = soundPool.load(this, R.raw.greeting1, 1);
}
private void play() {
// Getting the user sound settings
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
float actualVolume = (float) audioManager
.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = (float) audioManager
.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = actualVolume / maxVolume;
// Is the sound loaded already?
if (isLoaded) {
mSoundPool.play(mSoundID, volume, volume, 1, 0, 1f);
Log.d(TAG, "Played sound");
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
switch (v.getId()) {
case R.id.gigi_greet:
play();
break;
default:
break;
}
}
return false;
}
/**
* Get File instance from sd card path.
*
* @param deviceFolderPath
* - Pictures, Music, etc
* @param dbFilePath
* - path stored in db (/gigi/anim/morning.ogg)
* @return
*/
public File getFile(final String deviceFolderPath, final String dbFilePath) {
// Create full path
String picturePath = deviceFolderPath.concat(File.separator).concat(
dbFilePath);
// Create file
File mFile = getExternalFilesDir(picturePath);
return mFile;
}
我已尽一切努力使这项工作成功。 Android 的 SoundPool class 正在加载 .ogg 音频文件(已测试),但无法播放。 出于某种奇怪的原因,我无法使它正常工作。我已经关注了很多关于此事的教程和论坛,但仍然无法正常工作。
这是我的代码:
作为全局变量:
SoundPool soundPool;
boolean ya = false;
在我的 Activity 的 onCreate 上:
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
soundPool = new SoundPool.Builder()
.setMaxStreams(15)
.build();
}else{
soundPool = new SoundPool(15, AudioManager.STREAM_MUSIC, 0);
}
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool sp, int sampleId, int status) {
ya = true;
}
});
soundPool.load(this, R.raw.explosion_1, 1);
最后,在我的其中一个按钮的 onClick 方法上:
public void instructions(View v){
if(ya){
soundPool.play(R.raw.explosion_1, 0.99f, 0.99f, 1, 0, 0.99f);
}
}
请帮忙。
为了播放声音,您需要将从load()
获得的id
传入play()
。
int explosion = soundPool.load(this, R.raw.explosion_1, 1);
soundPool.play(explosion, 0.99f, 0.99f, 1, 0, 0.99f);
我使用以下代码播放了 SD 卡中的声音,它对我有用。
private SoundPool mSoundPool;
private int mSoundID;
private boolean isLoaded = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "Start Greeting View Activity...");
setContentView(R.layout.greeting_view_activity);
//mGiGiView = (GreetingWidget) findViewById(R.id.gigi_greet);
//mGiGiView.setOnTouchListener(this);
//Set default animation sound path.
String soundAnimUrl = "/gigi/anim/evening.ogg";
// get the Bundle out of the Intent.
Bundle extras = getIntent().getExtras();
if (extras != null) {
// check to see if "soundAnimUrl" is in the bundle, if so then
// assign it's value to animUrl if not, assign null to soundAnimUrl.
soundAnimUrl = extras.containsKey("soundAnimUrl") ? extras
.getString("soundAnimUrl") : null;
}
// Set the hardware buttons to control the music.
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
// Load the sound.
mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
isLoaded = true;
// Play the sound when loaded
play();
}
});
mSoundID = mSoundPool
.load(getFile(Environment.DIRECTORY_MUSIC, soundAnimUrl)
.getPath(), 1);
//Play sound from raw directory
// soundID = soundPool.load(this, R.raw.greeting1, 1);
}
private void play() {
// Getting the user sound settings
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
float actualVolume = (float) audioManager
.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = (float) audioManager
.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = actualVolume / maxVolume;
// Is the sound loaded already?
if (isLoaded) {
mSoundPool.play(mSoundID, volume, volume, 1, 0, 1f);
Log.d(TAG, "Played sound");
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
switch (v.getId()) {
case R.id.gigi_greet:
play();
break;
default:
break;
}
}
return false;
}
/**
* Get File instance from sd card path.
*
* @param deviceFolderPath
* - Pictures, Music, etc
* @param dbFilePath
* - path stored in db (/gigi/anim/morning.ogg)
* @return
*/
public File getFile(final String deviceFolderPath, final String dbFilePath) {
// Create full path
String picturePath = deviceFolderPath.concat(File.separator).concat(
dbFilePath);
// Create file
File mFile = getExternalFilesDir(picturePath);
return mFile;
}