如果传感器检测到一定量的运动则播放歌曲
Play song if sensor detects certain amount of movement
我基本上是在传感器检测到运动变化时调用不同的歌曲,例如...
如果未检测到移动,请播放歌曲 1。
如果检测到移动,播放歌曲 2。
否则如果运动停止再次播放歌曲 1。
到目前为止,我已经成功播放了上面的前两个 If 语句,但是,如果音乐播放器不自行播放,我将无法将其恢复到歌曲 1。我试过使用 .pause();
,但它似乎只暂停了一秒钟,然后一遍又一遍地播放 song1。
这是我目前拥有的:
public void onSensorChanged(SensorEvent se) {
float x = se.values[0];
float y = se.values[1];
float z = se.values[2];
mAccelLast = mAccelCurrent;
mAccelCurrent = (float) Math.sqrt((double) (x * x + y * y + z * z));
float delta = mAccelCurrent - mAccelLast;
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
mp1.start(); //song1 starts
if (mAccel > 5) { // movement
mp2.start(); // start song2
if (mp2.isPlaying()) { // if song 2 is playing stop song1
mp1.stop();
}
}
}
使用 1 个媒体播放器对象,而不是其中的 2 个。通过重新使用媒体播放器,您将确保一次只播放 1 个声音,同时保持较低的系统资源使用率。
创建一个将停止媒体播放器然后释放它的新函数,如:
private void stopPlaying() {
if (mp != null) {
mp.stop();
mp.release();
mp = null;
}
}
然后添加一个函数来重新创建并启动播放新音频的媒体播放器。
我基本上是在传感器检测到运动变化时调用不同的歌曲,例如...
如果未检测到移动,请播放歌曲 1。 如果检测到移动,播放歌曲 2。 否则如果运动停止再次播放歌曲 1。
到目前为止,我已经成功播放了上面的前两个 If 语句,但是,如果音乐播放器不自行播放,我将无法将其恢复到歌曲 1。我试过使用 .pause();
,但它似乎只暂停了一秒钟,然后一遍又一遍地播放 song1。
这是我目前拥有的:
public void onSensorChanged(SensorEvent se) {
float x = se.values[0];
float y = se.values[1];
float z = se.values[2];
mAccelLast = mAccelCurrent;
mAccelCurrent = (float) Math.sqrt((double) (x * x + y * y + z * z));
float delta = mAccelCurrent - mAccelLast;
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
mp1.start(); //song1 starts
if (mAccel > 5) { // movement
mp2.start(); // start song2
if (mp2.isPlaying()) { // if song 2 is playing stop song1
mp1.stop();
}
}
}
使用 1 个媒体播放器对象,而不是其中的 2 个。通过重新使用媒体播放器,您将确保一次只播放 1 个声音,同时保持较低的系统资源使用率。
创建一个将停止媒体播放器然后释放它的新函数,如:
private void stopPlaying() {
if (mp != null) {
mp.stop();
mp.release();
mp = null;
}
}
然后添加一个函数来重新创建并启动播放新音频的媒体播放器。