Skip to content

Commit

Permalink
speech to text added
Browse files Browse the repository at this point in the history
  • Loading branch information
akshatkumawat committed Feb 2, 2021
0 parents commit d415d6b
Show file tree
Hide file tree
Showing 67 changed files with 28,117 additions and 0 deletions.
6 changes: 6 additions & 0 deletions .buckconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

[android]
target = Google Inc.:Google APIs:23

[maven_repositories]
central = https://repo1.maven.org/maven2
4 changes: 4 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
root: true,
extends: '@react-native-community',
};
73 changes: 73 additions & 0 deletions .flowconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
[ignore]
; We fork some components by platform
.*/*[.]android.js

; Ignore "BUCK" generated dirs
<PROJECT_ROOT>/\.buckd/

; Ignore polyfills
node_modules/react-native/Libraries/polyfills/.*

; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/warning')
node_modules/warning/.*

; Flow doesn't support platforms
.*/Libraries/Utilities/LoadingView.js

[untyped]
.*/node_modules/@react-native-community/cli/.*/.*

[include]

[libs]
node_modules/react-native/interface.js
node_modules/react-native/flow/

[options]
emoji=true

esproposal.optional_chaining=enable
esproposal.nullish_coalescing=enable

module.file_ext=.js
module.file_ext=.json
module.file_ext=.ios.js

munge_underscores=true

module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1'
module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'

suppress_type=$FlowIssue
suppress_type=$FlowFixMe
suppress_type=$FlowFixMeProps
suppress_type=$FlowFixMeState

suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError

[lints]
sketchy-null-number=warn
sketchy-null-mixed=warn
sketchy-number=warn
untyped-type-import=warn
nonstrict-import=warn
deprecated-type=warn
unsafe-getters-setters=warn
unnecessary-invariant=warn
signature-verification-failure=warn
deprecated-utility=error

[strict]
deprecated-type
nonstrict-import
sketchy-null
unclear-type
unsafe-getters-setters
untyped-import
untyped-type-import

[version]
^0.122.0
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.pbxproj -text
59 changes: 59 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# OSX
#
.DS_Store

# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate

# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml

# node.js
#
node_modules/
npm-debug.log
yarn-error.log

# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore

# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/

*/fastlane/report.xml
*/fastlane/Preview.html
*/fastlane/screenshots

# Bundle artifact
*.jsbundle

# CocoaPods
/ios/Pods/
6 changes: 6 additions & 0 deletions .prettierrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
bracketSpacing: false,
jsxBracketSameLine: true,
singleQuote: true,
trailingComma: 'all',
};
1 change: 1 addition & 0 deletions .watchmanconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
228 changes: 228 additions & 0 deletions App.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
import React, {useEffect, useReducer, useState} from 'react';
import {
StyleSheet,
View,
Text,
TouchableOpacity,
ActivityIndicator,
ImageBackground,
} from 'react-native';
import Video from 'react-native-video';
import SpeechToText from 'react-native-google-speech-to-text';
import {reducer} from './src/reducers/Reducers';
import {ACTIONS} from './src/actions/Actions';
import {catList, dogList} from './src/assets/Lists';

const initialState = {
Term: '',
paused: false,
loading: false,
currentIndex: 0,
videoList: [],
timerTime: 0,
};

const App = () => {
const [state, dispatch] = useReducer(reducer, initialState);

const {Term, paused, loading, currentIndex, videoList, timerTime} = state;

useEffect(() => {
const interval = setInterval(() => {
dispatch({type: ACTIONS.SET_TIMER_TIME, payload: null});
}, 1000);
return () => clearInterval(interval);
}, []);

useEffect(() => {
if (timerTime + 1 >= 5 && videoList.length > 0) {
setTimeout(() => {
playNext();
}, 1000);
}
}, [timerTime]);

const speechToTextHandler = async () => {
dispatch({type: ACTIONS.SET_TIMER_TIME, payload: 0});

let speechToTextData = null;
try {
speechToTextData = await SpeechToText.startSpeech(
'Try saying something',
'en_IN',
);
console.log('speechToTextData: ', speechToTextData);
if (speechToTextData.toLowerCase() == 'i want to see cats') {
console.log('Setting cats');
dispatch({type: ACTIONS.SET_PAUSE, payload: false});

dispatch({type: ACTIONS.SET_TERM, payload: speechToTextData});
dispatch({type: ACTIONS.SET_VIDEO_LIST, payload: catList});

dispatch({type: ACTIONS.SET_CURRENT_INDEX, payload: 0});
} else if (speechToTextData.toLowerCase() == 'show me dogs') {
console.log('Setting dogs');
dispatch({type: ACTIONS.SET_PAUSE, payload: false});
dispatch({type: ACTIONS.SET_CURRENT_INDEX, payload: 0});

dispatch({type: ACTIONS.SET_TERM, payload: speechToTextData});

dispatch({type: ACTIONS.SET_VIDEO_LIST, payload: dogList});
} else {
alert(
`speach didn't matched try speaking "Show me dogs" or "I want to see cats"`,
);
}
} catch (error) {
console.log('error: ', error);
}
};

function playNext() {
dispatch({type: ACTIONS.SET_LOADING, payload: true});

dispatch({type: ACTIONS.SET_PAUSE, payload: false});

setTimeout(() => {
if (currentIndex < videoList.length - 1) {
dispatch({type: ACTIONS.SET_CURRENT_INDEX, payload: currentIndex + 1});
} else {
dispatch({type: ACTIONS.SET_CURRENT_INDEX, payload: 0});
}
dispatch({type: ACTIONS.SET_TIMER_TIME, payload: 0});
dispatch({type: ACTIONS.SET_LOADING, payload: false});
}, 2000);
}

return (
<TouchableOpacity
activeOpacity={1}
style={{flex: 1}}
onPress={() => {
dispatch({type: ACTIONS.SET_TIMER_TIME, payload: 0});
}}>
<View
style={{
flex: 1,
alignItems: 'center',
justifyContent: 'center',
backgroundColor: '#323F4E',
}}>
{/* <Text>{`idle time : ${timerTime}`}</Text> */}

{Term.length > 0 && (
<Text
style={{
alignContent: 'center',
margin: 15,
fontWeight: 'bold',
fontSize: 18,
color: 'white',
}}>{`You Searched For :\n${Term}`}</Text>
)}

{loading ? (
<View
style={{
alignSelf: 'stretch',
height: 400,
alignItems: 'center',
justifyContent: 'center',
backgroundColor: 'white',
marginHorizontal: 10,
borderRadius: 10,
}}>
<ActivityIndicator size="large" color="black" />
<Text style={{}}>Loading..</Text>
</View>
) : videoList.length > 0 ? (
<View
style={{
alignSelf: 'stretch',
backgroundColor: 'white',
marginHorizontal: 10,
paddingVertical: 20,
borderRadius: 12,
}}>
<Video
source={videoList[currentIndex]}
onEnd={playNext}
onLoad={() => {
dispatch({type: ACTIONS.SET_TIMER_TIME, payload: 0});
}}
paused={paused}
style={{
alignSelf: 'stretch',
height: 300,
backgroundColor: 'black',
}}
resizeMode="contain"
/>
<View
style={{
marginTop: 10,
alignItems: 'center',
justifyContent: 'center',
}}>
<TouchableOpacity
onPress={() => {
dispatch({type: ACTIONS.SET_TIMER_TIME, payload: 0});

dispatch({type: ACTIONS.SET_PAUSE, payload: !paused});
}}
style={{
paddingVertical: 4,
paddingHorizontal: 8,
borderColor: 'grey',
alignContent: 'center',
justifyContent: 'center',
alignItems: 'center',
borderWidth: 1,
borderRadius: 8,
}}>
<Text>{paused ? 'Play' : 'Pause'}</Text>
</TouchableOpacity>
</View>
</View>
) : (
<Text
style={{
color: 'white',
fontSize: 18,
fontWeight: 'bold',
alignSelf: 'center',
alignContent: 'center',
}}>
Search Some thing by clicking the button
</Text>
)}

<View
style={{
position: 'absolute',
bottom: 0,
right: 0,
left: 0,
alignItems: 'center',
paddingVertical: 10,
height: 100,
}}>
<TouchableOpacity
onPress={speechToTextHandler}
style={{
height: 80,
width: 80,
borderRadius: 40,
backgroundColor: '#F76A6A',
borderColor: 'white',
borderWidth: 3,
}}></TouchableOpacity>
</View>
</View>
</TouchableOpacity>
);
};

const styles = StyleSheet.create({});

export default App;
Loading

0 comments on commit d415d6b

Please sign in to comment.