1df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv/* 2df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * Copyright (C) 2016 The Android Open Source Project 3df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * 4df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * Licensed under the Apache License, Version 2.0 (the "License"); 5df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * you may not use this file except in compliance with the License. 6df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * You may obtain a copy of the License at 7df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * 8df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * http://www.apache.org/licenses/LICENSE-2.0 9df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * 10df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * Unless required by applicable law or agreed to in writing, software 11df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * distributed under the License is distributed on an "AS IS" BASIS, 12df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * See the License for the specific language governing permissions and 14df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * limitations under the License. 15df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv */ 16df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkivpackage android.support.car.media; 17df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 18df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkivimport android.media.AudioFormat; 19df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkivimport android.media.AudioRecord; 20141349407981da8a88f61c0b906240a1c3603ef7Keun-young Parkimport android.support.annotation.RestrictTo; 21150d8de43e71a624106e90bcc04067414c42ef18Keun-young Parkimport android.support.car.CarNotConnectedException; 22141349407981da8a88f61c0b906240a1c3603ef7Keun-young Park 23141349407981da8a88f61c0b906240a1c3603ef7Keun-young Parkimport static android.support.annotation.RestrictTo.Scope.GROUP_ID; 24df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 25df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv/** 26df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv * CarAudioRecordEmbedded allows apps to use microphone. 279aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * @hide 28df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv */ 29141349407981da8a88f61c0b906240a1c3603ef7Keun-young Park@RestrictTo(GROUP_ID) 30141349407981da8a88f61c0b906240a1c3603ef7Keun-young Parkpublic class CarAudioRecordEmbedded extends CarAudioRecord { 31df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 32df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv private final AudioFormat mFormat; 33df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv private final int mBufferSize; 34df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv private final AudioRecord mAudioRecord; 35df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 36df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 37df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv CarAudioRecordEmbedded(AudioFormat format, int bufferSize) { 38df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv mFormat = format; 39df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv mBufferSize = bufferSize; 40df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv mAudioRecord = new AudioRecord.Builder() 41df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv .setAudioFormat(mFormat) 42df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv .setBufferSizeInBytes(mBufferSize) 43df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv .build(); 44df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv } 45df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 46df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv @Override 47150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park public int getBufferSize() throws CarNotConnectedException { 48df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv return mBufferSize; 49df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv } 50df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 51df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv @Override 52150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park public void startRecording() throws CarNotConnectedException { 53df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv mAudioRecord.startRecording(); 54df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv } 55df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 56df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv @Override 57df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv public void stop() { 58df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv mAudioRecord.stop(); 59df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv } 60df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 61df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv @Override 62df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv public void release() { 63df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv mAudioRecord.release(); 64df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv } 65df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 66df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv @Override 67150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park public int getRecordingState() throws CarNotConnectedException { 68df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv return mAudioRecord.getRecordingState(); 69df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv } 70df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 71df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv @Override 72150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park public int getState() throws CarNotConnectedException { 73df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv return mAudioRecord.getState(); 74df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv } 75df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 76df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv @Override 77150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park public int getAudioSessionId() throws CarNotConnectedException { 78df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv return mAudioRecord.getAudioSessionId(); 79df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv } 80df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv 81df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv @Override 82df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv public int read(byte[] audioData, int offsetInBytes, int sizeInBytes) 83150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park throws CarNotConnectedException, IllegalStateException { 84df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv return mAudioRecord.read(audioData, offsetInBytes, sizeInBytes); 85df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv } 86df5e37387b5bcbed7345b11c0e8393d2d8959306Vitalii Tomkiv} 87