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 он даже пропустил некоторые звуки.

Не могли бы вы сказать мне, что я делаю неправильно, или скажите, как бы вы это сделали.

0 ответов

Другие вопросы по тегам