【发布时间】:2018-03-12 23:38:39
【问题描述】:
我只是尝试使用 MediaPlayer 播放声音。下面的代码在常规 Android 项目中运行良好,不会通过音频插孔或 HDMI 显示器的扬声器播放声音。
final MediaPlayer mp = MediaPlayer.create(getActivity(), R.raw.score);
mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return false;
}
});
mp.start();
我是不是以错误的方式处理这个问题? MediaPlayer 类是否不适用于 Android Things?
更新 1
作为替代方法,我也尝试使用 AudioTrack 播放声音,这也不起作用:
int i = 0;
byte[] music = null;
InputStream is = getActivity().getResources().openRawResource(R.raw.score);
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 44100,
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
AudioTrack.getMinBufferSize(44100,
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT), AudioTrack.MODE_STREAM);
try{
music = new byte[512];
at.play();
while((i = is.read(music)) != -1)
at.write(music, 0, i);
} catch (IOException e) {
e.printStackTrace();
}
at.stop();
at.release();
更新 2
建议设置首选设备。这也不起作用。
mAudioOutputDevice = findAudioDevice(AudioManager.GET_DEVICES_OUTPUTS, AudioDeviceInfo.TYPE_BUILTIN_SPEAKER);
获取设备
private AudioDeviceInfo findAudioDevice(int deviceFlag, int deviceType) {
AudioManager manager = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
AudioDeviceInfo[] adis = manager.getDevices(deviceFlag);
for (AudioDeviceInfo adi : adis) {
if (adi.getType() == deviceType) {
return adi;
}
}
return null;
}
在这里我设置了首选设备。
int i = 0;
byte[] music = null;
InputStream is = getActivity().getResources().openRawResource(R.raw.score);
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 44100,
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
AudioTrack.getMinBufferSize(44100,
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT), AudioTrack.MODE_STREAM);
at.setPreferredDevice(mAudioOutputDevice);
try{
music = new byte[512];
at.play();
while((i = is.read(music)) != -1)
at.write(music, 0, i);
} catch (IOException e) {
e.printStackTrace();
}
at.stop();
at.release();
【问题讨论】:
标签: android raspberry-pi raspberry-pi3 android-things