Android звуковая петля
Я занимаюсь разработкой приложения для Android, которое преобразует азбуку Морзе в звуки и вспышки. Вспышка работает хорошо, но у меня проблемы с звуком.
вот код, который я до сих пор:
SoundPool sp =new SoundPool.Builder().setMaxStreams(1).build(); // declare before onCreate()
int soundId = sp.load(this,R.raw.beep,1); // declared inside onCreate()
public void flashCode(View view){
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},0);
}
}
int dotTime=150; // in milliseconds
long ms=System.currentTimeMillis();
long ms2=System.currentTimeMillis();
//
//int streamID=mSoundPool.load(this,R.raw.beep,1);
for (int i=0;i<code.length();i++)
{
streamID=sp.play(soundId,1,1,1,1,1.0f);
sp.pause(streamID);
if (String.valueOf(code.charAt(i)).contentEquals("."))
{
String cameraId = null; // Usually front camera is at 0 position.
try {
cameraId = camManager.getCameraIdList()[0];
ms=System.currentTimeMillis();
ms2=System.currentTimeMillis()+dotTime;
camManager.setTorchMode(cameraId, true);
//mSoundPool.resume(streamID);
while (ms<ms2){
ms=System.currentTimeMillis();
}
camManager.setTorchMode(cameraId, false);
//mSoundPool.stop(streamID);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
if (String.valueOf(code.charAt(i)).contentEquals("-"))
{
String cameraId = null; // Usually front camera is at 0 position.
try {
cameraId = camManager.getCameraIdList()[0];
ms=System.currentTimeMillis();
ms2=System.currentTimeMillis()+dotTime*3;
camManager.setTorchMode(cameraId, true);
//mSoundPool.resume(streamID);
while (ms<ms2){
ms=System.currentTimeMillis();
}
camManager.setTorchMode(cameraId, false);
//mSoundPool.stop(streamID);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
if (String.valueOf(code.charAt(i)).contentEquals(" "))
{
String cameraId = null; // Usually front camera is at 0 position.
try {
cameraId = camManager.getCameraIdList()[0];
ms=System.currentTimeMillis();
ms2=System.currentTimeMillis()+dotTime;
camManager.setTorchMode(cameraId, false);
while (ms<ms2){
ms=System.currentTimeMillis();
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
}
}
Что я хочу, так это воспроизводить звук при включении и выключении вспышки, но только в течение этого времени. Я пробовал с SoundPool
но когда я проверил это, вспышка и звуки не были синхронизированы и MediaPlayer
он даже пропустил некоторые звуки.
Не могли бы вы сказать мне, что я делаю неправильно, или скажите, как бы вы это сделали.