我有代码播放.ogg
音频文件,我从互联网上下载。我没有错误,所以我可以运行它,但随后应用程序崩溃:
package play.my.sound;
import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.media.SoundPool.OnLoadCompleteListener;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
public class PlaySound2Activity extends Activity {
private SoundPool soundPool;
private int soundID;
boolean loaded = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
View view = findViewById(R.id.textView1);
view.setOnClickListener((OnClickListener) this);
// Set the hardware buttons to control the music
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
// Load the sound
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
loaded = true;
}
});
soundID = soundPool.load("sound1.ogg", 1);
}
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// 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 (loaded) {
soundPool.play(soundID, volume, volume, 1, 0, 1f);
Log.e("Test", "Played sound");
}
}
return false;
}
}
我想我有两个问题:
main.xml
文件中:
<?xml version =“1.0”encoding =“utf-8”?> <LinearLayout xmlns:android =“http://schemas.android.com/apk/res/android”android:orientation =“vertical”android:layout_width =“fill_parent”android:layout_height =“fill_parent”> <TextView android:text =“点击屏幕开始播放”android:id =“@ + id / textView1”android:layout_width =“fill_parent”android:layout_height =“ fill_parent“> </ TextView> </ LinearLayout>
我不知道这是否正确。sound1.ogg
放在workspace->SoundPlay2
文件夹中,因为在res文件夹中我遇到了问题,而且,我试图将它放在存在的两个res文件夹中。这是我的控制台:
[2012-01-04 19:38:16 - PlaySound2] Failed to install PlaySound2.apk on device 'emulator-5554': timeout
[2012-01-04 19:38:16 - PlaySound2] Launch canceled!
[2012-01-04 19:47:33 - PlaySound2] Error in an XML file: aborting build.
[2012-01-04 19:52:34 - PlaySound2] res\layout\main.xml:0: error: Resource entry main is already defined.
[2012-01-04 19:52:34 - PlaySound2] res\layout\main.out.xml:0: Originally defined here.
[2012-01-04 19:52:34 - PlaySound2] C:\Users\Natalia\workspace\PlaySound2\res\layout\main.out.xml:1: error: Error parsing XML: no element found
我从“Android Sounds - Tutorial”中拿了这个例子。我想播放一个音频文件,更具体地说,是一个.wav
文件。
我不知道在哪里可以找到关于MediaPlayer类允许的文件及其特性的信息(durantion,sample rate ......)你能告诉我在哪里可以找到这个吗?
在res文件夹中创建原始文件夹并将文件添加到其中。然后使用播放文件
soundID = soundPool.load(R.raw.sound1, 1);
并且还看到这个post的main.xml问题。
播放某种蜂鸣器的示例。在原始文件夹下的res文件夹中,我有一个buzzer.wav
播放此蜂鸣器的方法:
/**
* Method to play an alarm sound to signal half time or full time.
*/
private void playAlarm() {
MediaPlayer mp = MediaPlayer.create(this,
R.raw.buzzer);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
}
我之前从未见过Class SoundPool,但我建议使用MediaPlayer类:
mMediaPlayer = new MediaPlayer(this, R.raw.yourfile);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.prepare();
mMediaPlayer.start();
确保将文件放入文件夹PROJECT / res / raw /(如果不存在则创建它)
你的main.xml也有问题。你能发帖吗?
首先,您需要在src \ main \ res \ raw目录中保存sound1.ogg文件
设置直接传递“sound1.ogg”文件,以这种方式传递文件R.raw.sound1
soundID = soundPool.load(R.raw.sound1, 1);
这不是如何实现OnClickListener,这是一个在类中实现的接口,而不是强制转换为。你这样做是为了快速修复,但是由于AudioManager首先运行所以你回想起来,所以你认为这是错误的。