Play Audio on Raspberry Pi OS Lite with Zero 2 W
La domanda è: "Come riprodurre un file audio su un Raspberry Pi Zero2W e C#?"
La risposta è "Installa Raspberry Pi Os Lite, poi NET8 e infine esegui aplay o cvlc".
Gli step necessari sono i seguenti:
1) Apri Raspberry Pi Imager e seleziona:
- Device: No filtering
- Operating System: "Raspberry Pi OS Lite (64 bit)
2) Premi CTRL+MAIUSC+X per accedere alla configurazione iniziale di Raspebbry Imager e quindi settare l'hostname ("pizero2" nel mio caso), username e password per accedere tramite SSH e le credenziali per accedere alla rete.
3) Premi "Next" e attendi la fine della scrittura dell' SD card.
Inserisci l'sd card nel Rasberry Pi Zero 2W e attendi qualche minuto (il led verde dovrebbe rimanere acceso e non lampeggiare).
Da Power Shell lancia i seguenti comandi:
ssh pi@pizero2.local
<Immetti la password che hai scelto durante la configurazione>
sudo apt update
sudo apt full-upgrade
sudo reboot
Adesso installa NET8:
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod +x ./dotnet-install.sh
./dotnet-install.sh --version latest
echo 'export DOTNET_ROOT=$HOME/.dotnet' >> ~/.bashrc
echo 'export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools' >> ~/.bashrc
sudo reboot
Attendi il riavvio e lancia dotnet --version per controllare la corretta installazione di NET8.
Adesso non resta che installare vlc tramite il comando:
sudo apt install -y vlc
Io ho collegato un jack femmina ai piedini 13 e 18 in modo da avere l'uscita per un altoparlante e non dover utilizzare un cavo o adattatore hdmi.
Per fare in modo che l'audio sia riprodotto tramite la porta GPIO è necessario modificare il file /boot/firmware/config.txt e aggiungere la seguente riga:
dtoverlay=audremap,pins_12_13 # for pins 12 and 13
Riavvia il Raspberry con il solito sudo reboot.
Nota: puoi utilizzare il comand raspi-gpio get per verificare la corretta configurazione.
Puoi eseguire un test con il comando:
aplay audio.wav
oppure
nvlc audio.mp3 -Idummy -f --play-and-exit
Io ho creato un'app Blazor che gira sul Raspberry. Ho utilizzato CliWrap per gestire gli argomenti da passare a nvlc:
Ecco un esempio di utilizzo:
var arguments = new List<string> {
"-Idummy",
"-f",
"--play-and-exit"
filename
};
var sb = new StringBuilder();
var command =
await Cli
.Wrap("nvlc")
.WithArguments(string.Join(" ", arguments))
.WithStandardOutputPipe(PipeTarget.ToStringBuilder(sb))
.ExecuteAsync(token);
var output = sb.ToString();