{"id":438,"date":"2017-11-24T23:29:02","date_gmt":"2017-11-24T22:29:02","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=438"},"modified":"2017-12-30T19:37:04","modified_gmt":"2017-12-30T18:37:04","slug":"54-cs43l22_mp3_usb-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=438","title":{"rendered":"54-CS43L22_MP3_USB-Library (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=436\" title=\"53-CS43L22_MP3-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 53-CS43L22_MP3-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=440\" title=\"55-Timer-Library (STM32F4)\">55-Timer-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Mit dieser Library kann der Audio-DAC (CS43L22) vom Discovery-Board benutzt werden um normale MP3-Files von einem USB-Stick abzuspielen.<br \/>\n<em>(es gibt auch noch eine andere Lib um MP3 aus dem Flash abzuspielen)<\/em><\/p>\n<p>Die MP3-Files m\u00fcssen mit einer Sampling-Frq von 44,1 kHz vorliegen.<\/p>\n<p>Das MP3 kann entweder nur einmal \u201csingle\u201d oder endlos \u201cloop\u201d abgespielt werden. Es gibt noch Funktionen f\u00fcr Pause, Resume, Stop und Volume.<br \/>\nDie Funktion \u201cUB_CS43L22_PlayMP3Do\u201d muss st\u00e4ndig zyklisch aufgerufen werden !<\/p>\n<p><span style=\"text-decoration: underline;\">Hinweis\u00a0:<\/span> Der I2S-Clock und der notwendige PLL muss nicht im \u201csystem_stm32f4xx.c-File\u201d eingestellt werden, das wird von der Library erledigt.<\/p>\n<p><span style=\"text-decoration: underline;\">MP3-Decoder :<\/span><br \/>\nAls MP3-Decoder habe ich Helix-MP3 benutzt (der Link dazu steht im Quellfile)<\/p>\n<p>Um die MP3-Files vom USB-Stick laden zu k\u00f6nnen, wird die USB-Version der FATFS-Library ben\u00f6tigt und die Library f\u00fcr den USB-MSC im Host-Mode.<\/p>\n<p><span style=\"text-decoration: underline;\">Compiler-Settings :<\/span><br \/>\nDie \u201cOptimization\u201d muss bei CoIDE auf \u201c-O3\u2033 eingestellt sein, sonst kommt es zu Knackger\u00e4uschen beim abspielen !!<\/p>\n<p><strong>Benutzte Pins :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">PB9  = SDA\r\nPB6  = SCL\r\nPA4  = WS\r\nPC7  = MCLK\r\nPC10 = SCK\r\nPC12 = SD\r\nPD4  = Reset<\/pre>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : SPI, DMA, MISC\r\nBenutzte Librarys : STM32_UB_I2C1, STM32_UB_USB_MSC_HOST<\/pre>\n<p><strong>Enumerationen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum {\r\n  MP3_OK = 0,       \/\/ kein Fehler\r\n  MP3_INIT_ERR,     \/\/ Fehler beim init\r\n  MP3_MALLOC_ERR,   \/\/ nicht genug RAM frei\r\n  MP3_FILE_ERR,     \/\/ File Fehler\r\n  MP3_SYNC_ERR,     \/\/ kein Sync gefunden\r\n  MP3_FRQ_ERR,      \/\/ Fehler bei Samplefrq\r\n  MP3_FRAME_ERR,    \/\/ sonstiger Frame fehler\r\n  MP3_IDATA_ERR,    \/\/ INDATA_UNDERFLOW\r\n  MP3_MDATA_ERR,    \/\/ MAINDATA_UNDERFLOW\r\n  MP3_DECODE_ERR    \/\/ sonstige Dekoder fehler\r\n}MP3_ERR_t;<\/pre>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">ErrorStatus UB_CS43L22_InitMP3(void);                                  \/\/ init vom CS43L22\r\nMP3_ERR_t UB_CS43L22_PlayMP3Single(const char* name, uint8_t Volume);  \/\/ PLAY (einmal)\r\nMP3_ERR_t UB_CS43L22_PlayMP3Loop(const char* name, uint8_t Volume);    \/\/ PLAY (Endlos)\r\nCS43L22_STATUS_t UB_CS43L22_PlayMP3Do(void);                           \/\/ muss zyklisch aufgerufen werden\r\nvoid UB_CS43L22_PauseMP3(void);                                        \/\/ PAUSE\r\nvoid UB_CS43L22_ResumeMP3(void);                                       \/\/ WEITER (nach Pause)\r\nvoid UB_CS43L22_StopMP3(void);                                         \/\/ STOP\r\nvoid UB_CS43L22_SetVolumeMP3(uint8_t Volume);                          \/\/ zum einstellen der Lautst\u00e4rke\r\nMP3_ERR_t UB_CS43L22_GetMP3Err(void);                                  \/\/ zum auslesen der Fehlernummer<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 18.08.2013\r\n\/\/ Version  : 1.0\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F4\r\n\/\/ IDE      : CooCox CoIDE 1.7.0\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der MP3-Lib (per USB_MSC_Host und FATFS)\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/\r\n\/\/ Compiler Optimization auf -O3 einstellen !!\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_usb_msc_host.h\"\r\n#include \"stm32_ub_cs43l22_mp3_fatfs.h\"\r\n\r\nint main(void)\r\n{\r\n  uint8_t play_mode=0;\r\n\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  \/\/ Init vom USB-OTG-Port als MSC-HOST\r\n  \/\/ (zum lesen\/schreiben auf einen USB-Stick)\r\n  UB_USB_MSC_HOST_Init();\r\n\r\n  \/\/ Init vom CS43L22 (im MP3 Mode)\r\n  if(UB_CS43L22_InitMP3()==SUCCESS) {\r\n    play_mode=1; \/\/ init war ok\r\n  }\r\n\r\n  while(1)\r\n  {\r\n    \/\/ pollen vom USB-Status\r\n    if(UB_USB_MSC_HOST_Do()==USB_MSC_DEV_CONNECTED) {\r\n      \/\/ wenn USB-Stick erkannt wurde\r\n\r\n      \/\/ MP3-Funktion zum abspielen zyklisch aufrufen\r\n      UB_CS43L22_PlayMP3Do();\r\n\r\n      if(play_mode==1) {\r\n        \/\/ Media einmal mounten\r\n        if(UB_Fatfs_Mount(USB_0)==FATFS_OK) {\r\n          play_mode=2;\r\n          \/\/ abspielen vom MP3-File von USB in einer Endlosloop\r\n          UB_CS43L22_PlayMP3Loop(\"skinny.mp3\",70);\r\n        }\r\n      }\r\n    }\r\n    else {\r\n      \/\/ kein USB-Stick vorhanden\r\n      if(play_mode&gt;1) {\r\n        play_mode=1;\r\n        \/\/ Media unmounten\r\n        UB_Fatfs_UnMount(USB_0);\r\n      }\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/08\/ub_stm32f4_cs43l22_usb_mp3_v101.zip\">ub_stm32f4_cs43l22_usb_mp3_v101<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/08\/Demo_54_USB_MP3.zip\">Demo_54_USB_MP3<\/a><\/p>\n<p>Hier das MP3-File zum <strong>Download<\/strong> :<\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2014\/07\/skinny_mp3.zip\">skinny_mp3<\/a><\/p>\n<h3 id=\"comments-title\">10 Antworten auf <em>54-CS43L22_MP3_USB-Library (STM32F4)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-1375\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1375\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/e31a0c639ff49c8cf6a6ffb1bf6a0975?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Daniel<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">10. Februar 2014 um 19:17<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo!<br \/>\nMich w\u00fcrde interessieren, warum man f\u00fcr eine einwandfreie Funktion der Library die Code- Optimierung ben\u00f6tigt. Hat jemand eine Idee dazu?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1377\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1377\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">12. Februar 2014 um 19:53<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>ich vermute ohne die Optimierung dauert das laden der Daten vom Stick zu lange. So wie ich das noch in Erinnerung habe, l\u00e4uft die Version wo das MP3-File im Flash liegt auch ohne Optimierung.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1408\" class=\"comment even thread-odd thread-alt depth-1\">\n<div id=\"comment-1408\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/5242891b9d50f10cb42e74120921f7a9?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">J\u00fcrgen<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">19. Februar 2014 um 20:09<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Vielen Dank f\u00fcr die Ver\u00f6ffentlichung Deiner Arbeit\u2026<\/p>\n<p>Diese Demo funktioniert ja auch mit nur einer winzigen Parameteranpassung auf dem STM32F401C-Disco, wobei bei der Compilierung von O0-O3 alles ohne Aussetzer funktioniert, soweit ich das h\u00f6ren kann (mp3 mit 320kbit\/sec):<\/p>\n<p>in system_stm32f4xx.c(146) die Clocks auf 84Mhz verkleinern und bei der PLL darauf achten, dass USB-clock mit 48 Mhz ganzzahlig \u201certeilt\u201d werden kann\u2026<br \/>\n<code><br \/>\n\/* PLL_VCO = (HSE_VALUE or HSI_VALUE \/ PLL_M) * PLL_N *\/<br \/>\n#define PLL_M      4   \/\/ 8<br \/>\n#define PLL_N      168 \/\/ 336<\/code><\/p>\n<p>\/* SYSCLK = PLL_VCO \/ PLL_P *\/<br \/>\n#define PLL_P 4 \/\/ 2<\/p>\n<p>\/* USB OTG FS, SDIO and RNG Clock = PLL_VCO \/ PLLQ *\/<br \/>\n#define PLL_Q 7<\/p>\n<p>Gruss<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1409\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1409\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">20. Februar 2014 um 20:38<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Danke f\u00fcr den Hinweis.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1416\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1416\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/6c3f4380e68a10ff95fb8803fe79a558?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Marcel_u<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">25. Februar 2014 um 22:19<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Ich h\u00e4tte mal eine frage. Ist in dem Programm schon das auslesen des Namens oder der Aktuellen Position Implementieren? Ich W\u00fcrde die Daten n\u00e4mlich gerne auf einem LCD ausgeben. Wie bekomme ich Daten wie Titel und Position und gesamt l\u00e4nge?<\/p>\n<p>MfG<br \/>\nMarcel<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1420\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1420\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">26. Februar 2014 um 19:39<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>das Programm ist ein \u201cminimal\u201d Beispiel. F\u00fcr Name, Interpret usw m\u00fcsste man die ID3 Tags auswerten. Im Netz gibts da sicher Beispiele daf\u00fcr.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1580\" class=\"comment even thread-odd thread-alt depth-1\">\n<div id=\"comment-1580\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/6a05311dac7e89e956cf8d0429312cd0?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Mathias Tantau<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">22. April 2014 um 17:04<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Wenn zwischen den einzelnen Liedern die Funktion \u201cUB_USB_MSC_HOST_Do()\u201d aufgerufen wird, kommt es beim \u00d6ffnen des n\u00e4chsten Liedes zu einem Fehler. Die Funktion darf offensichtlich nur zu Anfang aufgerufen werden und nach dem ersten mounten nie mehr wieder, aber dann kann das Programm nicht auf ein Abstecken des USB-Sticks durch den Nutzer reagieren. Die Funktion \u201cUB_USB_MSC_HOST_Do()\u201d muss doch auch sp\u00e4ter noch immer wieder aufgerufen werden k\u00f6nnen, ohne dass es danach beim \u00d6ffnen einer Datei einen Fehler gibt.<\/p>\n<p>Kennt jemand das Problem \/ eine L\u00f6sung?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1582\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1582\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">22. April 2014 um 19:56<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>hier ist ein player bei dem das funktioniert :<br \/>\n<a href=\"indexb28e.html?page_id=2272\" rel=\"nofollow\">http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=2272<\/a><\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1591\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1591\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/6a05311dac7e89e956cf8d0429312cd0?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Mathias Tantau<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">25. April 2014 um 14:35<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Danke!<br \/>\nMit dem Beispiel und viel Experimentieren ist mir folgendes klar geworden:<br \/>\nDie Funktion USBH_Process() von STMicroelectronics muss periodisch aufgerufen werden. Aber nicht nach jedem Aufruf d\u00fcrfen Dateifunktionen wie f_write(), f_open(), \u2026 ausgef\u00fchrt werden. Nur wenn USBH_Process() die callback-Funktion USBH_USR_MSC_Application() aufruft, d\u00fcrfen danach die Dateifunktionen bis zum n\u00e4chsten Aufruf von USBH_Process() genutzt werden (oder direkt in der callback-Funktion). Wird das nicht ber\u00fccksichtigt, kommt es zu Fehlfunktionen, aber nicht unbedingt zu Fehlermeldungen, ganz gef\u00e4hrlich. Also unbedingt in USBH_USR_MSC_Application() irgendein flag setzen\u2026!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<li id=\"li-comment-3071\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<div id=\"comment-3071\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/eff769b438eac6e0315aac42fadad26d?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Felix<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">2. April 2015 um 10:50<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Danke f\u00fcr das Projekt!<br \/>\nIch h\u00e4tte eine Frage bez\u00fcglich der Sampleraten der mp3 Files. Der Dekoder kann ja auch mp3s mit 48kHz Samplerate abspielen. Welche \u00c4nderungen w\u00e4ren in den Librarys notwendig um das zu implementieren?<br \/>\nMfG<br \/>\nFelix<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Mit dieser Library kann der Audio-DAC (CS43L22) vom Discovery-Board benutzt werden um normale MP3-Files von einem USB-Stick abzuspielen. (es gibt auch noch eine andere Lib um MP3 aus dem Flash abzuspielen) Die MP3-Files m\u00fcssen mit einer Sampling-Frq von 44,1 kHz &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=438\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":54,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[193,9,201,7],"class_list":["post-438","page","type-page","status-publish","hentry","category-stm32f4","tag-cs43l22","tag-library","tag-mp3","tag-stm32f4"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/438","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=438"}],"version-history":[{"count":3,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/438\/revisions"}],"predecessor-version":[{"id":1593,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/438\/revisions\/1593"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=438"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=438"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}