java - 如何在 Android 中播放音频文件?

标签 java android

我有代码可以播放从 Internet 下载的 .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;
}
}

我认为我有两个问题:

  1. 我把它放在 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="Click on the screen to start playing"
        android:id="@+id/textView1" android:layout_width="fill_parent"
        android:layout_height="fill_parent"></TextView>
    </LinearLayout>
    
    And I don't know if it's correct.

  2. I put the file sound1.ogg in the workspace->SoundPlay2 folder because in the res folder I had problems, and also, I tried to put it in the two res folders that exist.

This is from my console:

[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 类中允许的文件及其特性(持续时间、采样率......)的一些信息。你能告诉我在哪里可以找到这个吗??

最佳答案

在 res 文件夹中创建 raw 文件夹并将您的文件添加到其中。然后使用

播放文件
soundID = soundPool.load(R.raw.sound1, 1);

还可以看到这个 post对于您的 main.xml 问题。

关于java - 如何在 Android 中播放音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8732291/

相关文章:

c# - 如何使用 C# 在 Android 中将复选框文本的位置更改为左侧

java - 未找到 AuthSchemeFactory 类

java - 无法找到 JAX-WS 架构 http ://jax-ws. dev.java.net/spring/servlet.xsd

java - 如何从代码中获取 Keystore 指纹

java - 将索引移动到二进制文件的不同位置

android - ViewPager中如何在每个页面显示不同的文字,instantiateItem()混淆

java - Maven 插件依赖项包含在 MANIFEST.MF 中

android - SPen 将图像转换为文本

android - 停止并重放音频文件

java - 如何在 GridLayoutManager 中改变每条偶数行的方向?