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