mirror of
https://github.com/jeremysrand/ListenerApp.git
synced 2024-06-01 23:41:30 +00:00
Open a TCP connection to the GS. Send a message indicating when listening starts and stops. Need to actually send the text next.
This commit is contained in:
parent
1c691cdc05
commit
8178ba4aaf
|
@ -15,6 +15,12 @@ struct ContentView: View {
|
||||||
@State private var ipAddress = ""
|
@State private var ipAddress = ""
|
||||||
@State private var isEditing = false
|
@State private var isEditing = false
|
||||||
|
|
||||||
|
let LISTEN_STATE_MSG = 1
|
||||||
|
let LISTEN_TEXT_MSG = 2
|
||||||
|
|
||||||
|
let port = 19026
|
||||||
|
@State private var client: TCPClient?
|
||||||
|
|
||||||
private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "en-US"))!
|
private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "en-US"))!
|
||||||
|
|
||||||
@State private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest?
|
@State private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest?
|
||||||
|
@ -49,7 +55,18 @@ struct ContentView: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
func validate(destination : String) {
|
func validate(destination : String) {
|
||||||
listenEnabled = true
|
client = TCPClient(address: destination, port: Int32(port))
|
||||||
|
guard let client = client else { return }
|
||||||
|
switch client.connect(timeout: 10) {
|
||||||
|
case .success:
|
||||||
|
listenEnabled = true
|
||||||
|
case .failure(let error):
|
||||||
|
client.close()
|
||||||
|
self.client = nil
|
||||||
|
textHeard.append("\n")
|
||||||
|
textHeard.append(String(describing: error))
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func listen() {
|
func listen() {
|
||||||
|
@ -84,19 +101,50 @@ struct ContentView: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
guard let client = client else { return }
|
||||||
|
if (self.listening) {
|
||||||
|
switch (client.send(data: isListening())) {
|
||||||
|
case .success:
|
||||||
|
break
|
||||||
|
case .failure(let error):
|
||||||
|
self.listening = false
|
||||||
|
textHeard.append("\n")
|
||||||
|
textHeard.append(String(describing: error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (self.listening) {
|
if (self.listening) {
|
||||||
do {
|
do {
|
||||||
try startRecording()
|
try startRecording()
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
|
self.listening = false
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if (!self.listening) {
|
||||||
audioEngine.stop()
|
audioEngine.stop()
|
||||||
recognitionRequest?.endAudio()
|
recognitionRequest?.endAudio()
|
||||||
|
switch (client.send(data: isListening())) {
|
||||||
|
case .success:
|
||||||
|
break
|
||||||
|
case .failure(let error):
|
||||||
|
self.listening = false
|
||||||
|
textHeard.append("\n")
|
||||||
|
textHeard.append(String(describing: error))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func isListening() -> Data {
|
||||||
|
return pack("<hh", [LISTEN_STATE_MSG, listening ? 1 : 0])
|
||||||
|
}
|
||||||
|
|
||||||
|
private func send(latestText : String) {
|
||||||
|
|
||||||
|
self.textHeard = latestText
|
||||||
|
}
|
||||||
|
|
||||||
private func startRecording() throws {
|
private func startRecording() throws {
|
||||||
|
|
||||||
// Cancel the previous task if it's running.
|
// Cancel the previous task if it's running.
|
||||||
|
@ -119,6 +167,8 @@ struct ContentView: View {
|
||||||
recognitionRequest.requiresOnDeviceRecognition = false
|
recognitionRequest.requiresOnDeviceRecognition = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.textHeard = ""
|
||||||
|
|
||||||
// Create a recognition task for the speech recognition session.
|
// Create a recognition task for the speech recognition session.
|
||||||
// Keep a reference to the task so that it can be canceled.
|
// Keep a reference to the task so that it can be canceled.
|
||||||
recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest) { result, error in
|
recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest) { result, error in
|
||||||
|
@ -126,7 +176,7 @@ struct ContentView: View {
|
||||||
|
|
||||||
if let result = result {
|
if let result = result {
|
||||||
// Update the text view with the results.
|
// Update the text view with the results.
|
||||||
self.textHeard = result.bestTranscription.formattedString
|
send(latestText: result.bestTranscription.formattedString)
|
||||||
isFinal = result.isFinal
|
isFinal = result.isFinal
|
||||||
print("Text \(result.bestTranscription.formattedString)")
|
print("Text \(result.bestTranscription.formattedString)")
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.0</string>
|
<string>1.0</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>46</string>
|
<string>61</string>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>NSSpeechRecognitionUsageDescription</key>
|
<key>NSSpeechRecognitionUsageDescription</key>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user