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 {"CONTENT_TYPE_ULTRASONIC", CONTENT_TYPE_ULTRASONIC} 64 }; 65 66 static const std::map<std::string, StreamUsage> streamUsageMap = { 67 {"STREAM_USAGE_UNKNOWN", STREAM_USAGE_UNKNOWN}, 68 {"STREAM_USAGE_MEDIA", STREAM_USAGE_MEDIA}, 69 {"STREAM_USAGE_MUSIC", STREAM_USAGE_MUSIC}, 70 {"STREAM_USAGE_VOICE_COMMUNICATION", STREAM_USAGE_VOICE_COMMUNICATION}, 71 {"STREAM_USAGE_VOICE_ASSISTANT", STREAM_USAGE_VOICE_ASSISTANT}, 72 {"STREAM_USAGE_ALARM", STREAM_USAGE_ALARM}, 73 {"STREAM_USAGE_VOICE_MESSAGE", STREAM_USAGE_VOICE_MESSAGE}, 74 {"STREAM_USAGE_NOTIFICATION_RINGTONE", STREAM_USAGE_NOTIFICATION_RINGTONE}, 75 {"STREAM_USAGE_RINGTONE", STREAM_USAGE_RINGTONE}, 76 {"STREAM_USAGE_NOTIFICATION", STREAM_USAGE_NOTIFICATION}, 77 {"STREAM_USAGE_ACCESSIBILITY", STREAM_USAGE_ACCESSIBILITY}, 78 {"STREAM_USAGE_SYSTEM", STREAM_USAGE_SYSTEM}, 79 {"STREAM_USAGE_MOVIE", STREAM_USAGE_MOVIE}, 80 {"STREAM_USAGE_GAME", STREAM_USAGE_GAME}, 81 {"STREAM_USAGE_AUDIOBOOK", STREAM_USAGE_AUDIOBOOK}, 82 {"STREAM_USAGE_NAVIGATION", STREAM_USAGE_NAVIGATION}, 83 {"STREAM_USAGE_DTMF", STREAM_USAGE_DTMF}, 84 {"STREAM_USAGE_ENFORCED_TONE", STREAM_USAGE_ENFORCED_TONE}, 85 {"STREAM_USAGE_ULTRASONIC", STREAM_USAGE_ULTRASONIC} 86 }; 87 88 static const std::map<std::string, DeviceRole> deviceRoleMap = { 89 {"DEVICE_ROLE_NONE", DEVICE_ROLE_NONE}, 90 {"INPUT_DEVICE", INPUT_DEVICE}, 91 {"OUTPUT_DEVICE", OUTPUT_DEVICE}, 92 {"DEVICE_ROLE_MAX", DEVICE_ROLE_MAX} 93 }; 94 95 static const std::map<std::string, DeviceType> deviceTypeMap = { 96 {"NONE", DEVICE_TYPE_NONE}, 97 {"INVALID", DEVICE_TYPE_INVALID}, 98 {"EARPIECE", DEVICE_TYPE_EARPIECE}, 99 {"SPEAKER", DEVICE_TYPE_SPEAKER}, 100 {"WIRED_HEADSET", DEVICE_TYPE_WIRED_HEADSET}, 101 {"WIRED_HEADPHONES", DEVICE_TYPE_WIRED_HEADPHONES}, 102 {"BLUETOOTH_SCO", DEVICE_TYPE_BLUETOOTH_SCO}, 103 {"BLUETOOTH_A2DP", DEVICE_TYPE_BLUETOOTH_A2DP}, 104 {"MIC", DEVICE_TYPE_MIC}, 105 {"WAKEUP", DEVICE_TYPE_WAKEUP}, 106 {"USB_HEADSET", DEVICE_TYPE_USB_HEADSET}, 107 {"DEFAULT", DEVICE_TYPE_DEFAULT}, 108 {"MAX", DEVICE_TYPE_MAX}, 109 }; 110 111 static const std::map<std::string, SourceType> sourceTypeMap = { 112 {"SOURCE_TYPE_INVALID", SOURCE_TYPE_INVALID}, 113 {"SOURCE_TYPE_MIC", SOURCE_TYPE_MIC}, 114 {"SOURCE_TYPE_WAKEUP", SOURCE_TYPE_WAKEUP}, 115 {"SOURCE_TYPE_VOICE_RECOGNITION", SOURCE_TYPE_VOICE_RECOGNITION}, 116 {"SOURCE_TYPE_PLAYBACK_CAPTURE", SOURCE_TYPE_PLAYBACK_CAPTURE}, 117 {"SOURCE_TYPE_VOICE_COMMUNICATION", SOURCE_TYPE_VOICE_COMMUNICATION} 118 }; 119 120 static const std::map<std::string, VolumeAdjustType> volumeAdjustTypeMap = { 121 {"VOLUME_UP", VOLUME_UP}, 122 {"VOLUME_DOWN", VOLUME_DOWN}, 123 }; 124 125 class AudioParametersNapi { 126 public: 127 AudioParametersNapi(); 128 ~AudioParametersNapi(); 129 130 static napi_value Init(napi_env env, napi_value exports); 131 static napi_value CreateAudioParametersWrapper(napi_env env, std::unique_ptr<AudioParameters> &audioParameters); 132 133 private: 134 static void Destructor(napi_env env, void *nativeObject, void *finalize_hint); 135 static napi_value Construct(napi_env env, napi_callback_info info); 136 static napi_value GetAudioSampleFormat(napi_env env, napi_callback_info info); 137 static napi_value SetAudioSampleFormat(napi_env env, napi_callback_info info); 138 static napi_value GetAudioChannel(napi_env env, napi_callback_info info); 139 static napi_value SetAudioChannel(napi_env env, napi_callback_info info); 140 static napi_value GetAudioSamplingRate(napi_env env, napi_callback_info info); 141 static napi_value SetAudioSamplingRate(napi_env env, napi_callback_info info); 142 static napi_value GetAudioEncodingType(napi_env env, napi_callback_info info); 143 static napi_value SetAudioEncodingType(napi_env env, napi_callback_info info); 144 static napi_value GetContentType(napi_env env, napi_callback_info info); 145 static napi_value SetContentType(napi_env env, napi_callback_info info); 146 static napi_value GetStreamUsage(napi_env env, napi_callback_info info); 147 static napi_value SetStreamUsage(napi_env env, napi_callback_info info); 148 static napi_value GetDeviceRole(napi_env env, napi_callback_info info); 149 static napi_value SetDeviceRole(napi_env env, napi_callback_info info); 150 static napi_value GetDeviceType(napi_env env, napi_callback_info info); 151 static napi_value SetDeviceType(napi_env env, napi_callback_info info); 152 153 static napi_status AddNamedProperty(napi_env env, napi_value object, const std::string name, int32_t enumValue); 154 static napi_value CreateAudioSampleFormatObject(napi_env env); 155 static napi_value CreateAudioChannelObject(napi_env env); 156 static napi_value CreateSamplingRateObject(napi_env env); 157 static napi_value CreateEncodingTypeObject(napi_env env); 158 static napi_value CreateContentTypeObject(napi_env env); 159 static napi_value CreateStreamUsageObject(napi_env env); 160 static napi_value CreateDeviceRoleObject(napi_env env); 161 static napi_value CreateDeviceTypeObject(napi_env env); 162 static napi_value CreateSourceTypeObject(napi_env env); 163 static napi_value CreateVolumeAdjustTypeObject(napi_env env); 164 165 static napi_ref sConstructor_; 166 static napi_ref audioChannel_; 167 static napi_ref samplingRate_; 168 static napi_ref encodingType_; 169 static napi_ref contentType_; 170 static napi_ref streamUsage_; 171 static napi_ref deviceRole_; 172 static napi_ref deviceType_; 173 static napi_ref sourceType_; 174 175 static std::unique_ptr<AudioParameters> sAudioParameters_; 176 177 std::unique_ptr<AudioParameters> audioParameters_; 178 napi_env env_; 179 }; 180 } // namespace AudioStandard 181 } // namespace OHOS 182 #endif /* AUDIO_PARAMETERS_NAPI_H_ */ 183