sabato 18 febbraio 2017

RASPBERRY PI - RIPRODURRE AUDIO E MEDIA STATION


Tutorial sulla riproduzione di file audio MP3 su Raspberry e l'integrazione con un Server Apache Tomcat per realizzare una elementare Media Station.





Prima di Iniziare

  • Tutorial di Raspberry Pi [link]
  • Installare Oracle Java su Raspberry [link]
  • Installare Apache Tomcat su Raspberry [link]
  • Riprodurre Audio in Java [link]
  • Concetti base su Utenti-Gruppi-Permessi in Linux [link]
  • Concetti base di Javascript [wikipedia], JQuery [link] e AJAX con JQuery [link].

Riprodurre Audio su Raspberry

Come abbiamo già visto su Programmazione Applicata, è molto semplice riprodurre file audio attraverso un piccolo codice Java [link]. Utilizziamo infatti il medesimo codice ed adattiamolo alle nostre esigienze.

Supponiamo di voler riprodurre il file canon.mp3 [download], creiamo una piccola classe wrapper per gestire l'apertura del file e i metodi di start/stop della riproduzione.


import java.io.File;
import java.io.FileInputStream;
import javazoom.jl.player.Player;

public class RaspberryAudioPlayer{

   private Player player;

   public RaspberryAudioPlayer(String audioFilename) throws Exception{
      File audioFile = new File(audioFilename);
      FileInputStream inputStream = new FileInputStream(audioFile);
      player = new Player(inputStream);
   }

   public void play() throws Exception{
      player.play();
   }

   public void stop() throws Exception{
      player.stop();
   }

}


A questo punto, utilizziamo la classe per riprodurre il file (supponiamo di avere il file e il sorgente Java nella stessa path):


[...]
public static void main(String[] args){
   RaspberryAudioPlayer player;
   player = new RaspberryAudioPlayer(".\\canon.mp3");
   player.play();
}
[...]

Riproduzione Remota con Tomcat

Adesso che abbiamo imparato come riprodurre file audio con il nostro Raspberry potremmo unire ciò che abbiamo già visto con l'argomento di questo articolo: supponiamo di voler riprodurre il file audio da remoto senza doversi collegare fisicamente al Raspberry, magari tramite una interfaccia web anche tramite smartphone o tablet.

Per fare questo utilizziamo un Server Tomcat (Apache Tomcat su Raspberry [link]) e andiamo a creare una Web Application per la riproduzione remota del file audio.

Per prima cosa, realizziamo una semplice interfaccia grafica con i comandi per la riproduzione dell'audio (file index.html)


<html>
  <head>
    <title>
      Programmazione Applicata - Raspberry Pi - Media Station
    </title>
  </head>
  <body>
    <div>
      <a href="" onclick="ajaxPlay()">
        RIPRODUCI AUDIO
      </a>
      <br/>
      <a href="" onclick="ajaxStop()">
        STOP
      </a>
    </div>
  </body>
</html>


Gestiamo i comandi di START e STOP attraverso una chiamata AJAX con JQuery, non prima di aver aggiunto il riferimento alla libreria JQuery [download]


<script src="./jquery-3.1.1.min.js"></script>
<script>
  $("#playcmd").onclick(function(){
    $.ajax({
      url: "AudioServlet?cmd=play"
    });
  });
  $("#stopcmd").onclick(function(){
    $.ajax({
      url: "AudioServlet?cmd=stop"
    });
  });
</script>


gestiamo le richieste HTTP nella nostra Servlet


[...]
@WebServlet(name = "AudioServlet", urlPatterns = {"/AudioServlet"})
public class MyServletextends HttpServlet {
static RaspberryAudioPlayer player;
[...]
protected void processRequest(
        HttpServletRequest request, 
        HttpServletResponse response)
        throws ServletException, IOException {
    try (PrintWriter out = response.getWriter()) {
        String userCommand;
        userCommand = (String)Request.getParameter("cmd");
        if(userCommand.equals("play"){
            player = new RaspberryAudioPlayer(".\\canon.mp3");
            player.play();
        }
        if(userCommand.equals("stop"){
            player.stop();
        }
    }
[...]

Testiamo il tutto.. NON FUNZIONA! Prima di poter prodecedere con il test, è necessario autorizzare il Server Tomcat alla riproduzione di suoni (di fatto autorizzare Tomcat ad accedere alla scheda Audio del nostro Raspberry)

Tomcat e Audio

L'installazione di Tomcat ha portato implicitamente l'inserimento di un utente nel nostro Sistema Operativo Linux chiamato "Tomcat7" (articolo: utenti gruppi permessi in Linux [link]). Questo utente deve avere accesso alla scheda audio di Raspberry altrimenti non può far riprodurre suoni.

Per associare l'utente tomcat7 alla riproduzione di file audio dobbiamo procedere come segue:

sudo usermod -G audio tomcat7

Conclusione

La semplicità di un codice Java unita alle potenzialità di Raspberry sono il connubio perfetto per far prendere forma progetti di questo tipo, oggi abbiamo visto come riprodurre un audio ma è già una base molto interessante su cui costruire un progetto più complesso per la riproduzione di qualunque tipo di formato. Certo, naturalmente esistono software che trasformano già il vostro Raspberry in un media center, ma su Programmazione Applicata si affrontano i problemi dalla parte del codice.

Nessun commento:

Posta un commento