我想录制并将录制的声音传递到手机的扬声器,但我无法让录制代码正常工作(应用程序崩溃,请在此处查看我的尝试)所以我现在正在尝试查看模拟器是否可以做任何与音频相关的事情或不。我将 wav(16 位 pcm,44k 采样频率,单声道)和 mp3(通过 Audacity 完成的记录和转换)都复制了 1 秒的录音到 SD 卡。我可以在 IDE 的文件资源管理器中看到这些文件,所以我猜 sdcard 已被模拟器正确检测到。但我无法让模拟器内置的音乐播放器检测到它们(为什么??)。
作为第二次尝试,我将代码HERE复制到示例 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
了,所以我知道代码正在执行。程序没有崩溃,但也没有其他任何事情发生,在这种情况下也没有声音(为什么?)
作为第三次尝试,我使用了代码HERE,并添加了我想要播放的文件res\raw
。该程序也没有崩溃,但我仍然听不到任何声音。
所以问题是,有没有可能在模拟器上做任何与音频相关的事情?看看这个问题,看起来这应该是可能的,那么为什么我的程序中没有发生呢?我是否还需要在他的清单中设置任何权限以进行音频输出?
- - 编辑 - -
我也看过THIS,但是如果我使用-useaudio
模拟器刚刚说-useaudio
的选项是未知选项,并且emulator -help
没有列出它,那么它在开发人员网站上清楚地显示为一个选项,而且它说默认情况下启用了 useaudio。那么为什么我的模拟器没有播放任何声音呢?
--- 更新 ---
如果模拟器已使用快照启动,音频功能似乎不起作用。如果没有,音频功能仍然可能会或可能不会工作,具体取决于计算机。请看这里