安卓模拟器能否播放音频?

5
我想录制并传递录制的声音到手机扬声器,但我无法让录音代码工作(应用程序崩溃,请看我的尝试),所以现在我正在尝试看看模拟器是否能处理音频。 我将一秒钟的录音(16位pcm,44k采样频率,单声道)分别复制到了sdcard中的wav和mp3格式文件中(录制和转换都是通过Audacity完成的)。 我可以在IDE的文件浏览器中看到这些文件,所以我猜测模拟器已经正确检测到了sdcard。 但是我无法让模拟器内置的音乐播放器检测到它们(为什么??)。
作为第二次尝试,我将代码在此处复制到示例hello world Android应用程序中。 这是主要活动类。
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // String PATH_TO_FILE = "/sdcard/asMP3.mp3";
        // String PATH_TO_FILE = Environment.getExternalStorageDirectory().getPath()+"/asMP3.mp3";
        String PATH_TO_FILE = Environment.getExternalStorageDirectory().getPath()+"/wavSigned16bitPCM.wav";
        MediaPlayer mp1 = new MediaPlayer();
        try
        {

            mp1.setDataSource(PATH_TO_FILE);
            mp1.prepare();
            mp1.start();
            Toast.makeText(getApplicationContext(), "HERE", Toast.LENGTH_SHORT).show();
        }
        catch (IllegalArgumentException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IllegalStateException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}  

我原以为这个应用程序一启动就会开始播放声音。Toast出现了,所以我知道代码正在执行。程序没有崩溃,但也没有发生其他任何事情,在这种情况下也没有声音(为什么?)
作为第三次尝试,我使用了此处的代码,并将我想要播放的文件添加到res\raw中,正如它所说的那样。这个程序也没有崩溃,但我仍然听不到任何声音。
所以问题是,在模拟器上是否有可能做与音频相关的任何事情?看着这个问题,似乎应该是可能的,那么为什么我的程序没有发生这种情况呢?我需要在清单中设置任何音频输出权限吗?
----编辑----
我也看到了这个链接,但是如果我使用-useaudio选项,模拟器会提示-useaudio是未知选项,并且emulator -help没有列出它,尽管在开发者网站上清楚地显示了该选项,而且还说默认启用useaudio。那么为什么我的模拟器没有播放任何声音呢? ---更新---
似乎如果使用快照启动模拟器,则音频功能无法正常工作。如果没有使用快照,则音频功能可能会或可能不会根据计算机而异。请参见此处
1个回答

2

是的,你可以在模拟器上进行音频相关的工作。

你的代码序列应该是 -

mp1 = new MediaPlayer();
mp1.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp1.setDataSource(PATH_TO_FILE);
mp1.prepare();
mp1.start();

关于在清单文件中设置权限的问题。

使用以下内容进行录音功能 -

使用以下内容进行播放功能 -

官方Android开发者网站上有一篇指南文章

音频捕获指南媒体播放指南

如果仍然无法解决问题,请发布您的日志截图。


请注意,https://developer.android.com/guide/topics/media/audio-capture.html 指出:“Android模拟器无法捕获音频,但实际设备可能提供这些功能。” - droidballoon
是的,模拟器本身没有捕获音频的能力,但如果主机PC安装了麦克风,则可以捕获音频。注意:[我没有尝试过,但我们可以试一试。](https://dev59.com/K2435IYBdhLWcg3wuign) - Karan Nagpal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接