pygpt-net 2.4.49__py3-none-any.whl → 2.4.51__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- CHANGELOG.md +10 -0
- README.md +12 -62
- pygpt_net/CHANGELOG.txt +10 -0
- pygpt_net/__init__.py +3 -3
- pygpt_net/controller/access/voice.py +19 -36
- pygpt_net/controller/audio/__init__.py +15 -1
- pygpt_net/controller/lang/custom.py +2 -1
- pygpt_net/controller/ui/tabs.py +7 -1
- pygpt_net/core/audio/__init__.py +10 -17
- pygpt_net/core/audio/capture.py +349 -0
- pygpt_net/data/config/config.json +5 -3
- pygpt_net/data/config/models.json +3 -3
- pygpt_net/data/config/modes.json +3 -3
- pygpt_net/data/config/settings.json +13 -0
- pygpt_net/data/locale/locale.de.ini +3 -0
- pygpt_net/data/locale/locale.en.ini +3 -0
- pygpt_net/data/locale/locale.es.ini +3 -0
- pygpt_net/data/locale/locale.fr.ini +3 -0
- pygpt_net/data/locale/locale.it.ini +3 -0
- pygpt_net/data/locale/locale.pl.ini +3 -0
- pygpt_net/data/locale/locale.uk.ini +3 -0
- pygpt_net/data/locale/locale.zh.ini +3 -0
- pygpt_net/plugin/audio_input/simple.py +45 -55
- pygpt_net/provider/core/config/patch.py +9 -1
- pygpt_net/ui/layout/chat/input.py +0 -12
- pygpt_net/ui/menu/__init__.py +4 -3
- pygpt_net/ui/widget/audio/input_button.py +84 -24
- pygpt_net/ui/widget/dialog/snap.py +2 -2
- pygpt_net/ui/widget/dialog/update.py +3 -2
- {pygpt_net-2.4.49.dist-info → pygpt_net-2.4.51.dist-info}/METADATA +13 -63
- {pygpt_net-2.4.49.dist-info → pygpt_net-2.4.51.dist-info}/RECORD +34 -33
- {pygpt_net-2.4.49.dist-info → pygpt_net-2.4.51.dist-info}/LICENSE +0 -0
- {pygpt_net-2.4.49.dist-info → pygpt_net-2.4.51.dist-info}/WHEEL +0 -0
- {pygpt_net-2.4.49.dist-info → pygpt_net-2.4.51.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,349 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# ================================================== #
|
4
|
+
# This file is a part of PYGPT package #
|
5
|
+
# Website: https://pygpt.net #
|
6
|
+
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
7
|
+
# MIT License #
|
8
|
+
# Created By : Marcin Szczygliński #
|
9
|
+
# Updated Date: 2025.01.17 02:00:00 #
|
10
|
+
# ================================================== #
|
11
|
+
|
12
|
+
import time
|
13
|
+
|
14
|
+
import numpy as np
|
15
|
+
import wave
|
16
|
+
|
17
|
+
from PySide6.QtMultimedia import QAudioFormat, QMediaDevices, QAudioSource
|
18
|
+
from PySide6.QtCore import QTimer
|
19
|
+
|
20
|
+
class Capture:
|
21
|
+
def __init__(self, window=None):
|
22
|
+
"""
|
23
|
+
Audio input capture core
|
24
|
+
|
25
|
+
:param window: Window instance
|
26
|
+
"""
|
27
|
+
self.window = window
|
28
|
+
self.audio_source = None
|
29
|
+
self.audio_io_device = None
|
30
|
+
self.frames = []
|
31
|
+
self.actual_audio_format = None
|
32
|
+
self.path = None
|
33
|
+
self.disconnected = False
|
34
|
+
self.loop = False
|
35
|
+
self.stop_callback = None
|
36
|
+
self.start_time = 0
|
37
|
+
self.devices = []
|
38
|
+
self.selected_device = None
|
39
|
+
self.bar = None
|
40
|
+
self.check_audio_devices()
|
41
|
+
|
42
|
+
def set_path(self, path: str):
|
43
|
+
"""
|
44
|
+
Set audio input file path
|
45
|
+
|
46
|
+
:param path: file path
|
47
|
+
"""
|
48
|
+
self.path = path
|
49
|
+
|
50
|
+
def set_bar(self, bar):
|
51
|
+
"""
|
52
|
+
Set audio level bar
|
53
|
+
|
54
|
+
:param bar: audio level bar
|
55
|
+
"""
|
56
|
+
self.bar = bar
|
57
|
+
|
58
|
+
def check_audio_devices(self):
|
59
|
+
"""Check audio input devices"""
|
60
|
+
self.devices = QMediaDevices.audioInputs()
|
61
|
+
if not self.devices:
|
62
|
+
# no devices found
|
63
|
+
self.selected_device = None
|
64
|
+
print("No audio input devices found.")
|
65
|
+
else:
|
66
|
+
# set the first device as default
|
67
|
+
self.selected_device = self.devices[0]
|
68
|
+
|
69
|
+
def device_changed(self, index: int):
|
70
|
+
"""
|
71
|
+
Change audio input device
|
72
|
+
|
73
|
+
:param index: device index
|
74
|
+
"""
|
75
|
+
if 0 <= index < len(self.devices):
|
76
|
+
self.selected_device = self.devices[index]
|
77
|
+
else:
|
78
|
+
self.selected_device = None
|
79
|
+
|
80
|
+
def prepare_device(self):
|
81
|
+
"""Set the current audio input device"""
|
82
|
+
device_id = int(self.window.core.config.get('audio.input.device', 0))
|
83
|
+
self.device_changed(device_id)
|
84
|
+
|
85
|
+
def start(self):
|
86
|
+
"""
|
87
|
+
Start audio input recording
|
88
|
+
|
89
|
+
:return: True if started
|
90
|
+
"""
|
91
|
+
# Clear previous frames
|
92
|
+
self.frames = []
|
93
|
+
|
94
|
+
# Prepare selected device
|
95
|
+
self.prepare_device()
|
96
|
+
if not self.selected_device:
|
97
|
+
print("No audio input device selected")
|
98
|
+
return
|
99
|
+
if self.disconnected:
|
100
|
+
print("Audio source disconnected, please connect the audio source")
|
101
|
+
return False
|
102
|
+
|
103
|
+
# Prevent multiple recordings
|
104
|
+
if self.audio_source is not None:
|
105
|
+
return False
|
106
|
+
|
107
|
+
# Set up audio input and start recording
|
108
|
+
self.setup_audio_input()
|
109
|
+
self.start_time = time.time()
|
110
|
+
return True
|
111
|
+
|
112
|
+
def stop(self):
|
113
|
+
"""
|
114
|
+
Stop audio input recording
|
115
|
+
|
116
|
+
:return: True if stopped
|
117
|
+
"""
|
118
|
+
result = False
|
119
|
+
if self.audio_source is not None:
|
120
|
+
# Disconnect the readyRead signal
|
121
|
+
self.audio_io_device.readyRead.disconnect(self.process_audio_input)
|
122
|
+
self.audio_source.stop()
|
123
|
+
self.audio_source = None
|
124
|
+
self.audio_io_device = None
|
125
|
+
|
126
|
+
# Save frames to file (if any)
|
127
|
+
if self.frames:
|
128
|
+
self.save_audio_file(self.path)
|
129
|
+
result = True
|
130
|
+
else:
|
131
|
+
print("No audio data recorded")
|
132
|
+
return result
|
133
|
+
|
134
|
+
def has_source(self) -> bool:
|
135
|
+
"""
|
136
|
+
Check if audio source is available
|
137
|
+
|
138
|
+
:return: True if available
|
139
|
+
"""
|
140
|
+
if self.audio_source is not None:
|
141
|
+
return True
|
142
|
+
return False
|
143
|
+
|
144
|
+
def has_frames(self) -> bool:
|
145
|
+
"""
|
146
|
+
Check if audio frames are available
|
147
|
+
|
148
|
+
:return: True if available
|
149
|
+
"""
|
150
|
+
if self.frames:
|
151
|
+
return True
|
152
|
+
return False
|
153
|
+
|
154
|
+
def get_frames(self) -> list:
|
155
|
+
"""
|
156
|
+
Get recorded audio frames
|
157
|
+
|
158
|
+
:return: list of frames
|
159
|
+
"""
|
160
|
+
return self.frames
|
161
|
+
|
162
|
+
def setup_audio_input(self):
|
163
|
+
"""Set up audio input device and start recording"""
|
164
|
+
if not self.selected_device:
|
165
|
+
print("No audio input device selected")
|
166
|
+
return
|
167
|
+
|
168
|
+
# Define audio format
|
169
|
+
audio_format = QAudioFormat()
|
170
|
+
audio_format.setSampleRate(int(self.window.core.config.get('audio.input.rate', 44100)))
|
171
|
+
audio_format.setChannelCount(int(self.window.core.config.get('audio.input.channels', 1)))
|
172
|
+
audio_format.setSampleFormat(QAudioFormat.SampleFormat.Int16)
|
173
|
+
|
174
|
+
# Select default audio input device
|
175
|
+
audio_input_device = self.selected_device
|
176
|
+
|
177
|
+
# Check if the format is supported
|
178
|
+
if not audio_input_device.isFormatSupported(audio_format):
|
179
|
+
print("Requested format not supported, using nearest format.")
|
180
|
+
audio_format = audio_input_device.preferredFormat()
|
181
|
+
|
182
|
+
# Store the actual format being used
|
183
|
+
self.actual_audio_format = audio_format
|
184
|
+
|
185
|
+
# Create QAudioSource object with the device and format
|
186
|
+
try:
|
187
|
+
self.audio_source = QAudioSource(audio_input_device, audio_format)
|
188
|
+
except Exception as e:
|
189
|
+
self.disconnected = True
|
190
|
+
print(f"Failed to create audio source: {e}")
|
191
|
+
|
192
|
+
# Start audio input and obtain the QIODevice
|
193
|
+
try:
|
194
|
+
self.audio_io_device = self.audio_source.start()
|
195
|
+
if self.audio_io_device is None:
|
196
|
+
raise Exception("Unable to access audio input device")
|
197
|
+
except Exception as e:
|
198
|
+
print(f"Failed to start audio input: {e}")
|
199
|
+
self.disconnected = True
|
200
|
+
self.audio_source = None
|
201
|
+
self.audio_io_device = None
|
202
|
+
return
|
203
|
+
|
204
|
+
# Connect the readyRead signal to process incoming data
|
205
|
+
self.audio_io_device.readyRead.connect(self.process_audio_input)
|
206
|
+
|
207
|
+
def process_audio_input(self):
|
208
|
+
"""Process incoming audio data"""
|
209
|
+
# add seconds to stop timer
|
210
|
+
data = self.audio_io_device.readAll()
|
211
|
+
if data.isEmpty():
|
212
|
+
return
|
213
|
+
|
214
|
+
# Convert QByteArray to bytes
|
215
|
+
data_bytes = data.data()
|
216
|
+
|
217
|
+
# Append raw data to frames list for saving
|
218
|
+
self.frames.append(data_bytes)
|
219
|
+
|
220
|
+
# Determine the correct dtype and normalization factor
|
221
|
+
sample_format = self.actual_audio_format.sampleFormat()
|
222
|
+
dtype = self.get_dtype_from_sample_format(sample_format)
|
223
|
+
normalization_factor = self.get_normalization_factor(sample_format)
|
224
|
+
|
225
|
+
# Convert bytes to NumPy array of the appropriate type
|
226
|
+
samples = np.frombuffer(data_bytes, dtype=dtype)
|
227
|
+
if samples.size == 0:
|
228
|
+
return
|
229
|
+
|
230
|
+
# For unsigned formats, center the data
|
231
|
+
if sample_format == QAudioFormat.SampleFormat.UInt8:
|
232
|
+
samples = samples.astype(np.int16)
|
233
|
+
samples -= 128
|
234
|
+
|
235
|
+
# Compute RMS of the audio samples as float64 for precision
|
236
|
+
rms = np.sqrt(np.mean(samples.astype(np.float64) ** 2))
|
237
|
+
|
238
|
+
# Normalize RMS value based on the sample format
|
239
|
+
level = rms / normalization_factor
|
240
|
+
|
241
|
+
# Ensure level is within 0.0 to 1.0
|
242
|
+
level = min(max(level, 0.0), 1.0)
|
243
|
+
|
244
|
+
# Scale to 0-100
|
245
|
+
level_percent = level * 100
|
246
|
+
|
247
|
+
# Update the level bar widget
|
248
|
+
self.update_audio_level(level_percent)
|
249
|
+
|
250
|
+
# Handle loop recording
|
251
|
+
if self.loop and self.stop_callback is not None:
|
252
|
+
stop_interval = int(self.window.core.config.get('audio.input.stop_interval', 10))
|
253
|
+
current_time = time.time()
|
254
|
+
time_elapsed = current_time - self.start_time
|
255
|
+
if time_elapsed >= stop_interval:
|
256
|
+
# stop recording here, save audio chunk to WAV file, run transcription, and start recording again
|
257
|
+
self.start_time = current_time
|
258
|
+
QTimer.singleShot(0, self.stop_callback) # required QTimer to prevent crash!!!
|
259
|
+
|
260
|
+
def update_audio_level(self, level: int):
|
261
|
+
"""
|
262
|
+
Update the audio level bar
|
263
|
+
|
264
|
+
:param level: audio level
|
265
|
+
"""
|
266
|
+
if self.bar is not None:
|
267
|
+
self.bar.setLevel(level)
|
268
|
+
|
269
|
+
def reset_audio_level(self):
|
270
|
+
"""Reset the audio level bar"""
|
271
|
+
if self.bar is not None:
|
272
|
+
self.bar.setLevel(0)
|
273
|
+
|
274
|
+
def save_audio_file(self, filename: str):
|
275
|
+
"""
|
276
|
+
Save the recorded audio frames to a WAV file
|
277
|
+
|
278
|
+
:param filename: output file name
|
279
|
+
"""
|
280
|
+
# Define the parameters for the WAV file
|
281
|
+
channels = self.actual_audio_format.channelCount()
|
282
|
+
sample_size = self.actual_audio_format.bytesPerSample()
|
283
|
+
frame_rate = self.actual_audio_format.sampleRate()
|
284
|
+
|
285
|
+
# Open the WAV file
|
286
|
+
wf = wave.open(filename, 'wb')
|
287
|
+
wf.setnchannels(channels)
|
288
|
+
wf.setsampwidth(sample_size)
|
289
|
+
wf.setframerate(frame_rate)
|
290
|
+
|
291
|
+
# Write frames to the file
|
292
|
+
wf.writeframes(b''.join(self.frames))
|
293
|
+
wf.close()
|
294
|
+
|
295
|
+
def get_dtype_from_sample_format(self, sample_format):
|
296
|
+
"""
|
297
|
+
Get the NumPy dtype corresponding to the QAudioFormat sample format
|
298
|
+
|
299
|
+
:param sample_format: QAudioFormat.SampleFormat
|
300
|
+
"""
|
301
|
+
if sample_format == QAudioFormat.SampleFormat.UInt8:
|
302
|
+
return np.uint8
|
303
|
+
elif sample_format == QAudioFormat.SampleFormat.Int16:
|
304
|
+
return np.int16
|
305
|
+
elif sample_format == QAudioFormat.SampleFormat.Int32:
|
306
|
+
return np.int32
|
307
|
+
elif sample_format == QAudioFormat.SampleFormat.Float:
|
308
|
+
return np.float32
|
309
|
+
else:
|
310
|
+
raise ValueError("Unsupported sample format")
|
311
|
+
|
312
|
+
def get_normalization_factor(self, sample_format):
|
313
|
+
"""
|
314
|
+
Get the normalization factor for the QAudioFormat sample format
|
315
|
+
|
316
|
+
:param sample_format: QAudioFormat.SampleFormat
|
317
|
+
"""
|
318
|
+
if sample_format == QAudioFormat.SampleFormat.UInt8:
|
319
|
+
return 255.0
|
320
|
+
elif sample_format == QAudioFormat.SampleFormat.Int16:
|
321
|
+
return 32768.0
|
322
|
+
elif sample_format == QAudioFormat.SampleFormat.Int32:
|
323
|
+
return float(2 ** 31)
|
324
|
+
elif sample_format == QAudioFormat.SampleFormat.Float:
|
325
|
+
return 1.0
|
326
|
+
else:
|
327
|
+
raise ValueError("Unsupported sample format")
|
328
|
+
|
329
|
+
def check_audio_input(self) -> bool:
|
330
|
+
"""
|
331
|
+
Check if default audio input device is working
|
332
|
+
|
333
|
+
:return: True if working
|
334
|
+
"""
|
335
|
+
import pyaudio
|
336
|
+
try:
|
337
|
+
rate = 44100
|
338
|
+
channels = 1
|
339
|
+
p = pyaudio.PyAudio()
|
340
|
+
stream = p.open(format=pyaudio.paInt16,
|
341
|
+
channels=channels,
|
342
|
+
rate=rate,
|
343
|
+
input=True)
|
344
|
+
stream.stop_stream()
|
345
|
+
stream.close()
|
346
|
+
p.terminate()
|
347
|
+
return True
|
348
|
+
except Exception as e:
|
349
|
+
return False
|
@@ -1,8 +1,8 @@
|
|
1
1
|
{
|
2
2
|
"__meta__": {
|
3
|
-
"version": "2.4.
|
4
|
-
"app.version": "2.4.
|
5
|
-
"updated_at": "2025-01-
|
3
|
+
"version": "2.4.51",
|
4
|
+
"app.version": "2.4.51",
|
5
|
+
"updated_at": "2025-01-17T00:00:00"
|
6
6
|
},
|
7
7
|
"access.audio.event.speech": false,
|
8
8
|
"access.audio.event.speech.disabled": [],
|
@@ -74,8 +74,10 @@
|
|
74
74
|
"attachments_send_clear": true,
|
75
75
|
"attachments_capture_clear": true,
|
76
76
|
"audio.input.channels": 1,
|
77
|
+
"audio.input.continuous": false,
|
77
78
|
"audio.input.device": "0",
|
78
79
|
"audio.input.rate": 44100,
|
80
|
+
"audio.input.stop_interval": 10,
|
79
81
|
"audio.transcribe.convert_video": true,
|
80
82
|
"context_threshold": 200,
|
81
83
|
"cmd": false,
|
pygpt_net/data/config/modes.json
CHANGED
@@ -1123,6 +1123,19 @@
|
|
1123
1123
|
"step": 1,
|
1124
1124
|
"advanced": false
|
1125
1125
|
},
|
1126
|
+
"audio.input.stop_interval": {
|
1127
|
+
"section": "audio",
|
1128
|
+
"type": "int",
|
1129
|
+
"slider": true,
|
1130
|
+
"label": "settings.audio.input.stop_interval",
|
1131
|
+
"description": "settings.audio.input.stop_interval.desc",
|
1132
|
+
"value": 10,
|
1133
|
+
"min": 5,
|
1134
|
+
"max": 120,
|
1135
|
+
"multiplier": 1,
|
1136
|
+
"step": 1,
|
1137
|
+
"advanced": false
|
1138
|
+
},
|
1126
1139
|
"llama.idx.list": {
|
1127
1140
|
"section": "llama-index",
|
1128
1141
|
"type": "dict",
|
@@ -135,6 +135,7 @@ audio.magic_word.detected = Zauberwort erkannt!
|
|
135
135
|
audio.magic_word.invalid = Kein Zauberwort :(
|
136
136
|
audio.magic_word.please = Bitte das Zauberwort...
|
137
137
|
audio.speak.btn = Mikrofon
|
138
|
+
audio.speak.btn.continuous = Kontinuierliche Aufzeichnung
|
138
139
|
audio.speak.btn.stop = Stopp
|
139
140
|
audio.speak.btn.stop.tooltip = Klicken, um das Mikrofonhören zu beenden
|
140
141
|
audio.speak.btn.tooltip = Klicken, um das Mikrofonhören zu starten
|
@@ -774,6 +775,8 @@ settings.audio.input.device = Audioeingabegerät
|
|
774
775
|
settings.audio.input.device.desc = Wählen Sie das Audiogerät für die Mikrofoneingabe.
|
775
776
|
settings.audio.input.rate = Abtastrate
|
776
777
|
settings.audio.input.rate.desc = Abtastrate, Standard: 44100
|
778
|
+
settings.audio.input.stop_interval = Intervall für kontinuierliche automatische Transkription
|
779
|
+
settings.audio.input.stop_interval.desc = Intervall in Sekunden für automatisches Transkribieren eines Audioabschnitts, Standard: 10
|
777
780
|
settings.check_updates = Beim Start nach Updates suchen
|
778
781
|
settings.check_updates.bg = Im Hintergrund nach Updates suchen
|
779
782
|
settings.cmd.field.desc = Aktivieren Sie das `{cmd}`-Werkzeug.
|
@@ -147,6 +147,7 @@ audio.magic_word.detected = Magic word detected!
|
|
147
147
|
audio.magic_word.invalid = Not a magic word :(
|
148
148
|
audio.magic_word.please = Magic word please...
|
149
149
|
audio.speak.btn = Microphone
|
150
|
+
audio.speak.btn.continuous = Continuous recording
|
150
151
|
audio.speak.btn.stop = Stop
|
151
152
|
audio.speak.btn.stop.tooltip = Click to stop microphone listening
|
152
153
|
audio.speak.btn.tooltip = Click to start microphone listening
|
@@ -945,6 +946,8 @@ settings.audio.input.device = Audio Input Device
|
|
945
946
|
settings.audio.input.device.desc = Select the audio device for Microphone input.
|
946
947
|
settings.audio.input.rate = Sampling Rate
|
947
948
|
settings.audio.input.rate.desc = Sampling rate, default: 44100
|
949
|
+
settings.audio.input.stop_interval = Continuous recording auto-transcribe interval
|
950
|
+
settings.audio.input.stop_interval.desc = Interval in seconds for auto-transcribe audio chunk, default: 10
|
948
951
|
settings.check_updates = Check for Updates on start
|
949
952
|
settings.check_updates.bg = Check for Updates in the background
|
950
953
|
settings.cmd.config.collapse = JSON params
|
@@ -135,6 +135,7 @@ audio.magic_word.detected = ¡Palabra mágica detectada!
|
|
135
135
|
audio.magic_word.invalid = No es una palabra mágica :(
|
136
136
|
audio.magic_word.please = Por favor, una palabra mágica...
|
137
137
|
audio.speak.btn = Micrófono
|
138
|
+
audio.speak.btn.continuous = Grabación continua
|
138
139
|
audio.speak.btn.stop = Detener
|
139
140
|
audio.speak.btn.stop.tooltip = Haz clic para dejar de escuchar a través del micrófono
|
140
141
|
audio.speak.btn.tooltip = Haz clic para empezar a escuchar a través del micrófono
|
@@ -773,6 +774,8 @@ settings.audio.input.device = Dispositivo de Entrada de Audio
|
|
773
774
|
settings.audio.input.device.desc = Selecciona el dispositivo de audio para la entrada del micrófono.
|
774
775
|
settings.audio.input.rate = Taux d'échantillonnage
|
775
776
|
settings.audio.input.rate.desc = Taux d'échantillonnage, par défaut : 44100
|
777
|
+
settings.audio.input.stop_interval = Intervalo de transcripción automática continua
|
778
|
+
settings.audio.input.stop_interval.desc = Intervalo en segundos para transcribir automáticamente el fragmento de audio, predeterminado: 10
|
776
779
|
settings.check_updates = Buscar actualizaciones al iniciar
|
777
780
|
settings.check_updates.bg = Buscar actualizaciones en segundo plano
|
778
781
|
settings.cmd.field.desc = Habilitar la herramienta `{cmd}`.
|
@@ -135,6 +135,7 @@ audio.magic_word.detected = Mot magique détecté !
|
|
135
135
|
audio.magic_word.invalid = Pas un mot magique :(
|
136
136
|
audio.magic_word.please = S'il vous plaît, le mot magique...
|
137
137
|
audio.speak.btn = Microphone
|
138
|
+
audio.speak.btn.continuous = Enregistrement continu
|
138
139
|
audio.speak.btn.stop = Arrêt
|
139
140
|
audio.speak.btn.stop.tooltip = Cliquez pour arrêter l'écoute par le microphone
|
140
141
|
audio.speak.btn.tooltip = Cliquez pour commencer l'écoute par le microphone
|
@@ -773,6 +774,8 @@ settings.audio.input.device = Périphérique d'Entrée Audio
|
|
773
774
|
settings.audio.input.device.desc = Sélectionnez le périphérique audio pour l'entrée du microphone.
|
774
775
|
settings.audio.input.rate = Taux d'échantillonnage
|
775
776
|
settings.audio.input.rate.desc = Taux d'échantillonnage, par défaut : 44100
|
777
|
+
settings.audio.input.stop_interval = Intervalle d'auto-transcription enregistrement continu
|
778
|
+
settings.audio.input.stop_interval.desc = Intervalle en secondes pour la transcription automatique d'un morceau audio, par défaut : 10
|
776
779
|
settings.check_updates = Vérifier les mises à jour au démarrage
|
777
780
|
settings.check_updates.bg = Vérifier les mises à jour en arrière-plan
|
778
781
|
settings.cmd.field.desc = Activer l'outil `{cmd}`.
|
@@ -135,6 +135,7 @@ audio.magic_word.detected = Parola magica rilevata!
|
|
135
135
|
audio.magic_word.invalid = Non è una parola magica :(
|
136
136
|
audio.magic_word.please = Per favore, parola magica...
|
137
137
|
audio.speak.btn = Microfono
|
138
|
+
audio.speak.btn.continuous = Registrazione continua
|
138
139
|
audio.speak.btn.stop = Stop
|
139
140
|
audio.speak.btn.stop.tooltip = Clicca per terminare l'ascolto tramite microfono
|
140
141
|
audio.speak.btn.tooltip = Clicca per iniziare l'ascolto tramite microfono
|
@@ -774,6 +775,8 @@ settings.audio.input.device = Dispositivo di Ingresso Audio
|
|
774
775
|
settings.audio.input.device.desc = Seleziona il dispositivo audio per l'ingresso del microfono.
|
775
776
|
settings.audio.input.rate = Frequenza di campionamento
|
776
777
|
settings.audio.input.rate.desc = Frequenza di campionamento, predefinito: 44100
|
778
|
+
settings.audio.input.stop_interval = Intervallo di trascrizione automatica continua
|
779
|
+
settings.audio.input.stop_interval.desc = Intervallo in secondi per la trascrizione automatica del segmento audio, predefinito: 10
|
777
780
|
settings.check_updates = Controlla aggiornamenti all'avvio
|
778
781
|
settings.check_updates.bg = Controlla gli aggiornamenti in background
|
779
782
|
settings.cmd.field.desc = Abilita lo strumento `{cmd}`.
|
@@ -135,6 +135,7 @@ audio.magic_word.detected = Wykryto magiczne słowo!
|
|
135
135
|
audio.magic_word.invalid = To nie magiczne słowo :(
|
136
136
|
audio.magic_word.please = Podaj magiczne słowo...
|
137
137
|
audio.speak.btn = Mikrofon
|
138
|
+
audio.speak.btn.continuous = Ciągłe nagrywanie
|
138
139
|
audio.speak.btn.stop = Stop
|
139
140
|
audio.speak.btn.stop.tooltip = Kliknij, aby zakończyć nasłuchiwanie przez mikrofon
|
140
141
|
audio.speak.btn.tooltip = Kliknij, aby rozpocząć nasłuchiwanie przez mikrofon
|
@@ -774,6 +775,8 @@ settings.audio.input.device = Urządzenie Wejściowe Audio
|
|
774
775
|
settings.audio.input.device.desc = Wybierz urządzenie audio dla wejścia mikrofonu.
|
775
776
|
settings.audio.input.rate = Częstotliwość próbkowania
|
776
777
|
settings.audio.input.rate.desc = Częstotliwość próbkowania, domyślnie: 44100
|
778
|
+
settings.audio.input.stop_interval = Interwał automatycznego transkrybowania nagrania ciągłego
|
779
|
+
settings.audio.input.stop_interval.desc = Interwał w sekundach dla automatycznego transkrybowania fragmentu audio, domyślnie: 10
|
777
780
|
settings.check_updates = Sprawdź aktualizacje przy starcie
|
778
781
|
settings.check_updates.bg = Sprawdź aktualizacje w tle
|
779
782
|
settings.cmd.field.desc = Włącz narzędzie `{cmd}`.
|
@@ -135,6 +135,7 @@ audio.magic_word.detected = Магічне слово виявлено!
|
|
135
135
|
audio.magic_word.invalid = Не магічне слово :(
|
136
136
|
audio.magic_word.please = Магічне слово, будь ласка...
|
137
137
|
audio.speak.btn = Мікрофон
|
138
|
+
audio.speak.btn.continuous = Безперервний запис
|
138
139
|
audio.speak.btn.stop = Стоп
|
139
140
|
audio.speak.btn.stop.tooltip = Натисніть, щоб закінчити слухання через мікрофон
|
140
141
|
audio.speak.btn.tooltip = Натисніть, щоб почати слухання через мікрофон
|
@@ -773,6 +774,8 @@ settings.audio.input.device = Аудіо Вхідний Пристрій
|
|
773
774
|
settings.audio.input.device.desc = Виберіть аудіо пристрій для введення мікрофона.
|
774
775
|
settings.audio.input.rate = Частота дискретизації
|
775
776
|
settings.audio.input.rate.desc = Частота дискретизації, за замовчуванням: 44100
|
777
|
+
settings.audio.input.stop_interval = Інтервал автоматичного транскрибування безперервного запису
|
778
|
+
settings.audio.input.stop_interval.desc = Інтервал у секундах для автоматичного транскрибування фрагмента аудіо, за замовчуванням: 10
|
776
779
|
settings.check_updates = Перевіряти оновлення при запуску
|
777
780
|
settings.check_updates.bg = Перевіряти оновлення у фоновому режимі
|
778
781
|
settings.cmd.field.desc = Увімкнути інструмент `{cmd}`.
|
@@ -136,6 +136,7 @@ audio.control.btn = 语音控制
|
|
136
136
|
audio.magic_word.detected = 檢測到魔法詞!
|
137
137
|
audio.magic_word.invalid= 不是魔法詞 :(
|
138
138
|
audio.magic_word.please= 請說出魔法詞...
|
139
|
+
audio.speak.btn.continuous = 连续录音
|
139
140
|
audio.speak.btn.stop = 停止
|
140
141
|
audio.speak.btn.stop.tooltip = 點擊停止麥克風聆聽
|
141
142
|
audio.speak.btn.tooltip = 點擊開始麥克風聆聽
|
@@ -875,6 +876,8 @@ settings.audio.input.device = 音频输入设备
|
|
875
876
|
settings.audio.input.device.desc = 选择用于麦克风输入的音频设备。
|
876
877
|
settings.audio.input.rate = 采样率
|
877
878
|
settings.audio.input.rate.desc = 采样率,默认: 44100
|
879
|
+
settings.audio.input.stop_interval = 连续录音自动转录间隔
|
880
|
+
settings.audio.input.stop_interval.desc = 自动转录音频片段的间隔(以秒为单位),默认:10
|
878
881
|
settings.check_updates = 啟動時檢查更新
|
879
882
|
settings.check_updates.bg = 在後台檢查更新
|
880
883
|
settings.cmd.field.desc = 启用 `{cmd}` 工具。
|