Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
e58686e
Rename `selected_impulse_response`
kunerd Jan 22, 2026
08b96c6
Improve project loading
kunerd Jan 27, 2026
d9972df
Start re-structuring of main screen
kunerd Jan 28, 2026
7f28673
Rework analses state and storing
kunerd Jan 28, 2026
00a3821
Add frequency response tab back
kunerd Jan 28, 2026
5560cd4
Improve FR computation by unsing a `Sipper`
kunerd Jan 28, 2026
b18658b
Cleanup analyses computations
kunerd Jan 29, 2026
7d94aad
Make available tabs depend on state
kunerd Jan 29, 2026
04065df
Refactor `Measurement` view
kunerd Jan 29, 2026
85eb5a7
Refactor `Loopback` view
kunerd Jan 29, 2026
1c212c8
Refactor `ui::FrequencyResponse`
kunerd Jan 29, 2026
2af830a
Simplify loopback and measurement loading
kunerd Jan 29, 2026
dadc475
Add export of IRs
kunerd Jan 29, 2026
88abc9f
Enable toggler for FRs
kunerd Jan 29, 2026
be12289
Refactor FR smoothing and IR compuation
kunerd Jan 29, 2026
0e66079
Refactor FR computation and IR saving
kunerd Jan 31, 2026
2844302
Cleanup
kunerd Jan 31, 2026
a263d96
Refactor spectral decay tab
kunerd Jan 31, 2026
4c7b977
Refactor modal
kunerd Jan 31, 2026
d26e3e6
Refactor spectrogram
kunerd Jan 31, 2026
91abb3a
Refactor spectrogram config
kunerd Feb 2, 2026
eb32d07
Refactor IR window settings
kunerd Feb 2, 2026
05d3b01
Remove unnecessary `WindowSettings` wrapper
kunerd Feb 2, 2026
98d3aa8
Improve measurements button styling
kunerd Feb 2, 2026
d45d046
Re-integrate `Recording`
kunerd Feb 2, 2026
46d0b70
Re-integrate project loading/saving
kunerd Feb 2, 2026
a3e917a
Cleanup
kunerd Feb 2, 2026
39a7f21
Remove unused src files
kunerd Feb 2, 2026
bdea9a1
Fix clippy issues
kunerd Feb 3, 2026
75415d8
Fix formatting
kunerd Feb 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion raumklang-gui/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "gui"
version = "0.1.0"
edition = "2021"
edition = "2024"

[[bin]]
name = "raumklang"
Expand Down
3 changes: 2 additions & 1 deletion raumklang-gui/fonts/icons.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
module = "icon"

[glyphs]
delete = "fontawesome-trash"
plus = "fontawesome-plus"
record = "typicons-record"
delete = "fontawesome-trash"
download = "typicons-download"
settings = "fontawesome-cog-alt"
reset = "fontawesome-ccw"
Binary file modified raumklang-gui/fonts/icons.ttf
Binary file not shown.
2 changes: 1 addition & 1 deletion raumklang-gui/src/audio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ use tokio::sync::mpsc;
use tokio::sync::mpsc::error::TryRecvError;
use tokio_stream::wrappers::ReceiverStream;

use std::sync::atomic::{self, AtomicBool};
use std::sync::Arc;
use std::sync::atomic::{self, AtomicBool};
use std::thread;
use std::time::Duration;

Expand Down
7 changes: 0 additions & 7 deletions raumklang-gui/src/audio/driver.rs

This file was deleted.

2 changes: 1 addition & 1 deletion raumklang-gui/src/audio/loudness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use tokio::sync::mpsc::error::TrySendError;

use std::time::{Duration, Instant};

use super::{process::Control, Process};
use super::{Process, process::Control};

#[derive(Debug, Clone, Copy)]
pub struct Loudness {
Expand Down
6 changes: 3 additions & 3 deletions raumklang-gui/src/audio/measurement.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
use crate::log;

use super::{loudness, process::Control, Process};
use super::{Process, loudness, process::Control};

use ringbuf::{
traits::{Consumer as _, Producer as _, Split as _},
HeapCons, HeapProd, HeapRb,
traits::{Consumer as _, Producer as _, Split as _},
};

use std::{
sync::{
atomic::{self, AtomicBool},
Arc,
atomic::{self, AtomicBool},
},
time::Duration,
};
Expand Down
4 changes: 2 additions & 2 deletions raumklang-gui/src/data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ pub use spectral_decay::SpectralDecay;
pub use spectrogram::Spectrogram;
pub use window::Window;

use ndarray::{concatenate, Array, Array1, ArrayView, Axis};
use ndarray_interp::interp1d::{cubic_spline::CubicSpline, Interp1DBuilder};
use ndarray::{Array, Array1, ArrayView, Axis, concatenate};
use ndarray_interp::interp1d::{Interp1DBuilder, cubic_spline::CubicSpline};
use ndarray_stats::SummaryStatisticsExt;

use std::{io, sync::Arc};
Expand Down
81 changes: 63 additions & 18 deletions raumklang-gui/src/data/impulse_response.rs
Original file line number Diff line number Diff line change
@@ -1,26 +1,71 @@
#[derive(Debug, Clone)]
pub struct ImpulseResponse {
pub origin: raumklang_core::ImpulseResponse,
use std::sync::Arc;

use iced::task::{Sipper, sipper};

#[derive(Debug, Clone, Default)]
pub struct ImpulseResponse(State);

#[derive(Debug, Clone, Default)]
enum State {
#[default]
None,
Computing,
Computed(Arc<raumklang_core::ImpulseResponse>),
}

impl ImpulseResponse {
pub fn from_data(impulse_response: raumklang_core::ImpulseResponse) -> Self {
Self {
origin: impulse_response,
pub fn compute(
self,
loopback: &raumklang_core::Loopback,
measurement: &raumklang_core::Measurement,
) -> Option<impl Sipper<Self, Self> + use<>> {
if let State::Computing = self.0 {
return None;
}

if let State::Computed(_) = self.0 {
return None;
}

let loopback = loopback.clone();
let measurement = measurement.clone();

let sipper = sipper(async move |mut progress| {
progress.send(ImpulseResponse(State::Computing)).await;

let impulse_response = tokio::task::spawn_blocking(move || {
raumklang_core::ImpulseResponse::from_signals(&loopback, &measurement)
})
.await
.unwrap()
.unwrap();

ImpulseResponse(State::Computed(Arc::new(impulse_response)))
});

Some(sipper)
}

pub fn result(&self) -> Option<&raumklang_core::ImpulseResponse> {
match self.0 {
State::None => None,
State::Computing => None,
State::Computed(ref impulse_response) => Some(impulse_response),
}
}

pub fn progress(&self) -> Progress {
match self.0 {
State::None => Progress::None,
State::Computing => Progress::Computing,
State::Computed(_) => Progress::Computed,
}
}
}

pub async fn compute(
loopback: raumklang_core::Loopback,
measurement: raumklang_core::Measurement,
) -> ImpulseResponse {
let impulse_response = tokio::task::spawn_blocking(move || {
raumklang_core::ImpulseResponse::from_signals(&loopback, &measurement)
})
.await
.unwrap()
.unwrap();

ImpulseResponse::from_data(impulse_response)
#[derive(Debug, Clone)]
pub enum Progress {
None,
Computing,
Computed,
}
46 changes: 0 additions & 46 deletions raumklang-gui/src/data/project/file.rs

This file was deleted.

2 changes: 1 addition & 1 deletion raumklang-gui/src/data/recent_projects.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use super::Error;

use std::{
collections::{vec_deque, VecDeque},
collections::{VecDeque, vec_deque},
io,
path::{Path, PathBuf},
};
Expand Down
Loading