Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2018:mp3-player

Zadání

Realizujte přehrávač souborů formátu MP3 na platformě STM32F4. Využijte vhodnou knihovnu pro softwarové dekódování MP3, USB host s FATFS. Pro ovládání připojte několik externích tlačítek. Zjistěte procentuální využití výpočetního výkonu procesoru při SW dekódování.


Úvod

Na dekódovanie MP3 je použitý I2S režim. Dekóduje sa vždy jeden rámec MP3 zatial čo druhý je pocielaný CODECu pomocou DMA. Striedajú sa teda dva vstupné buffre, zjednodušene do jedného sa zapisuje a z druhého sa číta.

Hardware

Najdôležitejšou súčasťou bol samozrejme vývojový kit STM32F4Discovery a k tomu pripojené nasledujúce veci:

  • napájací kábel
  • USB OTG kábel
  • reproduktor (slúchadlá) cez 3,5mm jack
  • 3 externé tlačítka

Na videu je pripojený aj displej, ktorý však ešte nieje implementovaný, preto tu nieje zapojenie.

Software

Kompilované pomocou príkazového riadku a Makefile, debugovane pomocou OpenOCD a ST-link/V2.1 - Linux Mint 18.3. toolchain : arm-none-eabi.


Kód je poskladaný z rôznych knižníc dostupných z odkazov. V maine sa volá funkcia ktoré načíta obsah priečinku z USB, prečíta si všetky súbory mp3, vynecháva priečinky. Z bufferu si potom naťahuje názvy pesničiek a tie prehráva v danom poradí. Po stlačení pridaného externého tlačítka na PE8 sa listuje v prehrávači naspäť, respektíve sa volí smer prehrávania. Ďalšími dvomi externými tlačidlami sa pridáva a uberá hlas.

while(fno.fname[0] != 0){      /* store all files in USB to buffer for playing - while not end of file*/
	  f_readdir(&dir, &fno);
	  fn = fno.fname;
	  if (!(fno.fattrib & AM_DIR)) {
		  sprintf(buffer, "%s/%s", path, fn);
		  for(k = 0; k < 16; k++)
		  {
			  buffer33[index_of_song][k]=buffer[k];
		  }
		  index_of_song++;
	  }
  }
  num_of_songs = index_of_song;
  index_of_song = 0;
  if (res == FR_OK) {
    while(1) /* This is basicly the "main" code, where songs are played in order or backwards. */
    {        /* The program is looped here */
       if(direction == 0)
       {
          if(index_of_song > num_of_songs)
          {
        	  index_of_song = 0;
          }
       }
       else
       {
    	   if(index_of_song > num_of_songs) /* underflow, not correct solution, but works when there is no more than 256 songs in directory*/
    	   {                    /* Todo: find better solution than store all songs in memmory - its good soluton for LCD menu thou */
    		   index_of_song = num_of_songs;
    	   }
       }
        // Check if it is an mp3 file
        if (strcasecmp("mp3", cwSFGetFilenameExt(buffer33[index_of_song])) == 0)
        {
          MP3PlayFile(buffer33[index_of_song]);
        }
        if(direction == 0)
        {
            index_of_song++;
        }
        else
        {
            index_of_song--;
        }
      }
 
  }

Video

Pozn. - musím nahrať video s lepším mikrofónom.

Záver

Cieľom projektu bolo realizovať prehrávač MP3 na vývojovej platforme STM32F4Discovery za vhodného použitia už vytvorených knižníc.

Nepodarilo sa mi splniť zadanie pre výpočet percentuálneho výkonu pri softwarovom dekódovaní, prehrávanie beží v nekonečnej smyčke a blokuje všetky ostatné funkcie.

Aktuálny stav je taký, že po pripojení sa prehrávajú MP3 súbory v koreňovom adresári USB. Modrým tlačidlom sa posúvajú pesničky dopredu, ďalšie externé tlačidlá slúžia na posun vzad v prehrávaní či znižovanie a zvyšovanie hlasitosti. V pláne je ešte dorobiť LCD aby zobrazovalo príslušný prehrávaný súbor.

Zdrojový kód

Zdroje

2018/mp3-player.txt · Poslední úprava: 2019/01/28 02:02 autor: Ondrej Rehák