.. and add a very basic audioeffects test, showing that it plausibly
is working
I had to address several build errors that occurred in the Unix build,
mostly related to conversion from FP types to integral types (replaced
by explicit casts) and by
accidental mixing of regular & f-suffixed floating constants (replaced
with the MICROPY_FLOAT_CONST macro)
Particularly this change could use consideration:
```diff
- self->max_echo_buffer_len = self->sample_rate / 1000.0f * max_delay_ms * (self->channel_count * sizeof(uint16_t)); // bytes
+ self->max_echo_buffer_len = (uint32_t)(self->sample_rate / 1000.0f * max_delay_ms) * (self->channel_count * sizeof(uint16_t)); // bytes
```
The buffer length is being calculated in floating point based on the
millisecond delay & the sample rate. The result could then be a fractional
number such as 529.2 for a 12ms delay at 44.1kHz. Multiplying a floating
number by the size required for each echo buffer item
(`(self->channel_count * sizeof(uint16_t))`) could yield a number of bytes
that doesn't correspond to an integral number of buffer items. I grouped
the float->int conversion so that it converts the number of echo buffer
items to an integer and then multiplies by the size of the item.
Recursive DNS Server (RDNSS) is an extension of IPv6 Neighbor Discovery.
It is one of several ways (in addition to DHCPv6) to inform a network
node of a usable DNS server.
In LWIP, it appears any RDNSS DNS server will overwrite a DNS server
from DHCPv4 or manual configuration, whether or not CircuitPython has
an IPv6 address configured.
In the (default) case where DHCPv6 is disabled in CircuitPython, but the
(apparently rare) case where a RDNSS advertisement is broadast,
this means that DNS doesn't work, and it appears that assigning to
the dns or ipv4_dns properties of the Radio object doesn't work
(when in reality it's frequently being reset to the value from RDNSS)
On my network, the same DNS server is advertised by DHCPv6, so with this
change I still get a working v6 configuration with a v6 DNS server
when I enable DHCPv6, but when configuring as v4 only (the default),
the correct IPv4 DNS server setting happens and I can also manually
change it by assigning .dns or .ipv4_dns.
MDNS defaults to the hostname used by DHCP/LWIP since it is now
unique. This makes it the same either way.
This also updates esp-protocols (used for mdns) with a patch to
ensure that mangled names are the ones that collide.
(circuitpython.local collides but was causing cpy- to be mangled.)
Fixes#6869 again.