I just set up my Onkyo AVR to be a player for my LMS setup, using the AirPlay Bridge. As I was a little confused regarding the volume mapping, I thought I’d share how I made it work here.

Connecting was dead simple, just install the plugin and make sure your AVR has AirPlay enabled. Everything worked flawlessly, except that the volume shown in LMS didn’t match that shown on my AVR. The bridge has a ‘Volume Mapping’ option for this, where you can specify which AirPlay volume level corresponds to which LMS volume level.

Now, the AirPlay volume levels are a bit confusing, as they go from -30 to 0. What’s also confusing to me, the bridge seems to round the values reported by my AVR very oddly. Either way, whenever you change the volume on your AVR, you should be able to find the corresponding AirPlay volume value in the logs of the LMS docker container (or if you don’t have it in a container wherever else the program outputs them to). Here is an example from my testing earlier:

2026-11-08 12:23:46.142363+00:00[13:23:46.142] ActiveRemoteThread:1060 raw active remote: get /ctrl-int/1/setproperty?dmcp.device-volume=-13.536585 http/1.1
2026-11-08 12:23:46.142412+00:00host: server.local.
2026-11-08 12:23:46.142427+00:00active-remote: <some ID>
2026-11-08 12:23:46.142439+00:00user-agent: airplay/366.0
2026-11-08 12:23:46.142450+00:002026-11-08T12:23:46.142450036Z
2026-11-08 12:23:46.142460+00:002026-11-08T12:23:46.142460668Z
2026-11-08 12:23:46.142471+00:00[13:23:46.142] ActiveRemoteThread:1094 [<some ID2>]: remote command setproperty?dmcp.device-volume=-13.536585
2026-11-08 12:23:46.142483+00:00[13:23:46.142] ActiveRemoteThread:1149 [<some ID2>]: volume feedback 45 (-13.54)
2026-11-08 12:23:46.143354+00:00[13:23:46.143] sq_callback:354 [<some ID2>]: volume ignored 44
2026-11-08 12:23:46.150985+00:00[13:23:46.150] PlayerThread:595 [<some ID2>]: processing volume device:29 request:-13.54

When reading these logs, make sure to take the remote command setproperty?dmcp.device-volume=… value, as for me the rounded values were often incorrect.
Now, get your AVRs AirPlay volume for one over 0 and the AVR volume levels which correspond to AirPlay level -15 and -30. This will lead to three value pairs, which you can enter into the mapping field. For me with an Onkyo TX-NR686, the mappings are -29.63:1, -15:41, 0:82 (yes the AirPlay volume caps at 100 % when the AVR reaches volume level 82).

For me the AirPlay connection terminated as soon as no music was playing, which made it ‘impossible’ to get the AVR volume for AirPlay volume 0. I solved this by creating an mp3 file with silence, which I played during my testing. The following ffmpeg command will generate a 300 s (5 min) silent mp3:

ffmpeg -f lavfi -i anullsrc=r=44100:cl=mono -t 300 -q:a 9 -acodec libmp3lame out.mp3

After all this effort, the volume levels often still don’t correspond exactly, due to the bridge turning e. g. -29.43 into -28.88 for some reason. But in my heart I at least now that my mapping is correct.

I hope this is helpful to someone. If you have a different AirPlay device which is not an AVR, just substitute “AVR” with the device you have.