• 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 };
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