1 /* 2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef AUDIO_PARAMETERS_NAPI_H_ 17 #define AUDIO_PARAMETERS_NAPI_H_ 18 19 #include <iostream> 20 #include <map> 21 22 #include "audio_info.h" 23 #include "napi/native_api.h" 24 #include "napi/native_node_api.h" 25 26 namespace OHOS { 27 namespace AudioStandard { 28 static const std::string AUDIO_PARAMETERS_NAPI_CLASS_NAME = "AudioParameters"; 29 30 static const std::int32_t REFERENCE_CREATION_COUNT = 1; 31 32 static const std::map<std::string, AudioChannel> audioChannelMap = { 33 {"CHANNEL_1", MONO}, 34 {"CHANNEL_2", STEREO} 35 }; 36 37 static const std::map<std::string, AudioSamplingRate> samplingRateMap = { 38 {"SAMPLE_RATE_8000", SAMPLE_RATE_8000}, 39 {"SAMPLE_RATE_11025", SAMPLE_RATE_11025}, 40 {"SAMPLE_RATE_12000", SAMPLE_RATE_12000}, 41 {"SAMPLE_RATE_16000", SAMPLE_RATE_16000}, 42 {"SAMPLE_RATE_22050", SAMPLE_RATE_22050}, 43 {"SAMPLE_RATE_24000", SAMPLE_RATE_24000}, 44 {"SAMPLE_RATE_32000", SAMPLE_RATE_32000}, 45 {"SAMPLE_RATE_44100", SAMPLE_RATE_44100}, 46 {"SAMPLE_RATE_48000", SAMPLE_RATE_48000}, 47 {"SAMPLE_RATE_64000", SAMPLE_RATE_64000}, 48 {"SAMPLE_RATE_96000", SAMPLE_RATE_96000} 49 }; 50 51 static const std::map<std::string, AudioEncodingType> encodingTypeMap = { 52 {"ENCODING_TYPE_INVALID", ENCODING_INVALID}, 53 {"ENCODING_TYPE_RAW", ENCODING_PCM} 54 }; 55 56 static const std::map<std::string, ContentType> contentTypeMap = { 57 {"CONTENT_TYPE_UNKNOWN", CONTENT_TYPE_UNKNOWN}, 58 {"CONTENT_TYPE_SPEECH", CONTENT_TYPE_SPEECH}, 59 {"CONTENT_TYPE_MUSIC", CONTENT_TYPE_MUSIC}, 60 {"CONTENT_TYPE_MOVIE", CONTENT_TYPE_MOVIE}, 61 {"CONTENT_TYPE_SONIFICATION", CONTENT_TYPE_SONIFICATION}, 62 {"CONTENT_TYPE_RINGTONE", CONTENT_TYPE_RINGTONE} 63 }; 64 65 static const std::map<std::string, StreamUsage> streamUsageMap = { 66 {"STREAM_USAGE_UNKNOWN", STREAM_USAGE_UNKNOWN}, 67 {"STREAM_USAGE_MEDIA", STREAM_USAGE_MEDIA}, 68 {"STREAM_USAGE_VOICE_ASSISTANT", STREAM_USAGE_VOICE_ASSISTANT}, 69 {"STREAM_USAGE_VOICE_COMMUNICATION", STREAM_USAGE_VOICE_COMMUNICATION}, 70 {"STREAM_USAGE_NOTIFICATION_RINGTONE", STREAM_USAGE_NOTIFICATION_RINGTONE} 71 }; 72 73 static const std::map<std::string, DeviceRole> deviceRoleMap = { 74 {"DEVICE_ROLE_NONE", DEVICE_ROLE_NONE}, 75 {"INPUT_DEVICE", INPUT_DEVICE}, 76 {"OUTPUT_DEVICE", OUTPUT_DEVICE}, 77 {"DEVICE_ROLE_MAX", DEVICE_ROLE_MAX} 78 }; 79 80 static const std::map<std::string, DeviceType> deviceTypeMap = { 81 {"NONE", DEVICE_TYPE_NONE}, 82 {"INVALID", DEVICE_TYPE_INVALID}, 83 {"EARPIECE", DEVICE_TYPE_EARPIECE}, 84 {"SPEAKER", DEVICE_TYPE_SPEAKER}, 85 {"WIRED_HEADSET", DEVICE_TYPE_WIRED_HEADSET}, 86 {"WIRED_HEADPHONES", DEVICE_TYPE_WIRED_HEADPHONES}, 87 {"BLUETOOTH_SCO", DEVICE_TYPE_BLUETOOTH_SCO}, 88 {"BLUETOOTH_A2DP", DEVICE_TYPE_BLUETOOTH_A2DP}, 89 {"MIC", DEVICE_TYPE_MIC}, 90 {"USB_HEADSET", DEVICE_TYPE_USB_HEADSET}, 91 {"DEFAULT", DEVICE_TYPE_DEFAULT}, 92 {"MAX", DEVICE_TYPE_MAX}, 93 }; 94 95 static const std::map<std::string, SourceType> sourceTypeMap = { 96 {"SOURCE_TYPE_INVALID", SOURCE_TYPE_INVALID}, 97 {"SOURCE_TYPE_MIC", SOURCE_TYPE_MIC}, 98 {"SOURCE_TYPE_VOICE_RECOGNITION", SOURCE_TYPE_VOICE_RECOGNITION}, 99 {"SOURCE_TYPE_VOICE_COMMUNICATION", SOURCE_TYPE_VOICE_COMMUNICATION} 100 }; 101 102 class AudioParametersNapi { 103 public: 104 AudioParametersNapi(); 105 ~AudioParametersNapi(); 106 107 static napi_value Init(napi_env env, napi_value exports); 108 static napi_value CreateAudioParametersWrapper(napi_env env, std::unique_ptr<AudioParameters> &audioParameters); 109 110 private: 111 static void Destructor(napi_env env, void *nativeObject, void *finalize_hint); 112 static napi_value Construct(napi_env env, napi_callback_info info); 113 static napi_value GetAudioSampleFormat(napi_env env, napi_callback_info info); 114 static napi_value SetAudioSampleFormat(napi_env env, napi_callback_info info); 115 static napi_value GetAudioChannel(napi_env env, napi_callback_info info); 116 static napi_value SetAudioChannel(napi_env env, napi_callback_info info); 117 static napi_value GetAudioSamplingRate(napi_env env, napi_callback_info info); 118 static napi_value SetAudioSamplingRate(napi_env env, napi_callback_info info); 119 static napi_value GetAudioEncodingType(napi_env env, napi_callback_info info); 120 static napi_value SetAudioEncodingType(napi_env env, napi_callback_info info); 121 static napi_value GetContentType(napi_env env, napi_callback_info info); 122 static napi_value SetContentType(napi_env env, napi_callback_info info); 123 static napi_value GetStreamUsage(napi_env env, napi_callback_info info); 124 static napi_value SetStreamUsage(napi_env env, napi_callback_info info); 125 static napi_value GetDeviceRole(napi_env env, napi_callback_info info); 126 static napi_value SetDeviceRole(napi_env env, napi_callback_info info); 127 static napi_value GetDeviceType(napi_env env, napi_callback_info info); 128 static napi_value SetDeviceType(napi_env env, napi_callback_info info); 129 130 static napi_status AddNamedProperty(napi_env env, napi_value object, const std::string name, int32_t enumValue); 131 static napi_value CreateAudioSampleFormatObject(napi_env env); 132 static napi_value CreateAudioChannelObject(napi_env env); 133 static napi_value CreateSamplingRateObject(napi_env env); 134 static napi_value CreateEncodingTypeObject(napi_env env); 135 static napi_value CreateContentTypeObject(napi_env env); 136 static napi_value CreateStreamUsageObject(napi_env env); 137 static napi_value CreateDeviceRoleObject(napi_env env); 138 static napi_value CreateDeviceTypeObject(napi_env env); 139 static napi_value CreateSourceTypeObject(napi_env env); 140 141 static napi_ref sConstructor_; 142 static napi_ref audioChannel_; 143 static napi_ref samplingRate_; 144 static napi_ref encodingType_; 145 static napi_ref contentType_; 146 static napi_ref streamUsage_; 147 static napi_ref deviceRole_; 148 static napi_ref deviceType_; 149 static napi_ref sourceType_; 150 151 static std::unique_ptr<AudioParameters> sAudioParameters_; 152 153 std::unique_ptr<AudioParameters> audioParameters_; 154 napi_env env_; 155 }; 156 } // namespace AudioStandard 157 } // namespace OHOS 158 #endif /* AUDIO_PARAMETERS_NAPI_H_ */ 159