2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #ifndef __TIZEN_MEDIA_AUDIO__IO_CAUDIO_INFO_H__
18 #define __TIZEN_MEDIA_AUDIO__IO_CAUDIO_INFO_H__
23 #include <type_traits>
25 namespace tizen_media_audio {
28 constexpr auto to_integral(E e) -> typename std::underlying_type<E>::type {
29 return static_cast<typename std::underlying_type<E>::type>(e);
37 enum class EChannel : unsigned int {
38 CHANNEL_MONO = 1, /**< 1 channel, mono */
39 CHANNEL_STEREO, /**< 2 channel, stereo */
40 CHANNEL_MULTI_3, /**< 3 channel */
41 CHANNEL_MULTI_4, /**< 4 channel */
42 CHANNEL_MULTI_5, /**< 5 channel */
43 CHANNEL_MULTI_6, /**< 6 channel */
44 CHANNEL_MULTI_7, /**< 7 channel */
45 CHANNEL_MULTI_8, /**< 8 channel */
49 enum class ESampleType : unsigned int {
50 SAMPLE_TYPE_U8 = 1, /**< Unsigned 8-bit audio samples */
51 SAMPLE_TYPE_S16_LE, /**< Signed 16-bit audio samples */
52 SAMPLE_TYPE_S24_LE, /**< Signed 24-bit audio samples */
53 SAMPLE_TYPE_S24_32_LE, /**< Signed 24-bit packed in 32-bit audio samples */
54 SAMPLE_TYPE_S32_LE, /**< Signed 32-bit audio samples */
58 enum class EAudioType : unsigned int {
60 AUDIO_IN_TYPE_MEDIA = 0,
61 //AUDIO_IN_TYPE_SYSTEM,
62 //AUDIO_IN_TYPE_ALARM,
63 //AUDIO_IN_TYPE_NOTIFICATION,
64 //AUDIO_IN_TYPE_EMERGENCY,
65 //AUDIO_IN_TYPE_VOICE_INFORMATION,
66 AUDIO_IN_TYPE_VOICE_RECOGNITION,
67 //AUDIO_IN_TYPE_RINGTONE_VOIP,
69 AUDIO_IN_TYPE_MEDIA_EXTERNAL_ONLY,
70 //AUDIO_IN_TYPE_RINGTONE_CALL,
71 //AUDIO_IN_TYPE_VOICE_CALL,
72 //AUDIO_IN_TYPE_VIDEO_CALL,
73 //AUDIO_IN_TYPE_RADIO,
74 AUDIO_IN_TYPE_LOOPBACK,
75 AUDIO_IN_TYPE_VOICE_RECOGNITION_SERVICE,
76 //AUDIO_IN_TYPE_MEDIA_NETWORK_SOURCE,
80 AUDIO_OUT_TYPE_SYSTEM,
82 AUDIO_OUT_TYPE_NOTIFICATION,
83 AUDIO_OUT_TYPE_EMERGENCY,
84 AUDIO_OUT_TYPE_VOICE_INFORMATION,
85 //AUDIO_OUT_TYPE_VOICE_RECOGNITION,
86 AUDIO_OUT_TYPE_RINGTONE_VOIP,
88 AUDIO_OUT_TYPE_MEDIA_EXTERNAL_ONLY,
89 AUDIO_OUT_TYPE_RINGTONE_CALL,
90 //AUDIO_OUT_TYPE_VOICE_CALL,
91 //AUDIO_OUT_TYPE_VIDEO_CALL,
92 //AUDIO_OUT_TYPE_RADIO,
93 //AUDIO_OUT_TYPE_LOOPBACK,
94 //AUDIO_OUT_TYPE_VOICE_RECOGNITION_SERVICE,
95 AUDIO_OUT_TYPE_MEDIA_NETWORK_SOURCE,
100 enum class EAudioIOState : unsigned int {
101 AUDIO_IO_STATE_NONE, /**< Audio-io handle is not created */
102 AUDIO_IO_STATE_IDLE, /**< Audio-io handle is created, but not prepared */
103 AUDIO_IO_STATE_RUNNING, /**< Audio-io handle is ready and the stream is running */
104 AUDIO_IO_STATE_PAUSED, /**< Audio-io handle is ready and the stream is paused */
108 enum class EAudioDirection : unsigned int {
109 AUDIO_DIRECTION_IN, /**< Audio direction input */
110 AUDIO_DIRECTION_OUT, /**< Audio direction output */
114 static constexpr auto MIN_SYSTEM_SAMPLERATE = 8000;
115 static constexpr auto MAX_SYSTEM_SAMPLERATE = 192000;
117 static constexpr auto MIN_RECORD_VOLUME = 0.0;
118 static constexpr auto MAX_RECORD_VOLUME = 2.0;
119 static constexpr auto DEFAULT_RECORD_VOLUME = 1.0;
123 CAudioInfo(unsigned int sampleRate, EChannel channel, ESampleType sampleType, EAudioType audioType, int audioIndex);
124 virtual ~CAudioInfo() = default;
126 /* Setter & Getter */
127 unsigned int getSampleRate() noexcept;
128 EChannel getChannel() noexcept;
129 ESampleType getSampleType() noexcept;
130 EAudioType getAudioType() noexcept;
131 int getAudioIndex() noexcept;
132 void setAudioIndex(int audioIndex) noexcept;
133 int getSampleSize() noexcept;
135 /* Setter & Getter Utilities */
136 const char* getConvertedStreamType();
137 void setAudioTypeByInputStreamType(const char* streamType);
138 void setAudioTypeByOutputStreamType(const char* streamType);
141 const char *__STREAM_TYPE_TABLE[(unsigned int)EAudioType::AUDIO_TYPE_MAX] = {
143 "media", /**< AUDIO_IN_TYPE_MEDIA */
144 //"system", /**< AUDIO_IN_TYPE_SYSTEM */
145 //"alarm", /**< AUDIO_IN_TYPE_ALARM */
146 //"notification", /**< AUDIO_IN_TYPE_NOTIFICATION */
147 //"emergency", /**< AUDIO_IN_TYPE_EMERGENCY */
148 //"voice-information", /**< AUDIO_IN_TYPE_VOICE_INFORMATION */
149 "voice-recognition", /**< AUDIO_IN_TYPE_VOICE_RECOGNITION */
150 //"ringtone-voip", /**< AUDIO_IN_TYPE_RINGTONE_VOIP */
151 "voip", /**< AUDIO_IN_TYPE_VOIP */
152 "ext-media", /**< AUDIO_IN_TYPE_MEDIA_EXTERNAL_ONLY */
153 //"ringtone-call", /**< AUDIO_IN_TYPE_RINGTONE_CALL */
154 //"call-voice", /**< AUDIO_IN_TYPE_VOICE_CALL */
155 //"call-video", /**< AUDIO_IN_TYPE_VIDEO_CALL */
156 //"radio", /**< AUDIO_IN_TYPE_RADIO */
157 "loopback-mirroring", /**< AUDIO_IN_TYPE_LOOPBACK */
158 "voice-recognition-service", /**< AUDIO_IN_TYPE_VOICE_RECOGNITION_SERVICE */
159 //"network-source-media", /**< AUDIO_IN_TYPE_MEDIA_NETWORK_SOURCE */
162 "media", /**< AUDIO_OUT_TYPE_MEDIA */
163 "system", /**< AUDIO_OUT_TYPE_SYSTEM */
164 "alarm", /**< AUDIO_OUT_TYPE_ALARM */
165 "notification", /**< AUDIO_OUT_TYPE_NOTIFICATION */
166 "emergency", /**< AUDIO_OUT_TYPE_EMERGENCY */
167 "voice-information", /**< AUDIO_OUT_TYPE_VOICE_INFORMATION */
168 //"voice-recognition", /**< AUDIO_OUT_TYPE_VOICE_RECOGNITION */
169 "ringtone-voip", /**< AUDIO_OUT_TYPE_RINGTONE_VOIP */
170 "voip", /**< AUDIO_OUT_TYPE_VOIP */
171 "ext-media", /**< AUDIO_OUT_TYPE_MEDIA_EXTERNAL_ONLY */
172 "ringtone-call", /**< AUDIO_OUT_TYPE_RINGTONE_CALL */
173 //"call-voice", /**< AUDIO_OUT_TYPE_VOICE_CALL */
174 //"call-video", /**< AUDIO_OUT_TYPE_VIDEO_CALL */
175 //"radio", /**< AUDIO_OUT_TYPE_RADIO */
176 //"loopback-mirroring", /**< AUDIO_OUT_TYPE_LOOPBACK */
177 //"voice-recognition-service",/**< AUDIO_OUT_TYPE_VOICE_RECOGNITION_SERVICE */
178 "network-source-media", /**< AUDIO_OUT_TYPE_MEDIA_NETWORK_SOURCE */
181 EAudioType convertInputStreamTypeToAudioType(const char *streamType);
182 EAudioType convertOutputStreamTypeToAudioType(const char *streamType);
184 unsigned int __mSampleRate;
186 ESampleType __mSampleType;
187 EAudioType __mAudioType;
192 } /* namespace tizen_media_audio */
195 #endif /* __TIZEN_MEDIA_AUDIO__IO_CAUDIO_INFO_H__ */