-
-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathindex.tsx
65 lines (61 loc) · 1.97 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
65
import React, { useState } from 'react';
import { View, StyleSheet } from 'react-native';
import Button from '../../Components/Button';
import Row from '../../Components/Row';
import { Audio } from 'react-native-compressor';
import DocumentPicker from 'react-native-document-picker';
import prettyBytes from 'pretty-bytes';
import { getFileInfo } from '../../Utils';
const Index = () => {
const [fileName, setFileName] = useState('');
const [mimeType, setMimeType] = useState('');
const [orignalSize, setOrignalSize] = useState(0);
const [compressedSize, setCompressedSize] = useState(0);
const chooseAudioHandler = async () => {
try {
const res: any = await DocumentPicker.pick({
type: [DocumentPicker.types.audio],
});
setOrignalSize(prettyBytes(res[0]?.size));
setFileName(res[0].name);
setMimeType(res[0].type);
console.log('source file: ', res[0].uri);
Audio.compress(res[0].uri, {
quality: 'medium',
// bitrate: 64000,
// samplerate: 44100,
// channels: 1,
})
.then(async (outputFilePath: string) => {
console.log(outputFilePath, 'outputFilePath compressed audio');
const detail: any = await getFileInfo(outputFilePath);
setCompressedSize(prettyBytes(parseInt(detail.size)));
})
.catch((e) => {
console.log(e, 'error');
});
} catch (err) {
if (DocumentPicker.isCancel(err)) {
} else {
throw err;
}
}
};
return (
<View style={styles.container}>
<Row label="File Name" value={fileName} />
<Row label="Mime Type" value={mimeType} />
<Row label="Orignal Size" value={orignalSize} />
<Row label="Compressed Size" value={compressedSize} />
<Button onPress={chooseAudioHandler} title="Choose Audio" />
</View>
);
};
export default Index;
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
});