-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.tsx
64 lines (52 loc) · 1.81 KB
/
index.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//
// Copyright 2020 Picovoice Inc.
//
// You may not use this file except in compliance with the license. A copy of the license is located in the "LICENSE"
// file accompanying this source.
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.
//
import { NativeModules } from 'react-native';
const RCTVoiceProcessor = NativeModules.PvVoiceProcessor;
type BufferCallbackType = (buffer: number[]) => void;
const BufferEmitter = RCTVoiceProcessor;
class VoiceProcessor {
private static instance: VoiceProcessor;
private _frameLength: number;
private _sampleRate: number;
private _recording: boolean;
private constructor(frameLength: number, sampleRate: number) {
this._frameLength = frameLength;
this._sampleRate = sampleRate;
this._recording = false;
}
public static getVoiceProcessor(
frameLength: number,
sampleRate: number
): VoiceProcessor {
if (!VoiceProcessor.instance) {
VoiceProcessor.instance = new VoiceProcessor(frameLength, sampleRate);
} else {
VoiceProcessor.instance._frameLength = frameLength;
VoiceProcessor.instance._sampleRate = sampleRate;
}
return VoiceProcessor.instance;
}
async start() {
if (this._recording) {
return Promise.resolve(true);
}
this._recording = true;
return RCTVoiceProcessor.start(this._frameLength, this._sampleRate);
}
async stop() {
if (!this._recording) {
return Promise.resolve(true);
}
this._recording = false;
return RCTVoiceProcessor.stop();
}
}
export { VoiceProcessor, BufferEmitter, BufferCallbackType };