Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions plugins/RadCoPilot_Slicer/RadCoPilot.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,12 +166,14 @@ def setup(self):
self.ui.serverComboBox.lineEdit().setPlaceholderText("enter server address or leave empty to use default")
self.ui.scanComboBox.lineEdit().setPlaceholderText("enter scan address")
self.ui.fetchServerInfoButton.setIcon(self.icon("refresh-icon.png"))
self.ui.recordPromptButton.setIcon(self.icon("mic.jpeg"))
self.ui.uploadImageButton.setIcon(self.icon("upload.svg"))

# start with button disabled
self.ui.sendPrompt.setEnabled(False)
self.ui.uploadImageButton.setEnabled(False)
self.ui.fetchImageButton.setEnabled(False)
self.ui.recordPromptButton.setEnabled(False)
self.ui.outputText.setReadOnly(True)

# Connections
Expand All @@ -181,6 +183,7 @@ def setup(self):
self.ui.cleanOutputButton.connect("clicked(bool)", self.onClickCleanOutputButton)
self.ui.uploadImageButton.connect("clicked(bool)", self.onUploadImage)
self.ui.fetchImageButton.connect("clicked(bool)", self.onFetchImage)
self.ui.recordPromptButton.connect("clicked(bool)", self.onRecordAudio)


self.updateServerUrlGUIFromSettings()
Expand Down Expand Up @@ -318,6 +321,7 @@ def onClickFetchInfo(self):
self.ui.sendPrompt.setEnabled(True)
self.ui.uploadImageButton.setEnabled(True)
self.ui.fetchImageButton.setEnabled(True)
self.ui.recordPromptButton.setEnabled(True)
# Updating model name
self.ui.appDescriptionLabel.text = self.info

Expand Down Expand Up @@ -453,6 +457,35 @@ def onClickSendPrompt(self):
self.ui.outputText.setText(info['choices'][0]['message']['content'])
logging.info(f"Time consumed by fetch info: {time.time() - start:3.1f}")

def onRecordAudio(self):
'''Handles the voice prompts sent to the server.'''
audioRecorder = qt.QAudioRecorder()

# Select default audio input
audioInput = audioRecorder.audioInputs()[0]
audioRecorder.setAudioInput(audioInput)

# Set output location (use a valid path)
outputLocation = qt.QUrl.fromLocalFile("/tmp/output5.wav")
audioRecorder.setOutputLocation(outputLocation)

# Configure audio settings with compatible codec and container
audioSettings = qt.QAudioEncoderSettings()
audioSettings.setCodec("audio/pcm") # Use "audio/mpeg" for MP3 files
audioSettings.setQuality(qt.QMultimedia.HighQuality)
audioRecorder.setAudioSettings(audioSettings)

# Explicitly set container format (optional)
audioRecorder.setContainerFormat("wav") # Use "mp3" for MP3 files

# Start recording
audioRecorder.record()

# Stop recording after 5 seconds
qt.QTimer.singleShot(5000, audioRecorder.stop)





class RadCoPilotLogic(ScriptedLoadableModuleLogic):
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions plugins/RadCoPilot_Slicer/Resources/UI/RadCoPilot.ui
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,13 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="recordPromptButton">
<property name="text">
<string>Record Prompt</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
Expand Down