Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中播放音频文件?_Java_Android - Fatal编程技术网

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

Java 如何在Android中播放音频文件?,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.Bun

我有代码来播放从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;
}
}
我想我有两个问题:

  • 我把它放在
    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> 我从“”中选取了这个例子。 我想播放一个音频文件,更具体地说,是
    .wav
    文件


    我不知道在哪里可以找到有关MediaPlayer类中允许的文件及其特性(durantion、采样率…)的信息。您能告诉我在哪里可以找到这些信息吗???

    播放某种蜂鸣器的示例。在原始文件夹下的res文件夹中,我有一个蜂鸣器.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();
            }
    
        });
    
    }
    

    我以前从未见过SoundPool类,但是我建议使用MediaPlayer类:

    mMediaPlayer = new MediaPlayer(this, R.raw.yourfile);
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mMediaPlayer.prepare();
    mMediaPlayer.start();
    
    确保将文件放入文件夹PROJECT/res/raw/(如果不存在,则创建它)


    您的main.xml也有问题。您可以发布它吗?

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

    soundID = soundPool.load(R.raw.sound1, 1);
    

    对于main.xml问题,请参见此

    首先需要将sound1.ogg文件保存在src\main\res\raw目录中

    安装直接传递“sound1.ogg”文件,以这种方式传递文件R.raw.sound1

    soundID = soundPool.load(R.raw.sound1, 1);
    

    这不是OnClickListener的实现方式,这是一个在类中实现的接口,而不是强制强制转换到的接口。您这样做是为了快速解决问题,但由于AudioManager首先运行,所以您认为这是错误的。

    我已经编写了soundID=soundPool.load(R.raw.sound1,1);但是出现了一个错误,soundID=soundPool.load(this,R.raw.sound1,1);但是,当我运行它时,不会出现任何错误,应用程序会崩溃!!view.setOnClickListener((OnClickListener)this);。此行崩溃,因为您尚未实现View.onclicklistner。为“活动”实现interface View.onclicklistner。请查看获取代码的教程。他们已经实现了Ontouchlistener。逐行比较代码。Soundpool主要用于游戏。就像在战争游戏中发出爆炸声一样。如果要播放文件或流。你应该更好地使用Mediapalyer类,甚至是android 2.3以后提供的本机音频API。这种方法只用于播放.wav文件吗??我在哪里可以把它添加到我的代码中??谢谢我做过类似的事情,但我使用了一个.ogg文件。当我引入.wav文件时,它不起作用。我必须知道这方面有什么规定吗?谢谢你能告诉我我需要删除或更改代码的哪一部分才能插入吗?老实说,如果你不知道要更改什么,你就不理解你自己的代码。删除与声音池交互的所有行,然后阅读以下内容:这是我在日志cat:E/AndroidRuntime(739):java.lang.RuntimeException:无法启动活动组件信息{play.my.sound/play.my.sound.PlaySound2Activity}:java.lang.ClassCastException:play.my.sound.PlaySound2Activity无法强制转换为android.view.view$OnClickListener为什么不在google中搜索简单的答案呢。谷歌对“支持的音频格式”进行了一次简单的搜索。
    soundID = soundPool.load(R.raw.sound1, 1);