Comments (7)
By latest source, do you mean from master or the latest release? Latest release had a bug in certain locales, which is fixed in master. Symptom was the no such file or directory you experienced.
Regardless, recording function do work. Are you sure you configured your ODAS sinks by the instructions in the read me? It seems recording starts but no audio is received, hence the 44 bytes of WAV file header.
mu setting for the microphones is in meters. It is the microphone position from an origin you decide. It can be whatever but it must be consistant among microphones. Frequently used origin I've seen are Mic 1 and geometrical center of the microphone array.
from odas_web.
I just did git clone https://github.com/introlab/odas_web.git
my config....
# Configuration file for bbbox 4 mic array
version = "2.1";
# Raw
raw:
{
fS = 16000;
hopSize = 64;
nBits = 16;
nChannels = 4;
# Input with raw signal from microphones
interface: {
type = "soundcard";
card = 3;
device = 0;
}
}
# Mapping
mapping:
{
map: (1, 2, 3, 4);
}
# General
general:
{
epsilon = 1E-20;
size:
{
hopSize = 64;
frameSize = 128;
};
samplerate:
{
mu = 16000;
sigma2 = 0.01;
};
speedofsound:
{
mu = 343.0;
sigma2 = 25.0;
};
mics = (
# Microphone 1 // mics 60mm appart
conf
{
mu = ( -0.0300, +0.0000, +0.0000 );
sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 );
direction = ( +0.000, +0.000, +1.000 );
angle = ( 80.0, 90.0 );
},
# Microphone 2
{
mu = ( +0.0000, +0.0300, +0.0000 );
sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 );
direction = ( +0.000, +0.000, +1.000 );
angle = ( 80.0, 90.0 );
},
# Microphone 3
{
mu = ( +0.0300, +0.0000, +0.0000 );
sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 );
direction = ( +0.000, +0.000, +1.000 );
angle = ( 80.0, 90.0 );
},
# Microphone 4
{
mu = ( +0.0000, -0.0300, +0.0000 );
sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 );
direction = ( +0.000, +0.000, +1.000 );
angle = ( 80.0, 90.0 );
}
);
# Spatial filters to include only a range of direction if required
# (may be useful to remove false detections from the floor, or
# limit the space search to a restricted region)
spatialfilters = (
{
direction = ( +0.000, +0.000, +1.000 );
angle = (80.0, 90.0);
}
);
nThetas = 181;
gainMin = 0.25;
};
# Stationnary noise estimation
sne:
{
b = 3;
alphaS = 0.1;
L = 150;
delta = 3.0;
alphaD = 0.1;
}
# Sound Source Localization
ssl:
{
nPots = 4;
nMatches = 10;
probMin = 0.5;
nRefinedLevels = 1;
interpRate = 4;
# Number of scans: level is the resolution of the sphere
# and delta is the size of the maximum sliding window
# (delta = -1 means the size is automatically computed)
scans = (
{ level = 2; delta = -1; },
{ level = 4; delta = -1; }
);
# Output to export potential sources
potential: {
# format = "undefined";
format = "json";
interface: {
# type = "blackhole";
type = "socket"; ip = "127.0.0.1"; port = 9001;
};
};
};
# Sound Source Tracking
sst:
{
# Mode is either "kalman" or "particle"
mode = "particle";
# Add is either "static" or "dynamic"
add = "dynamic";
# Parameters used by both the Kalman and particle filter
active = (
{ weight = 1.0; mu = 0.3; sigma2 = 0.0025 }
);
inactive = (
{ weight = 1.0; mu = 0.15; sigma2 = 0.0025 }
);
sigmaR2_prob = 0.0025;
sigmaR2_active = 0.0225;
sigmaR2_target = 0.0025;
Pfalse = 0.1;
Pnew = 0.1;
Ptrack = 0.8;
theta_new = 0.9;
N_prob = 5;
theta_prob = 0.8;
N_inactive = ( 150, 200, 250, 250 );
theta_inactive = 0.9;
# Parameters used by the Kalman filter only
kalman: {
sigmaQ = 0.001;
};
# Parameters used by the particle filter only
particle: {
nParticles = 1000;
st_alpha = 2.0;
st_beta = 0.04;
st_ratio = 0.5;
ve_alpha = 0.05;
ve_beta = 0.2;
ve_ratio = 0.3;
ac_alpha = 0.5;
ac_beta = 0.2;
ac_ratio = 0.2;
Nmin = 0.7;
};
target: ();
# Output to export tracked sources
tracked: {
# format = "undefined";
format = "json";
interface: {
# type = "blackhole";
type = "socket"; ip = "127.0.0.1"; port = 9000;
};
};
}
sss:
{
# Mode is either "dds", "dgss" or "dmvdr"
mode_sep = "dds";
mode_pf = "ms";
gain_sep = 1.0;
gain_pf = 10.0;
dds: {
};
dgss: {
mu = 0.01;
lambda = 0.5;
};
dmvdr: {
};
ms: {
alphaPmin = 0.07;
eta = 0.5;
alphaZ = 0.8;
thetaWin = 0.3;
alphaWin = 0.3;
maxAbsenceProb = 0.9;
Gmin = 0.01;
winSizeLocal = 3;
winSizeGlobal = 23;
winSizeFrame = 256;
};
ss: {
Gmin = 0.01;
Gmid = 0.9;
Gslope = 10.0;
}
separated: {
fS = 16000;
hopSize = 64;
nBits = 16;
interface: {
type = "file";
path = "separated.raw";
}
};
postfiltered: {
fS = 16000;
hopSize = 64;
nBits = 16;
interface: {
type = "file";
path = "postfiltered.raw";
}
};
}
classify:
{
frameSize = 1024;
winSize = 3;
tauMin = 32;
tauMax = 200;
deltaTauMax = 7;
alpha = 0.3;
gamma = 0.05;
phiMin = 0.15;
r0 = 0.2;
category: {
format = "undefined";
interface: {
type = "blackhole";
}
}
}
The direction finding works really well but like you say there is probebly something wrong in the record settings?
The config template I was using described mics 81mm apart where the actual hardware is 65mm so that
confused me a bit :)
from odas_web.
I just noticed I get these messages in the terminal;
Recorder 1 started
Recorder 1 started
Recorder 1 was false active
Recorder 1 was false active
Recorder 2 started
Recorder 2 started
Recorder 2 was false active
Recorder 2 was false active
Recorder 2 ended
Recorder 2 ended
Registering header on recorder 2
Registering header on recorder 2
Registered header on recorder 2
Registered header on recorder 2
Recorder 2 undefined
Recorder 2 undefined
Recorder 1 ended
Recorder 1 ended
Registering header on recorder 1
Registering header on recorder 1
Registered header on recorder 1
Recorder 1 undefined
Registered header on recorder 1
Recorder 1 undefined
Recorder 1 started
Recorder 1 started
Recorder 1 was false active
Recorder 1 was false active
Recorder 1 ended
Recorder 1 ended
Registering header on recorder 1
Registering header on recorder 1
Registered header on recorder 1
Registered header on recorder 1
Recorder 1 undefined
Recorder 1 undefined
Recorder 1 started
Recorder 1 started
Recorder 1 was false active
Recorder 1 was false active
Recorder 2 started
Recorder 2 was false active
Recorder 2 started
Recorder 2 was false active
Recorder 2 ended
Recorder 2 ended
Registering header on recorder 2
Registering header on recorder 2
Registered header on recorder 2
Registered header on recorder 2
Recorder 2 undefined
Recorder 2 undefined
Recorder 1 ended
Recorder 1 ended
Registering header on recorder 1
Registering header on recorder 1
Registered header on recorder 1
Registered header on recorder 1
Recorder 1 undefined
Recorder 1 undefined
Recorder 1 started
Recorder 1 was false active
Recorder 1 started
Recorder 1 was false active
Recorder 1 ended
Recorder 1 ended
Registering header on recorder 1
Registering header on recorder 1
Registered header on recorder 1
Recorder 1 undefined
Registered header on recorder 1
Recorder 1 undefined
from odas_web.
Yes, your sinks for the separated audio are misconfigured. The interface type is defined as file instead of socket. You should see various WAV files in your ODAS folder, close to the compiled executable.
Please see the ODAS Studio documentation here to configure your sinks properly. You'll want to take a look at the SSS section.
The console output you see is debugging information regarding the state of the WAV files recorder. Each recorder is attached to a tracked source. So each time a new source appears, you'll see the following cycle:
- Recorder N started (tracking info received);
- Recorder N was false active (recorder was not already recording. Should never happen but this was a problem some time ago);
- Recorder N ended (source disappeared from tracking);
- Registered header on recorder N (WAV file header was written);
- Recorder N undefined (recorder is cleared because the record task is finished.
from odas_web.
Thanks so much for your help! Its all working great with my own 60x60mm 4 channel array :)
I'm interested in adding some kind of voice print recognition so that individual speakers can be identified in a room. I guess it would involve some kind of voice training.
Any ideas?
I suppose I should learn JSON so I can point the voice identification software to ODAS server.
Anyway , thanks for help , this was not a bug so I closed the issue.
from odas_web.
Hi, I'm glad to hear everything is working properly now.
For speaker recognition, the ODAS creator from IntRoLab actually developed a system which does exactly that during is master degree. It takes separated and post-filtered audio as inputs then outputs the corresponding ids and confidence levels. However, it has been developed before ODAS so I'm not sure it will work right out of the box.
The project is open source and available for Matlab and Octave on the IntRoLab website. You'll also find an article describing the system inner working on the website.
from odas_web.
I found https://github.com/introlab/WISS and yes its in .m Matlab code. I managed to write a voice detection program based on WISS but still have to run the initial voice scan in Octave.
from odas_web.
Related Issues (20)
- Unable to run npm install (error command electron-rebuild) HOT 12
- Please add windows binary to release
- Camera Viewer HOT 4
- Failed to use ODAS web with respeaker V2 HOT 1
- bandpass filtering results in no detections
- npm install error HOT 5
- Recorder 0 was false active HOT 1
- odas web not getting doa
- Source hops: cannot open audio device he:1,0
- ODAS STUDIO NO OUTPUT ReSpeaker Version 2.0 PLEASE HELP
- ODAS Control not launching and ODAS stuck on ‘Threads running…” HOT 1
- Odas Studio unresponsive HOT 2
- npm success ,however npm start fail HOT 3
- ODAS process cannot connect to ODAS Web HOT 2
- Odas Web works but fails to write co-ordinates to text file
- ODAS data do not show after running odas web HOT 2
- npm start crashes HOT 1
- [email protected]~start: Returned: code: 1 signal: null
- I/O error
- How should I configure my odas studio
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from odas_web.