• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 // The functions in this file are called from native code. They can still be
12 // accessed even though they are declared private.
13 
14 package org.webrtc.voiceengine;
15 
16 import android.content.Context;
17 import android.content.pm.PackageManager;
18 import android.media.AudioManager;
19 
20 class AudioManagerAndroid {
21   // Most of Google lead devices use 44.1K as the default sampling rate, 44.1K
22   // is also widely used on other android devices.
23   private static final int DEFAULT_SAMPLING_RATE = 44100;
24   // Randomly picked up frame size which is close to return value on N4.
25   // Return this default value when
26   // getProperty(PROPERTY_OUTPUT_FRAMES_PER_BUFFER) fails.
27   private static final int DEFAULT_FRAMES_PER_BUFFER = 256;
28 
29   private int mNativeOutputSampleRate;
30   private boolean mAudioLowLatencySupported;
31   private int mAudioLowLatencyOutputFrameSize;
32 
33 
34   @SuppressWarnings("unused")
AudioManagerAndroid(Context context)35   private AudioManagerAndroid(Context context) {
36     AudioManager audioManager = (AudioManager)
37         context.getSystemService(Context.AUDIO_SERVICE);
38 
39     mNativeOutputSampleRate = DEFAULT_SAMPLING_RATE;
40     mAudioLowLatencyOutputFrameSize = DEFAULT_FRAMES_PER_BUFFER;
41     if (android.os.Build.VERSION.SDK_INT >=
42         android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
43       String sampleRateString = audioManager.getProperty(
44           AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
45       if (sampleRateString != null) {
46         mNativeOutputSampleRate = Integer.parseInt(sampleRateString);
47       }
48       String framesPerBuffer = audioManager.getProperty(
49           AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
50       if (framesPerBuffer != null) {
51           mAudioLowLatencyOutputFrameSize = Integer.parseInt(framesPerBuffer);
52       }
53     }
54     mAudioLowLatencySupported = context.getPackageManager().hasSystemFeature(
55         PackageManager.FEATURE_AUDIO_LOW_LATENCY);
56   }
57 
58     @SuppressWarnings("unused")
getNativeOutputSampleRate()59     private int getNativeOutputSampleRate() {
60       return mNativeOutputSampleRate;
61     }
62 
63     @SuppressWarnings("unused")
isAudioLowLatencySupported()64     private boolean isAudioLowLatencySupported() {
65         return mAudioLowLatencySupported;
66     }
67 
68     @SuppressWarnings("unused")
getAudioLowLatencyOutputFrameSize()69     private int getAudioLowLatencyOutputFrameSize() {
70         return mAudioLowLatencyOutputFrameSize;
71     }
72 }