1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//! Sound Level Meter (SLM) module.
//!
//! Provides structs and helpers (SLMBuilder) for creating configurated Sound
//! Level Meters.
//!
//! # Usage examples
//!
//! ## Simple over-all level SLM
//!
//! This example creates a simple SLM that processes at 48kHz, uses fast time
//! weighting and A frequency weighting:
//!
//! ```
//! # use anyhow::Result;
//! use lasprs::slm::*;
//! use lasprs::filter::StandardFilterDescriptor;
//! use lasprs::{FreqWeighting, TimeWeighting};
//! use lasprs::StrictlyPositive;
//! use ndarray::Array1;
//! # fn main() -> Result<()> {
//!
//! // Generate an overall filter (no filter at all)
//! let desc = StandardFilterDescriptor::Overall().unwrap();
//!
//! // Generate settings
//! let fs = StrictlyPositive::new(48e3)?;
//! let Lref = StrictlyPositive::new(20e-6)?; // Reference level for sound pressure in air
//! let settings = SLMSettingsBuilder::default()
//! .fs(fs)
//! .Lref(Lref)
//! .freqWeighting(FreqWeighting::A)
//! .timeWeighting(TimeWeighting::Fast{})
//! .filterDescriptors(vec![desc]).build().unwrap();
//!
//! let mut slm = SLM::new(settings, None);
//! // Generate some data. Yes, this is not the most spectacular set
//! let mut data = Array1::zeros(48000);
//! data[0] = 1.;
//!
//! // Now apply some data. This is a kind of the SLM-s impulse response
//! let res = slm.run(data.as_slice().unwrap(), true).unwrap();
//!
//! // Get the equivalent level:
//! let Leq = res.Leq[&desc];
//!
//! # Ok::<() , anyhow::Error>(())
//! # }
//! ```
//!
//! ## One-third octave band, plus overall
//!
//! ```
//! use lasprs::filter::StandardFilterDescriptor;
//! // Generate the default set of one-third octave band filters
//! let mut desc = StandardFilterDescriptor::fullThirdOctaveFilterSet();
//! desc.push(StandardFilterDescriptor::Overall().unwrap());
//!
//! // Rest of code is the same as in previous example
//!
//! ```
//!
use crate::*;
pub use SLM;
pub use SLMResult;
pub use ;
/// Reference level, in units of measured quantity. For sound pressure in
/// air, this is 20 μPa. This is also the default value.
pub const Lref_default: Flt = 20e-6;