Self contained room/sound correction solution in Volumio

Hi Volumio community and developper, I am a super happy Volumio customer for several years.
I have just added the FusionDSP plugin and am impressed by the quality and ease of configuration. This allowed to significantly improve the sound quality of my speakers at the extremes of the spectrum.

I was wondering if it would be possible (or potentially already done) to have a full contained solution based on Volumio on RPi and a UMik microphone to tweak the native output of the streamer + amplifier + speakers to a defined sound curve.

I know that REW may run on RPi, but I was more thinking about a lean process embedded in Volumio playing sweeps while recording through UMik, asking for a target sound curve, then creating a FIR correction file and placing it in the dsp?

Any feedback or info about interest/feasibility would be appreciated.

Benoit

3 Likes

Hello!

Thanks :grinning:

I already thought of thatā€¦
The idea is to use DRC FIR. But it is complicated to includes plenty of cases. When you use REW you can check is measure is correct before using it. A single sweep is IMHO not enough.
Iā€™m still thinking on how to do that thoughā€¦
Suggestions welcome!
:wink:

2 Likes

Thanks for you rapid answer, Balbuze (I would have guessed you would react to this proposal ;-).

Sure, doing it in a semi automated process will somehow keep the user blind about the automated selection of the corrections. Unless properly implemented it might lead to unexpected results.

Anyway, if you are in for some test development, I would be happy to provide feedback.

Benoit

http://drc-fir.sourceforge.net/doc/drc.html

For reference.

Yesā€¦ This is what I wrote above :wink:
Drc-fir is already used in FusionDsp to generate filters from an impulse in filter generation section (in convolution mode)

For the process, I propose the following, fully agnostic about the feasibility with DRC and Volumio plugin mechanic and web display.

Hardware assumptions:

  • USB microphone with definition file
  • Raspberry Pi 4 4gb
  • GPIO I2S DAC

select scenario/action : should it be contained in a single plugin with different sections or spread over several ones?
=> adjust sweep volume / record sweeps / calculate correction file / update DSP / verify room correction.

A/ adjust sweep volume
play sweeps button : plays continuous sweeps until pressed again
ā†’ feedback sound level in web interface

B/ record sweeps

  1. request a file name for storing the different files generated in the process.
  2. select sweep options (number of sweeps, delay in between sweeps, ā€¦)
  3. play+record several sweeps separated by a timing to allow scanning the listening area with the microphone
  4. generate and store averaged response (or other black magic maths on the scans to a potentially more relevant result?)
    ā†’ Would it be worth/possible to have a graphic view of result in the web header?

C/ calculate correction file

  1. Select averaged response file amongst the available ones (recorded at the previous step)
  2. Select the target curve amongst a list of predefined ones (<300hz; full flat; full high freq roll off;ā€¦). Ability to upload a user target curve ?
  3. Select potential options for the correction profile generation.
  4. Run the correction calculation.
  5. Save the correction file (automated naming based on filename in 1.)

D/ Update DSP
update DSP settings to use the generated correction file : select file in a list and push on update DSP button - Though this might be done manually in DSP plugin by the user

E/ Verify room correction

  1. Select the averaged sweep file associated with the correction file loaded in DSP
  2. Runs a sweep
  3. Generate a file with overlay graphs
  4. display graph

Happy to discuss further the logic. A first version to test the usability might provide a very limited set of user selection/customization and potentially expand it upon user feedback.

Benoit

Hello.
This a complex processā€¦
I not sure averaging sweep is faisable.
Even in REW you canā€™t use average to generate impulse (or in very recent beta?).
MMP measure with pink noise is not a drc fir feature.
From part C) is already in place.in FusionDsp:
Select impulse
Select target curve
Select sample rate
Select strength for effect.
Whatā€™s not available is displaying curve in UI and not in my skillsā€¦
Last point, the amount of work to make something good enough and reliable is maybe not in phase with the need and spending months for just 3 passionated users (me!:stuck_out_tongue_winking_eye:) is difficult to justifiedā€¦
But I am still thinking about this.
Thanks

Obviously a significant amount of work, I agree.
You may reach out to me if you want some input or discuss/test some ideas. Now, I am a bit more positive about the potential public, if implemented and documented in an easy process.

Now we might also decide to perform part of the process outside of Volumio, but still on the RPi (command line or graphic interface). I would find very elegant to have a self contained solution to avoid using an external computer.

Benoit

Hello! Another enthusiastic user here, so you might have a use case ā€“ but Iā€™m also product owner in my daily life.

Except for the ā€˜it can be done so I must do itā€™ attitude, does it really bring that much? How many people can be bothered with setting this up and actually using it constantly?

Even a hi-fi / surround setup using audyseey is a single use experience for most, the target audience doing more might be in audirvana / roon territory, not volumio?

I would be really thankful with a good piece of documentation on how to do this properly (the process of setup, measurement, export+import to fusionDSP is not as easy to figure out at first), or perhaps a (series of) youtube videos guiding along?

Just as suggestions :grinning:

Good to know we are already 3 to be interested :nerd_face:. Theoretically, once properly set up, room correction should be kept on all the time. The goal is to have a working and easy to apply process. Currently performing measurements with another computer running on windows and requiring REW and RePhase to generate the filter and copying it on the streamer is a hurdle very few have the knowledge and interest in setting up.
I strongly believe that connecting a 100ā‚¬ microphone to the RPi and following a simple procedure would allow a lager population to use this technology.

Benoit

1 Like

+1 :grin:

+1 :grinning:

Letā€™s say something is coming! :kissing_smiling_eyes:

3 Likes

Yes I completely agree - I was thinking of doing something similar already - I just bought myself a umik-1 microphone and would love to use REW (or similar) within volumio - I think room correction is a killer feature (just look at how much Dirac Live costs). I have already used Audyssey in my main system and I thought it made a huge difference. I use Volumio in 2 other rooms and I actually believe both those rooms (and the cheaper speakers I have in those rooms) would greatly. benefit for room correction - I am using a bit of EQ already with FusionDSP.

1 Like

Hello,

An update on the topic: doing a self contained solution on the Volumio distro is not straightforward and require more thinkering than initially expected.

Anyway, an elegant alternative is possible for the iPhone owners. Using the HouseCurve app (from Greg Wilding) available at 4,5ā‚¬ on the AppStore, you may simply use your phone to play sweeps, record and analyse result and generate parametric filter that may directly be saved on the Volumio shared folder for use with FusionDSP

So with a few euros and and iPhone, you get a very handy solution to the initial goal.

Find below a screenshot of the recorded sweep, the parametric correction and the theoretical result.

Any feedback of your trials is welcome.

Benoit

I would add that House Curve can also uses impulse for convolution in FusionDsp.
See File Formats - HouseCurve
:wink:

Thanks for the shout out :blush:

For those that are interested, I wrote an application note on this topic:

The application note uses PEQ filters, but as @balbuze points out, you can just as easily generate impulse responses for convolution.

3 Likes

I really like the idea, but do wonder what I am correcting here. The room or the iPhone mic?

1 Like

I guess, strictly speaking, the transfer functions of the audio system, room and microphone all multiply together to produce the measured response. If the mic is ā€œflat enoughā€, we can assume the measurement is the audio system + room and correct accordingly.

Iā€™m often asked how good iPhone mics are, and the sort answer is ā€œactually, pretty good, especially when you donā€™t have a measurement mic handyā€.

iOS microphones can be accessed in a special ā€œmeasurement modeā€, which disables signal processing for voice calls, etc. My own measurements show that the mics are pretty flat from 60 Hz to 16 KHz. HouseCurve applies some compensation at either end to get the mics closer to what an actual measurement mic would read. For the curious, thereā€™s more information here

HouseCurve also works with calibrated external microphones, like miniDSPā€™s UMIK-1, but I recommend starting with the iPhone mic.

Thanks for your feed-back.
Couldnā€™t find much info on the frequency response of the iphone mic, besides those from 12 years ago.
Did you also test the default headset that comes with iPhone, as those seem to have a pretty flat response.