Clippy fixes
This commit is contained in:
parent
f3dbf9d948
commit
d3c162ab79
@ -689,7 +689,7 @@ impl CpalApi {
|
|||||||
let max_sr = cpalcfg.max_sample_rate().0;
|
let max_sr = cpalcfg.max_sample_rate().0;
|
||||||
let min_sr = cpalcfg.min_sample_rate().0;
|
let min_sr = cpalcfg.min_sample_rate().0;
|
||||||
if samplerate <= max_sr && samplerate >= min_sr {
|
if samplerate <= max_sr && samplerate >= min_sr {
|
||||||
let cfg = cpalcfg.with_sample_rate(SampleRate(samplerate as u32));
|
let cfg = cpalcfg.with_sample_rate(SampleRate(samplerate));
|
||||||
|
|
||||||
let mut cfg = cfg.config();
|
let mut cfg = cfg.config();
|
||||||
cfg.channels = highest_ch + 1;
|
cfg.channels = highest_ch + 1;
|
||||||
|
@ -162,27 +162,27 @@ impl Recording {
|
|||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
match data.getRaw() {
|
match data.getRaw() {
|
||||||
RawStreamData::Datai8(dat) => {
|
RawStreamData::Datai8(dat) => {
|
||||||
let arr = ndarray::ArrayView2::<i8>::from_shape((framesPerBlock, nchannels), &dat)?;
|
let arr = ndarray::ArrayView2::<i8>::from_shape((framesPerBlock, nchannels), dat)?;
|
||||||
ds.write_slice(arr, (ctr, .., ..))?;
|
ds.write_slice(arr, (ctr, .., ..))?;
|
||||||
}
|
}
|
||||||
RawStreamData::Datai16(dat) => {
|
RawStreamData::Datai16(dat) => {
|
||||||
let arr =
|
let arr =
|
||||||
ndarray::ArrayView2::<i16>::from_shape((framesPerBlock, nchannels), &dat)?;
|
ndarray::ArrayView2::<i16>::from_shape((framesPerBlock, nchannels), dat)?;
|
||||||
ds.write_slice(arr, (ctr, .., ..))?;
|
ds.write_slice(arr, (ctr, .., ..))?;
|
||||||
}
|
}
|
||||||
RawStreamData::Datai32(dat) => {
|
RawStreamData::Datai32(dat) => {
|
||||||
let arr =
|
let arr =
|
||||||
ndarray::ArrayView2::<i32>::from_shape((framesPerBlock, nchannels), &dat)?;
|
ndarray::ArrayView2::<i32>::from_shape((framesPerBlock, nchannels), dat)?;
|
||||||
ds.write_slice(arr, (ctr, .., ..))?;
|
ds.write_slice(arr, (ctr, .., ..))?;
|
||||||
}
|
}
|
||||||
RawStreamData::Dataf32(dat) => {
|
RawStreamData::Dataf32(dat) => {
|
||||||
let arr =
|
let arr =
|
||||||
ndarray::ArrayView2::<f32>::from_shape((framesPerBlock, nchannels), &dat)?;
|
ndarray::ArrayView2::<f32>::from_shape((framesPerBlock, nchannels), dat)?;
|
||||||
ds.write_slice(arr, (ctr, .., ..))?;
|
ds.write_slice(arr, (ctr, .., ..))?;
|
||||||
}
|
}
|
||||||
RawStreamData::Dataf64(dat) => {
|
RawStreamData::Dataf64(dat) => {
|
||||||
let arr =
|
let arr =
|
||||||
ndarray::ArrayView2::<f64>::from_shape((framesPerBlock, nchannels), &dat)?;
|
ndarray::ArrayView2::<f64>::from_shape((framesPerBlock, nchannels), dat)?;
|
||||||
ds.write_slice(arr, (ctr, .., ..))?;
|
ds.write_slice(arr, (ctr, .., ..))?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,12 +130,12 @@ impl InStreamData {
|
|||||||
#[inline]
|
#[inline]
|
||||||
/// Return reference to underlying raw data storage
|
/// Return reference to underlying raw data storage
|
||||||
pub fn getRaw(&self) -> &RawStreamData {
|
pub fn getRaw(&self) -> &RawStreamData {
|
||||||
return &self.raw;
|
&self.raw
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
/// Convenience function to return the number of channels in this instreamdata.
|
/// Convenience function to return the number of channels in this instreamdata.
|
||||||
pub fn nchannels(&self) -> usize {
|
pub fn nchannels(&self) -> usize {
|
||||||
return self.meta.nchannels();
|
self.meta.nchannels()
|
||||||
}
|
}
|
||||||
/// Iterate over raw data of a certain channel. Tye should be specificied
|
/// Iterate over raw data of a certain channel. Tye should be specificied
|
||||||
/// and if not set correctly, this results in undefined behavior
|
/// and if not set correctly, this results in undefined behavior
|
||||||
@ -185,11 +185,10 @@ impl InStreamData {
|
|||||||
{
|
{
|
||||||
Box::new(
|
Box::new(
|
||||||
(0..self.meta.nchannels())
|
(0..self.meta.nchannels())
|
||||||
.into_iter()
|
|
||||||
.flat_map(|chi| self.iter_channel_raw(chi)),
|
.flat_map(|chi| self.iter_channel_raw(chi)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
fn iter_channel_converted<'a, T>(&'a self, ch: usize) -> impl Iterator<Item = Flt> + 'a
|
fn iter_channel_converted<T>(&self, ch: usize) -> impl Iterator<Item = Flt> + '_
|
||||||
where
|
where
|
||||||
T: Sample + Copy + 'static,
|
T: Sample + Copy + 'static,
|
||||||
Flt: FromSample<T>,
|
Flt: FromSample<T>,
|
||||||
@ -208,7 +207,6 @@ impl InStreamData {
|
|||||||
{
|
{
|
||||||
Box::new(
|
Box::new(
|
||||||
(0..self.meta.nchannels())
|
(0..self.meta.nchannels())
|
||||||
.into_iter()
|
|
||||||
.flat_map(move |chi| self.iter_channel_converted(chi)),
|
.flat_map(move |chi| self.iter_channel_converted(chi)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -232,19 +230,19 @@ impl InStreamData {
|
|||||||
let nch = self.meta.nchannels();
|
let nch = self.meta.nchannels();
|
||||||
match &self.raw {
|
match &self.raw {
|
||||||
RawStreamData::Datai8(c) => {
|
RawStreamData::Datai8(c) => {
|
||||||
return c.len() / nch;
|
c.len() / nch
|
||||||
}
|
}
|
||||||
RawStreamData::Datai16(c) => {
|
RawStreamData::Datai16(c) => {
|
||||||
return c.len() / nch;
|
c.len() / nch
|
||||||
}
|
}
|
||||||
RawStreamData::Datai32(c) => {
|
RawStreamData::Datai32(c) => {
|
||||||
return c.len() / nch;
|
c.len() / nch
|
||||||
}
|
}
|
||||||
RawStreamData::Dataf32(c) => {
|
RawStreamData::Dataf32(c) => {
|
||||||
return c.len() / nch;
|
c.len() / nch
|
||||||
}
|
}
|
||||||
RawStreamData::Dataf64(c) => {
|
RawStreamData::Dataf64(c) => {
|
||||||
return c.len() / nch;
|
c.len() / nch
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -227,13 +227,13 @@ impl Filter for Biquad {
|
|||||||
impl<'a, T: AsArray<'a, Flt>> TransferFunction<'a, T> for Biquad {
|
impl<'a, T: AsArray<'a, Flt>> TransferFunction<'a, T> for Biquad {
|
||||||
fn tf(&self, fs: Flt, freq: T) -> Ccol {
|
fn tf(&self, fs: Flt, freq: T) -> Ccol {
|
||||||
let freq = freq.into();
|
let freq = freq.into();
|
||||||
let res = freq.mapv(|f| {
|
|
||||||
|
freq.mapv(|f| {
|
||||||
let z = Complex::exp(I * 2. * pi * f / fs);
|
let z = Complex::exp(I * 2. * pi * f / fs);
|
||||||
let num = self.b0 + self.b1 / z + self.b2 / z / z;
|
let num = self.b0 + self.b1 / z + self.b2 / z / z;
|
||||||
let den = 1. + self.a1 / z + self.a2 / z / z;
|
let den = 1. + self.a1 / z + self.a2 / z / z;
|
||||||
num / den
|
num / den
|
||||||
});
|
})
|
||||||
res
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,9 +26,11 @@ impl Default for Overlap {
|
|||||||
/// The 'mode' used in computing averaged power spectra. When providing data in
|
/// The 'mode' used in computing averaged power spectra. When providing data in
|
||||||
/// blocks to the [AvPowerSpectra] the resulting 'current estimate' responds
|
/// blocks to the [AvPowerSpectra] the resulting 'current estimate' responds
|
||||||
/// differently, depending on the model.
|
/// differently, depending on the model.
|
||||||
|
#[derive(Default)]
|
||||||
pub enum ApsMode {
|
pub enum ApsMode {
|
||||||
/// Averaged over all data provided. New averages can be created by calling
|
/// Averaged over all data provided. New averages can be created by calling
|
||||||
/// `AvPowerSpectra::reset()`
|
/// `AvPowerSpectra::reset()`
|
||||||
|
#[default]
|
||||||
AllAveraging,
|
AllAveraging,
|
||||||
/// In this mode, the `AvPowerSpectra` works a bit like a sound level meter,
|
/// In this mode, the `AvPowerSpectra` works a bit like a sound level meter,
|
||||||
/// where new data is weighted with old data, and old data exponentially
|
/// where new data is weighted with old data, and old data exponentially
|
||||||
@ -44,11 +46,6 @@ pub enum ApsMode {
|
|||||||
/// Spectrogram mode. Only returns the latest estimate(s).
|
/// Spectrogram mode. Only returns the latest estimate(s).
|
||||||
Spectrogram,
|
Spectrogram,
|
||||||
}
|
}
|
||||||
impl Default for ApsMode {
|
|
||||||
fn default() -> Self {
|
|
||||||
ApsMode::AllAveraging
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Averaged power spectra computing engine
|
/// Averaged power spectra computing engine
|
||||||
/// Used to compute power spectra estimations on
|
/// Used to compute power spectra estimations on
|
||||||
@ -93,7 +90,7 @@ impl AvPowerSpectra {
|
|||||||
Overlap::Number(i) if i < nfft => i,
|
Overlap::Number(i) if i < nfft => i,
|
||||||
|
|
||||||
// If overlap percentage is >= 100, or < 0.0 its an error
|
// If overlap percentage is >= 100, or < 0.0 its an error
|
||||||
Overlap::Percentage(p) if p >= 100. || p < 0.0 => {
|
Overlap::Percentage(p) if !(0.0..100.).contains(&p) => {
|
||||||
bail!("Invalid overlap percentage. Should be >= 0. And < 100.")
|
bail!("Invalid overlap percentage. Should be >= 0. And < 100.")
|
||||||
}
|
}
|
||||||
// If overlap percentage is 0, this gives
|
// If overlap percentage is 0, this gives
|
||||||
@ -196,11 +193,11 @@ impl AvPowerSpectra {
|
|||||||
T: AsArray<'a, Flt, Ix2>,
|
T: AsArray<'a, Flt, Ix2>,
|
||||||
{
|
{
|
||||||
let timeblock = timedata.into();
|
let timeblock = timedata.into();
|
||||||
let Cpsnew = self.ps.compute(&timeblock);
|
let Cpsnew = self.ps.compute(timeblock);
|
||||||
// println!("Cpsnew: {:?}", Cpsnew[[0, 0, 0]]);
|
// println!("Cpsnew: {:?}", Cpsnew[[0, 0, 0]]);
|
||||||
|
|
||||||
// Initialize to zero
|
// Initialize to zero
|
||||||
if self.cur_est.len() == 0 {
|
if self.cur_est.is_empty() {
|
||||||
assert_eq!(self.N, 0);
|
assert_eq!(self.N, 0);
|
||||||
self.cur_est = CPSResult::zeros(Cpsnew.raw_dim().f());
|
self.cur_est = CPSResult::zeros(Cpsnew.raw_dim().f());
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ impl TimeBuffer {
|
|||||||
{
|
{
|
||||||
let new_data = new_data.into();
|
let new_data = new_data.into();
|
||||||
let nch = new_data.shape()[1];
|
let nch = new_data.shape()[1];
|
||||||
if self.data.len() == 0 {
|
if self.data.is_empty() {
|
||||||
self.data = vec![VecDeque::new(); nch];
|
self.data = vec![VecDeque::new(); nch];
|
||||||
}
|
}
|
||||||
if self.data.len() != nch {
|
if self.data.len() != nch {
|
||||||
@ -45,7 +45,7 @@ impl TimeBuffer {
|
|||||||
}
|
}
|
||||||
/// Return the number of samples that is currently stored
|
/// Return the number of samples that is currently stored
|
||||||
pub fn nsamples(&self) -> usize {
|
pub fn nsamples(&self) -> usize {
|
||||||
if let Some(q) = self.data.get(0) {
|
if let Some(q) = self.data.first() {
|
||||||
return q.len();
|
return q.len();
|
||||||
};
|
};
|
||||||
0
|
0
|
||||||
@ -54,14 +54,14 @@ impl TimeBuffer {
|
|||||||
/// enough samples to return. Never returns less samples than
|
/// enough samples to return. Never returns less samples than
|
||||||
/// `nsamples_requested`.
|
/// `nsamples_requested`.
|
||||||
pub fn pop(&mut self, nsamples_requested: usize, nsamples_keep: usize) -> Option<Dmat> {
|
pub fn pop(&mut self, nsamples_requested: usize, nsamples_keep: usize) -> Option<Dmat> {
|
||||||
if self.data.len() == 0 {
|
if self.data.is_empty() {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
if nsamples_keep > nsamples_requested {
|
if nsamples_keep > nsamples_requested {
|
||||||
panic!("BUG: Cannot keep more samples than requested to return");
|
panic!("BUG: Cannot keep more samples than requested to return");
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_assert!(self.data.len() > 0);
|
debug_assert!(!self.data.is_empty());
|
||||||
let c1 = unsafe { self.data.get_unchecked(0) };
|
let c1 = unsafe { self.data.get_unchecked(0) };
|
||||||
|
|
||||||
let nsamples_available = c1.len();
|
let nsamples_available = c1.len();
|
||||||
@ -91,7 +91,7 @@ impl TimeBuffer {
|
|||||||
} else {
|
} else {
|
||||||
let slice1len = dat_slice1.len();
|
let slice1len = dat_slice1.len();
|
||||||
// Copy from first slice
|
// Copy from first slice
|
||||||
col_slice[..slice1len].copy_from_slice(&dat_slice1);
|
col_slice[..slice1len].copy_from_slice(dat_slice1);
|
||||||
// Copy rest from second slice
|
// Copy rest from second slice
|
||||||
col_slice[slice1len..nsamples_requested]
|
col_slice[slice1len..nsamples_requested]
|
||||||
.copy_from_slice(&dat_slice2[..nsamples_requested - slice1len]);
|
.copy_from_slice(&dat_slice2[..nsamples_requested - slice1len]);
|
||||||
|
@ -73,8 +73,10 @@ fn hamming(N: usize) -> Dcol {
|
|||||||
///
|
///
|
||||||
/// The [WindowType::default] is [WindowType::Hann].
|
/// The [WindowType::default] is [WindowType::Hann].
|
||||||
#[derive(Display, Clone, Debug)]
|
#[derive(Display, Clone, Debug)]
|
||||||
|
#[derive(Default)]
|
||||||
pub enum WindowType {
|
pub enum WindowType {
|
||||||
/// Von Hann window
|
/// Von Hann window
|
||||||
|
#[default]
|
||||||
Hann = 0,
|
Hann = 0,
|
||||||
/// Hamming window
|
/// Hamming window
|
||||||
Hamming = 1,
|
Hamming = 1,
|
||||||
@ -85,11 +87,6 @@ pub enum WindowType {
|
|||||||
/// Blackman window
|
/// Blackman window
|
||||||
Blackman = 4,
|
Blackman = 4,
|
||||||
}
|
}
|
||||||
impl Default for WindowType {
|
|
||||||
fn default() -> Self {
|
|
||||||
WindowType::Hann
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Window (taper) computed from specified window type.
|
/// Window (taper) computed from specified window type.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
@ -106,7 +106,7 @@ impl RtAps {
|
|||||||
if let Some(RtApsComm::CommStopThread) = res {
|
if let Some(RtApsComm::CommStopThread) = res {
|
||||||
panic!("BUG: CommStopThread should never be set!")
|
panic!("BUG: CommStopThread should never be set!")
|
||||||
}
|
}
|
||||||
return lck.take();
|
lck.take()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl Drop for RtAps {
|
impl Drop for RtAps {
|
||||||
|
Loading…
Reference in New Issue
Block a user