• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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