dotenv if exists;
auto create rec folder; select audio device on client;
This commit is contained in:
parent
2f56d76042
commit
6429852505
@ -18,6 +18,10 @@
|
|||||||
id="autosend" />
|
id="autosend" />
|
||||||
<span class="slider">Continious</span>
|
<span class="slider">Continious</span>
|
||||||
</label>
|
</label>
|
||||||
|
<select id="input-devices">
|
||||||
|
<option value="default">Default</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
<button id="record-button"
|
<button id="record-button"
|
||||||
disabled>Start Recording</button>
|
disabled>Start Recording</button>
|
||||||
<span id="connection-status"></span>
|
<span id="connection-status"></span>
|
||||||
@ -29,6 +33,7 @@
|
|||||||
width="500"
|
width="500"
|
||||||
height="500"></canvas>
|
height="500"></canvas>
|
||||||
<script>
|
<script>
|
||||||
|
let selectedDeviceId = "default";
|
||||||
let socket;
|
let socket;
|
||||||
let audioRecorder;
|
let audioRecorder;
|
||||||
let recording = false;
|
let recording = false;
|
||||||
@ -93,7 +98,7 @@
|
|||||||
|
|
||||||
// count speaking and silence
|
// count speaking and silence
|
||||||
if (averageVolume > threshold) {
|
if (averageVolume > threshold) {
|
||||||
if (speakingCount == 0 && audioRecorder) {
|
if (autosend.checked && speakingCount == 0 && audioRecorder) {
|
||||||
console.log("startint new recording");
|
console.log("startint new recording");
|
||||||
audioRecorder.stop();
|
audioRecorder.stop();
|
||||||
audioRecorder.start();
|
audioRecorder.start();
|
||||||
@ -249,6 +254,57 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function enumerateDevices() {
|
||||||
|
// Enumerate the available audio input devices
|
||||||
|
navigator.mediaDevices.enumerateDevices()
|
||||||
|
.then(function (devices) {
|
||||||
|
var audioInputDevices = devices.filter(function (device) {
|
||||||
|
return device.kind === 'audioinput';
|
||||||
|
});
|
||||||
|
console.log(audioInputDevices.length + ' audio input devices found');
|
||||||
|
|
||||||
|
// If more than one audio input device is available, populate the select list
|
||||||
|
if (audioInputDevices.length > 1) {
|
||||||
|
audioInputDevices.forEach(function (device) {
|
||||||
|
var option = document.createElement('option');
|
||||||
|
option.value = device.deviceId;
|
||||||
|
option.text = device.label || 'Device ' + device.deviceId;
|
||||||
|
inputDevices.appendChild(option);
|
||||||
|
});
|
||||||
|
// Listen for changes to the select list and connect to the selected audio input device
|
||||||
|
inputDevices.addEventListener('change', function (event) {
|
||||||
|
var selectedDeviceId = event.target.value;
|
||||||
|
var constraints = { audio: { deviceId: selectedDeviceId } };
|
||||||
|
navigator.mediaDevices.getUserMedia(constraints)
|
||||||
|
.then(function (stream) {
|
||||||
|
// Handle the audio stream from the selected device here
|
||||||
|
})
|
||||||
|
.catch(function (error) {
|
||||||
|
console.log('Error accessing audio stream:', error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// If only one audio input device is available, connect to it automatically
|
||||||
|
else if (audioInputDevices.length === 1) {
|
||||||
|
var constraints = { audio: { deviceId: audioInputDevices[0].deviceId } };
|
||||||
|
navigator.mediaDevices.getUserMedia(constraints)
|
||||||
|
.then(function (stream) {
|
||||||
|
// Handle the audio stream from the selected device here
|
||||||
|
})
|
||||||
|
.catch(function (error) {
|
||||||
|
console.log('Error accessing audio stream:', error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// If no audio input devices are available, show an error message
|
||||||
|
else {
|
||||||
|
console.log('No audio input devices available');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(function (error) {
|
||||||
|
console.log('Error listing audio input devices:', error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
window.onload = () => {
|
window.onload = () => {
|
||||||
recordButton = document.getElementById("record-button");
|
recordButton = document.getElementById("record-button");
|
||||||
recordButton.addEventListener("click", toggleListening);
|
recordButton.addEventListener("click", toggleListening);
|
||||||
@ -257,8 +313,7 @@
|
|||||||
//autosend = document.getElementById("autosend");
|
//autosend = document.getElementById("autosend");
|
||||||
statusRecording = document.getElementById("status-recording");
|
statusRecording = document.getElementById("status-recording");
|
||||||
|
|
||||||
|
enumerateDevices();
|
||||||
|
|
||||||
connect(socket);
|
connect(socket);
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -4,8 +4,10 @@ console.log('WebSocket server started on port 8081');
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//load TTS_BACHEND_URL from .env file
|
//load .env file
|
||||||
//require('dotenv').config();
|
if (require('dotenv')) {
|
||||||
|
require('dotenv').config()
|
||||||
|
}
|
||||||
|
|
||||||
console.log(process.env)
|
console.log(process.env)
|
||||||
console.log(process.env.TTS_BACKEND_URL)
|
console.log(process.env.TTS_BACKEND_URL)
|
||||||
@ -32,13 +34,17 @@ wss.on('connection', (ws) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
//save the audio data to a file to /rec folder
|
|
||||||
|
|
||||||
|
var timestampfilename = Date.now("yyyymmdd-hhMMss");
|
||||||
|
|
||||||
|
//save the audio data to a file to /rec subfolder
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var timestampfilename = Date.now();
|
fs.mkdir('rec', { recursive: true }, (err) => {
|
||||||
fs.writeFile('./rec/audio' + timestampfilename + '.ogg', data, function (err) {
|
if (err) throw err;
|
||||||
|
});
|
||||||
|
|
||||||
|
fs.writeFile('rec/audio' + timestampfilename + '.ogg', data, function (err) {
|
||||||
//fs.writeFile('audio' + timestampfilename + '.ogg', data, function (err) {
|
|
||||||
if (err) {
|
if (err) {
|
||||||
return console.log(err);
|
return console.log(err);
|
||||||
}
|
}
|
||||||
@ -47,7 +53,7 @@ wss.on('connection', (ws) => {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
request.post({url:'http://192.168.0.10:9008/asr', formData: formData}, function optionalCallback(err, httpResponse, body) {
|
request.post({ url: process.env.TTS_BACKEND_URL, formData: formData }, function optionalCallback(err, httpResponse, body) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return console.error('upload failed:', err);
|
return console.error('upload failed:', err);
|
||||||
}
|
}
|
||||||
@ -76,7 +82,7 @@ app.get('/', (req, res) => {
|
|||||||
|
|
||||||
//get WS url from .env file
|
//get WS url from .env file
|
||||||
app.get('/wsurl', (req, res) => {
|
app.get('/wsurl', (req, res) => {
|
||||||
res.send(process.env.WS_URL, 200, {'Content-Type': 'text/plain'});
|
res.send(process.env.WS_URL, 200, { 'Content-Type': 'text/plain' });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user