mirror of
https://github.com/patw/AudioSumma.git
synced 2025-04-21 16:19:08 +00:00
Added drop down for selecting the recording device.
This commit is contained in:
parent
ac27eaf826
commit
6128f02615
1 changed files with 39 additions and 11 deletions
50
meetings.py
50
meetings.py
|
@ -3,7 +3,7 @@ import os
|
||||||
import pyaudio
|
import pyaudio
|
||||||
import wave
|
import wave
|
||||||
import threading
|
import threading
|
||||||
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QHBoxLayout, QInputDialog, QLabel
|
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QHBoxLayout, QInputDialog, QLabel, QComboBox
|
||||||
from PyQt5.QtGui import QIcon, QPixmap
|
from PyQt5.QtGui import QIcon, QPixmap
|
||||||
import summarize
|
import summarize
|
||||||
|
|
||||||
|
@ -18,30 +18,57 @@ class RecordingApp(QWidget):
|
||||||
self.p = None
|
self.p = None
|
||||||
self.wf = None
|
self.wf = None
|
||||||
self.initUI()
|
self.initUI()
|
||||||
|
|
||||||
def initUI(self):
|
def initUI(self):
|
||||||
self.setWindowTitle('Meeting Recorder')
|
self.setWindowTitle('Meeting Recorder')
|
||||||
self.setGeometry(500, 500, 500, 150)
|
self.setGeometry(500, 500, 500, 150)
|
||||||
|
|
||||||
layout = QHBoxLayout()
|
# Main vertical layout
|
||||||
|
main_layout = QVBoxLayout()
|
||||||
|
|
||||||
|
# Horizontal layout for the status label and device combo box
|
||||||
|
top_layout = QHBoxLayout()
|
||||||
|
|
||||||
self.status_label = QLabel(self)
|
self.status_label = QLabel(self)
|
||||||
self.status_label.setPixmap(self.not_recording_pixmap)
|
self.status_label.setPixmap(self.not_recording_pixmap)
|
||||||
layout.addWidget(self.status_label)
|
top_layout.addWidget(self.status_label)
|
||||||
|
|
||||||
|
self.device_combo = QComboBox(self)
|
||||||
|
self.device_combo.addItems(self.get_device_names())
|
||||||
|
top_layout.addWidget(self.device_combo)
|
||||||
|
|
||||||
|
main_layout.addLayout(top_layout)
|
||||||
|
|
||||||
|
# Horizontal layout for the buttons
|
||||||
|
button_layout = QHBoxLayout()
|
||||||
|
|
||||||
self.record_button = QPushButton('Record', self)
|
self.record_button = QPushButton('Record', self)
|
||||||
self.record_button.clicked.connect(self.toggle_recording)
|
self.record_button.clicked.connect(self.toggle_recording)
|
||||||
layout.addWidget(self.record_button)
|
button_layout.addWidget(self.record_button)
|
||||||
|
|
||||||
self.transcribe_button = QPushButton('Transcribe', self)
|
self.transcribe_button = QPushButton('Transcribe', self)
|
||||||
self.transcribe_button.clicked.connect(self.transcribe)
|
self.transcribe_button.clicked.connect(self.transcribe)
|
||||||
layout.addWidget(self.transcribe_button)
|
button_layout.addWidget(self.transcribe_button)
|
||||||
|
|
||||||
self.clean_button = QPushButton('Clean', self)
|
self.clean_button = QPushButton('Clean', self)
|
||||||
self.clean_button.clicked.connect(self.clean)
|
self.clean_button.clicked.connect(self.clean)
|
||||||
layout.addWidget(self.clean_button)
|
button_layout.addWidget(self.clean_button)
|
||||||
|
|
||||||
self.setLayout(layout)
|
main_layout.addLayout(button_layout)
|
||||||
|
|
||||||
|
self.setLayout(main_layout)
|
||||||
|
|
||||||
|
def get_device_names(self):
|
||||||
|
p = pyaudio.PyAudio()
|
||||||
|
info = p.get_host_api_info_by_index(0)
|
||||||
|
num_devices = info.get('deviceCount')
|
||||||
|
device_names = []
|
||||||
|
for i in range(num_devices):
|
||||||
|
device_info = p.get_device_info_by_host_api_device_index(0, i)
|
||||||
|
if device_info.get('maxInputChannels') > 0:
|
||||||
|
device_names.append(device_info.get('name'))
|
||||||
|
p.terminate()
|
||||||
|
return device_names
|
||||||
|
|
||||||
def toggle_recording(self):
|
def toggle_recording(self):
|
||||||
if not self.is_recording:
|
if not self.is_recording:
|
||||||
|
@ -55,7 +82,8 @@ class RecordingApp(QWidget):
|
||||||
self.is_recording = True
|
self.is_recording = True
|
||||||
self.record_button.setText('Stop Recording')
|
self.record_button.setText('Stop Recording')
|
||||||
self.status_label.setPixmap(self.recording_pixmap)
|
self.status_label.setPixmap(self.recording_pixmap)
|
||||||
self.audio_thread = threading.Thread(target=self.record_audio, args=(filename,))
|
selected_device_index = self.device_combo.currentIndex()
|
||||||
|
self.audio_thread = threading.Thread(target=self.record_audio, args=(filename, selected_device_index))
|
||||||
self.audio_thread.start()
|
self.audio_thread.start()
|
||||||
|
|
||||||
def stop_recording(self):
|
def stop_recording(self):
|
||||||
|
@ -73,7 +101,7 @@ class RecordingApp(QWidget):
|
||||||
if self.wf:
|
if self.wf:
|
||||||
self.wf.close()
|
self.wf.close()
|
||||||
|
|
||||||
def record_audio(self, filename):
|
def record_audio(self, filename, device_index):
|
||||||
chunk_size = 1024
|
chunk_size = 1024
|
||||||
sampling_rate = 16000
|
sampling_rate = 16000
|
||||||
num_channels = 1
|
num_channels = 1
|
||||||
|
@ -92,7 +120,7 @@ class RecordingApp(QWidget):
|
||||||
rate=sampling_rate,
|
rate=sampling_rate,
|
||||||
input=True,
|
input=True,
|
||||||
frames_per_buffer=chunk_size,
|
frames_per_buffer=chunk_size,
|
||||||
input_device_index=0
|
input_device_index=device_index
|
||||||
)
|
)
|
||||||
|
|
||||||
print(f"Recording to {file_path}. Press 'Stop Recording' to stop...")
|
print(f"Recording to {file_path}. Press 'Stop Recording' to stop...")
|
||||||
|
|
Loading…
Add table
Reference in a new issue