Подтвердить что ты не робот

Как воспроизвести звук родной камеры на Android

Я хотел бы воспроизвести собственный звуковой клип затвора камеры на захвате предварительного просмотра камеры. Я имею в виду звуковой клип, который воспроизводится при вызове takePicture().
 Как мне это? Может ли кто-нибудь пройти меня через шаги?

4b9b3361

Ответ 1

Этот ресурс объясняет, как воспроизводить аудиофайлы: https://developer.android.com/guide/topics/media/index.html

Вероятно, вам придется предоставить свой собственный звуковой эффект затвора.

Ответ 2

Вы можете использовать класс MediaActionSound (доступный по API 16). Например:

MediaActionSound sound = new MediaActionSound();
sound.play(MediaActionSound.SHUTTER_CLICK);

Ответ 3

Если системный файл существует, вы можете использовать его следующим образом:

public void shootSound()
{
    AudioManager meng = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
    int volume = meng.getStreamVolume( AudioManager.STREAM_NOTIFICATION);

    if (volume != 0)
    {
        if (_shootMP == null)
            _shootMP = MediaPlayer.create(getContext(), Uri.parse("file:///system/media/audio/ui/camera_click.ogg"));
        if (_shootMP != null)
            _shootMP.start();
    }
}

Ответ 4

Возможно, вы захотите использовать SoundPool

SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 0);
int shutterSound = soundPool.load(this, R.raw.camera_click, 0);

а затем воспроизвести звук

soundPool.play(shutterSound, 1f, 1f, 0, 0, 1);

Ознакомьтесь с http://developer.android.com/reference/android/media/SoundPool.html, чтобы понять параметры.

Вам понадобится медиафайл с именем camera_click.ogg в вашем проекте при res/raw. Вы можете использовать звук Android по умолчанию, который можно получить в проекте с открытым исходным кодом Android в следующем местоположении (frameworks/base/data/sounds/effects/camera_click.ogg), если ваш проект лицензирован в соответствии с лицензией Apache. Если ваш проект не лицензирован по лицензии Apache, я понятия не имею, можете ли вы его использовать или нет. Я не юрист.

Ответ 5

Этот фрагмент поможет вам воспроизводить звук только тогда, когда режим звонка находится в обычном режиме, а не в беззвучном режиме или вибрации.

private var audioManager: AudioManager? = null
private var mediaPlayer: MediaPlayer? = null

private fun initAudio() {
    Log.v(LOG_TAG, "initAudio")

    audioManager ?: let {
        audioManager = context!!.getSystemService(Context.AUDIO_SERVICE) as AudioManager?
    }

    mediaPlayer = try {
        MediaPlayer().apply {
            if (Build.VERSION.SDK_INT >= 21) {
                val audioAttributes = AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_MEDIA)
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .build()
                setAudioAttributes(audioAttributes)
            } else {
                setAudioStreamType(AudioManager.STREAM_MUSIC)
            }
            if (Build.VERSION.SDK_INT <= 28) {
                setDataSource(context!!, Uri.parse("file:///system/media/audio/ui/camera_click.ogg"))
            } else {
                setDataSource(context!!, Uri.parse("file:///system/product/media/audio/ui/camera_click.ogg"))
            }
            prepare()
        }
    } catch (e: Exception) {
        Log.e(LOG_TAG, "initAudio", e)
        null
    }
}

private fun playClickSound() {

    if (audioManager?.ringerMode == AudioManager.RINGER_MODE_NORMAL) {
        mediaPlayer?.start()
    }
}