Как воспроизвести родной звук с камеры на Android - PullRequest
25 голосов
/ 02 марта 2010

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

Ответы [ 5 ]

55 голосов
/ 28 июля 2015

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

MediaActionSound sound = new MediaActionSound();
sound.play(MediaActionSound.SHUTTER_CLICK);
19 голосов
/ 08 августа 2010

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

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();
    }
}
9 голосов
/ 07 мая 2010

Вы можете использовать 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 /ффекты / camera_click.ogg), если ваш проект лицензирован по лицензии Apache. Если ваш проект не лицензирован по лицензии Apache, я понятия не имею, можете ли вы использовать его или нет. Я не юрист.

3 голосов
/ 09 апреля 2010

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

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

0 голосов
/ 14 мая 2019

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

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()
    }
}
...