X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=include%2FCAudioInfo.h;h=3a86f07083be95fbf924f5e2a081ecff40d51d8f;hb=refs%2Ftags%2Faccepted%2Ftizen%2Funified%2F20231101.174518;hp=00236a7e3ec76b04336006075ddf86186776b716;hpb=501552733935177b9a6a8a98f3b45057f7e1c25e;p=platform%2Fcore%2Fapi%2Faudio-io.git diff --git a/include/CAudioInfo.h b/include/CAudioInfo.h index 00236a7..3a86f07 100644 --- a/include/CAudioInfo.h +++ b/include/CAudioInfo.h @@ -20,9 +20,20 @@ #ifdef __cplusplus +#include +#include +#include +#include + +#include +#include namespace tizen_media_audio { + template + constexpr auto to_integral(E e) -> typename std::underlying_type::type { + return static_cast::type>(e); + } /** * Audio Information @@ -32,12 +43,29 @@ namespace tizen_media_audio { enum class EChannel : unsigned int { CHANNEL_MONO = 1, /**< 1 channel, mono */ CHANNEL_STEREO, /**< 2 channel, stereo */ + CHANNEL_MULTI_3, /**< 3 channel */ + CHANNEL_MULTI_4, /**< 4 channel */ + CHANNEL_MULTI_5, /**< 5 channel */ + CHANNEL_MULTI_6, /**< 6 channel */ + CHANNEL_MULTI_7, /**< 7 channel */ + CHANNEL_MULTI_8, /**< 8 channel */ + CHANNEL_MULTI_9, /**< 9 channel */ + CHANNEL_MULTI_10, /**< 10 channel */ + CHANNEL_MULTI_11, /**< 11 channel */ + CHANNEL_MULTI_12, /**< 12 channel */ + CHANNEL_MULTI_13, /**< 13 channel */ + CHANNEL_MULTI_14, /**< 14 channel */ + CHANNEL_MULTI_15, /**< 15 channel */ + CHANNEL_MULTI_16, /**< 16 channel */ CHANNEL_MAX }; enum class ESampleType : unsigned int { SAMPLE_TYPE_U8 = 1, /**< Unsigned 8-bit audio samples */ SAMPLE_TYPE_S16_LE, /**< Signed 16-bit audio samples */ + SAMPLE_TYPE_S24_LE, /**< Signed 24-bit audio samples */ + SAMPLE_TYPE_S24_32_LE, /**< Signed 24-bit packed in 32-bit audio samples */ + SAMPLE_TYPE_S32_LE, /**< Signed 32-bit audio samples */ SAMPLE_TYPE_MAX }; @@ -58,6 +86,8 @@ namespace tizen_media_audio { //AUDIO_IN_TYPE_VIDEO_CALL, //AUDIO_IN_TYPE_RADIO, AUDIO_IN_TYPE_LOOPBACK, + AUDIO_IN_TYPE_VOICE_RECOGNITION_SERVICE, + //AUDIO_IN_TYPE_MEDIA_NETWORK_SOURCE, /* Output Type */ AUDIO_OUT_TYPE_MEDIA, @@ -75,6 +105,8 @@ namespace tizen_media_audio { //AUDIO_OUT_TYPE_VIDEO_CALL, //AUDIO_OUT_TYPE_RADIO, //AUDIO_OUT_TYPE_LOOPBACK, + //AUDIO_OUT_TYPE_VOICE_RECOGNITION_SERVICE, + AUDIO_OUT_TYPE_MEDIA_NETWORK_SOURCE, AUDIO_TYPE_MAX }; @@ -87,25 +119,45 @@ namespace tizen_media_audio { AUDIO_IO_STATE_MAX }; - const static unsigned int MIN_SYSTEM_SAMPLERATE = 8000; - const static unsigned int MAX_SYSTEM_SAMPLERATE = 48000; - - /* Constructors */ - CAudioInfo(); - CAudioInfo(unsigned int sampleRate, EChannel channel, ESampleType sampleType, EAudioType audioType, int audioIndex) throw(CAudioError); - - /* Setter & Getter */ - unsigned int getSampleRate(); - EChannel getChannel(); - ESampleType getSampleType(); - EAudioType getAudioType(); - void setAudioType(EAudioType audioType); - int getAudioIndex(); - void setAudioIndex(int audioIndex); - void convertAudioType2StreamType(CAudioInfo::EAudioType audioType, char **streamType); - void convertInputStreamType2AudioType(char *streamType, CAudioInfo::EAudioType *audioType); - void convertOutputStreamType2AudioType(char *streamType, CAudioInfo::EAudioType *audioType); - int getSampleSize(); + enum class EAudioDirection : unsigned int { + AUDIO_DIRECTION_IN, /**< Audio direction input */ + AUDIO_DIRECTION_OUT, /**< Audio direction output */ + AUDIO_DIRECTION_MAX + }; + + static constexpr auto MIN_SYSTEM_SAMPLERATE = 8000; + static constexpr auto MAX_SYSTEM_SAMPLERATE = 192000; + + static constexpr auto MIN_RECORD_VOLUME = 0.0; + static constexpr auto MAX_RECORD_VOLUME = 2.0; + static constexpr auto DEFAULT_RECORD_VOLUME = 1.0; + + /* Constructor & Destructor */ + CAudioInfo(unsigned int sampleRate, EChannel channel, ESampleType sampleType, EAudioType audioType, int audioIndex); + virtual ~CAudioInfo() = default; + + /* Audio Specification */ + std::tuple getSpec() const noexcept; + int getSampleSize() const noexcept; + + /* Stream Properties */ + void setAudioIndex(int audioIndex) noexcept; + void setAudioTypeByInputStreamType(const char* streamType); + void setAudioTypeByOutputStreamType(const char* streamType); + EAudioType getAudioType() const noexcept; + std::pair getStreamProperties() const; + + /* Effect */ + void setEffectMethod(int method) noexcept; + std::string getEffectNoiseSuppressionMethod() const noexcept; + std::string getEffectAutomaticGainControlMethod() const noexcept; + + void setEffectMethodWithReference(sound_effect_method_with_reference_e method, int id) noexcept; + std::pair getEffectMethodWithReference() const noexcept; + + /* Utilities */ + size_t msToBytes(size_t milliseconds) const noexcept; + size_t bytesToMs(size_t bytes) const noexcept; private: const char *__STREAM_TYPE_TABLE[(unsigned int)EAudioType::AUDIO_TYPE_MAX] = { @@ -125,6 +177,8 @@ namespace tizen_media_audio { //"call-video", /**< AUDIO_IN_TYPE_VIDEO_CALL */ //"radio", /**< AUDIO_IN_TYPE_RADIO */ "loopback-mirroring", /**< AUDIO_IN_TYPE_LOOPBACK */ + "voice-recognition-service", /**< AUDIO_IN_TYPE_VOICE_RECOGNITION_SERVICE */ + //"network-source-media", /**< AUDIO_IN_TYPE_MEDIA_NETWORK_SOURCE */ /* Output Type */ "media", /**< AUDIO_OUT_TYPE_MEDIA */ @@ -142,13 +196,23 @@ namespace tizen_media_audio { //"call-video", /**< AUDIO_OUT_TYPE_VIDEO_CALL */ //"radio", /**< AUDIO_OUT_TYPE_RADIO */ //"loopback-mirroring", /**< AUDIO_OUT_TYPE_LOOPBACK */ + //"voice-recognition-service",/**< AUDIO_OUT_TYPE_VOICE_RECOGNITION_SERVICE */ + "network-source-media", /**< AUDIO_OUT_TYPE_MEDIA_NETWORK_SOURCE */ }; - unsigned int __mSampleRate; - EChannel __mChannel; - ESampleType __mSampleType; - EAudioType __mAudioType; - int __mAudioIndex; + EAudioType convertInputStreamTypeToAudioType(const char *streamType); + EAudioType convertOutputStreamTypeToAudioType(const char *streamType); + + unsigned int __mSampleRate { MAX_SYSTEM_SAMPLERATE }; + EChannel __mChannel { EChannel::CHANNEL_MAX }; + ESampleType __mSampleType { ESampleType::SAMPLE_TYPE_MAX }; + EAudioType __mAudioType { EAudioType::AUDIO_TYPE_MAX }; + int __mAudioIndex { -1 }; + + std::optional + __mEffectMethodWithReference; + int __mEffectMethodReferenceDeviceId { 0 }; + int __mEffectMethod { 0 }; };