private synchronized void startRender() { Log.d(TAG, "startRender " + AudioSystem.getForceUse(FOR_PROPRIETARY)); // need to create new audio record and audio play back track, // because input/output device may be changed. if (mAudioRecord != null) { mAudioRecord.stop(); mAudioRecord.release(); mAudioRecord = null; } if (mAudioTrack != null) { mAudioTrack.stop(); mAudioTrack.release(); mAudioTrack = null; } initAudioRecordSink(); mIsRender = true; synchronized (mRenderLock) { mRenderLock.notify(); } }
private boolean isPatchMixerToEarphone(ArrayList<AudioPatch> patches) { int deviceCount = 0; int deviceEarphoneCount = 0; for (AudioPatch patch : patches) { AudioPortConfig[] sources = patch.sources(); AudioPortConfig[] sinks = patch.sinks(); AudioPortConfig sourceConfig = sources[0]; AudioPortConfig sinkConfig = sinks[0]; AudioPort sourcePort = sourceConfig.port(); AudioPort sinkPort = sinkConfig.port(); Log.d(TAG, "isPatchMixerToEarphone " + sourcePort + " ====> " + sinkPort); if (sourcePort instanceof AudioMixPort && sinkPort instanceof AudioDevicePort) { deviceCount++; int type = ((AudioDevicePort) sinkPort).type(); if (type == AudioSystem.DEVICE_OUT_WIRED_HEADSET || type == AudioSystem.DEVICE_OUT_WIRED_HEADPHONE) { // deviceEarphoneCount++; } } } if (deviceEarphoneCount == 1 && deviceCount == deviceEarphoneCount) { return true; } return false; }
private synchronized int createAudioPatch() { Log.d(TAG, "createAudioPatch"); int status = AudioManager.SUCCESS; if (mAudioPatch != null) { Log.d(TAG, "createAudioPatch, mAudioPatch is not null, return"); return status; } mAudioSource = null; mAudioSink = null; ArrayList<AudioPort> ports = new ArrayList<AudioPort>(); mAudioManager.listAudioPorts(ports); for (AudioPort port : ports) { if (port instanceof AudioDevicePort) { int type = ((AudioDevicePort) port).type(); String name = AudioSystem.getOutputDeviceName(type); if (type == AudioSystem.DEVICE_IN_FM_TUNER) { mAudioSource = (AudioDevicePort) port; } else if (type == AudioSystem.DEVICE_OUT_WIRED_HEADSET || type == AudioSystem.DEVICE_OUT_WIRED_HEADPHONE) { mAudioSink = (AudioDevicePort) port; } } } if (mAudioSource != null && mAudioSink != null) { AudioDevicePortConfig sourceConfig = (AudioDevicePortConfig) mAudioSource .activeConfig(); AudioDevicePortConfig sinkConfig = (AudioDevicePortConfig) mAudioSink.activeConfig(); AudioPatch[] audioPatchArray = new AudioPatch[] {null}; status = mAudioManager.createAudioPatch(audioPatchArray, new AudioPortConfig[] {sourceConfig}, new AudioPortConfig[] {sinkConfig}); mAudioPatch = audioPatchArray[0]; } return status; }
private void forceToHeadsetMode() { if (mIsSpeakerUsed && isHeadSetIn()) { AudioSystem.setForceUse(FOR_PROPRIETARY, AudioSystem.FORCE_NONE); // save user's option to shared preferences. FmUtils.setIsSpeakerModeOnFocusLost(mContext, true); } }
/** * Set FM audio from speaker or not * * @param isSpeaker true if set FM audio from speaker */ public void setSpeakerPhoneOn(boolean isSpeaker) { Log.d(TAG, ">>> FmRadioService.useSpeaker: " + isSpeaker); mForcedUseForMedia = isSpeaker ? AudioSystem.FORCE_SPEAKER : AudioSystem.FORCE_NONE; AudioSystem.setForceUse(FOR_PROPRIETARY, mForcedUseForMedia); mIsSpeakerUsed = isSpeaker; Log.d(TAG, "<<< FmRadioService.useSpeaker"); }
private void setForceUse(boolean isSpeaker) { mForcedUseForMedia = isSpeaker ? AudioSystem.FORCE_SPEAKER : AudioSystem.FORCE_NONE; AudioSystem.setForceUse(FOR_PROPRIETARY, mForcedUseForMedia); mIsSpeakerUsed = isSpeaker; }
private boolean isSpeakerPhoneOn() { return (mForcedUseForMedia == AudioSystem.FORCE_SPEAKER); }
private void setForceUseSpeaker(boolean isOn) { int forcedUseForMedia = isOn ? AudioSystem.FORCE_SPEAKER : AudioSystem.FORCE_NONE; AudioSystem.setForceUse(FOR_PROPRIETARY, forcedUseForMedia); }