<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>A QT Py Christmas - Failed to play audio from external Flash memory</title><link>/challenges-projects/project14/holidayspecial20/b/blog/posts/a-qt-py-christmas---failed-to-play-audio-from-external-flash-memory</link><description>This will be my final post for the Holiday Special 20 project. I was able to accomplish much of what I had planned, but failed to get the Christmas music to play from the external flash memory on the QT Py. I&amp;#39;ll use this post to describe ...</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>RE: A QT Py Christmas - Failed to play audio from external Flash memory</title><link>https://community.element14.com/challenges-projects/project14/holidayspecial20/b/blog/posts/a-qt-py-christmas---failed-to-play-audio-from-external-flash-memory</link><pubDate>Tue, 04 May 2021 19:03:43 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:c87bb94a-059d-4f2c-a628-552df0ad4c71</guid><dc:creator>sobellinni</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;I tried for weeks to get any of the audio libraries for playing flash to work , so I finally wrote my own app &lt;br /&gt;&lt;br /&gt;this works &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;#include &amp;lt;Arduino.h&amp;gt;&lt;/p&gt;&lt;p&gt;#include &amp;lt;SPI.h&amp;gt;&lt;/p&gt;&lt;p&gt;#include &amp;quot;SdFat.h&amp;quot;&lt;/p&gt;&lt;p&gt;#include &amp;quot;Adafruit_SPIFlash.h&amp;quot;&lt;/p&gt;&lt;p&gt;#include &amp;quot;Adafruit_ZeroTimer.h&amp;quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;// Uncomment to run example with custom SPI and SS e.g with FRAM breakout&lt;/p&gt;&lt;p&gt;// #define CUSTOM_CS&amp;nbsp;&amp;nbsp; A5&lt;/p&gt;&lt;p&gt;// #define CUSTOM_SPI&amp;nbsp; SPI&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;#if defined(CUSTOM_CS) &amp;amp;&amp;amp; defined(CUSTOM_SPI)&lt;/p&gt;&lt;p&gt;&amp;nbsp; Adafruit_FlashTransport_SPI flashTransport(CUSTOM_CS, CUSTOM_SPI);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;#elif CONFIG_IDF_TARGET_ESP32S2&lt;/p&gt;&lt;p&gt;&amp;nbsp; // ESP32-S2 use same flash device that store code.&lt;/p&gt;&lt;p&gt;&amp;nbsp; // Therefore there is no need to specify the SPI and SS&lt;/p&gt;&lt;p&gt;&amp;nbsp; Adafruit_FlashTransport_ESP32 flashTransport;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;#else&lt;/p&gt;&lt;p&gt;&amp;nbsp; // On-board external flash (QSPI or SPI) macros should already&lt;/p&gt;&lt;p&gt;&amp;nbsp; // defined in your board variant if supported&lt;/p&gt;&lt;p&gt;&amp;nbsp; // - EXTERNAL_FLASH_USE_QSPI&lt;/p&gt;&lt;p&gt;&amp;nbsp; // - EXTERNAL_FLASH_USE_CS/EXTERNAL_FLASH_USE_SPI&lt;/p&gt;&lt;p&gt;&amp;nbsp; #if defined(EXTERNAL_FLASH_USE_QSPI)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Adafruit_FlashTransport_QSPI flashTransport;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; #elif defined(EXTERNAL_FLASH_USE_SPI)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Adafruit_FlashTransport_SPI flashTransport(EXTERNAL_FLASH_USE_CS, EXTERNAL_FLASH_USE_SPI);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; #else&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #error No QSPI/SPI flash are defined on your board variant.h !&lt;/p&gt;&lt;p&gt;&amp;nbsp; #endif&lt;/p&gt;&lt;p&gt;#endif&lt;/p&gt;&lt;p&gt;Adafruit_SPIFlash flash(&amp;amp;flashTransport);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;// file system object from SdFat&lt;/p&gt;&lt;p&gt;FatFileSystem fatfs;&lt;/p&gt;&lt;p&gt;File myFile;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;// This example can have just about any frequency for the callback&lt;/p&gt;&lt;p&gt;// automatically calculated!&lt;/p&gt;&lt;p&gt;float freq = 8000.0; // 8 KHz&lt;/p&gt;&lt;p&gt;int phase = 0;&lt;/p&gt;&lt;p&gt;int fnote&amp;nbsp; = 0;&lt;/p&gt;&lt;p&gt;int val =0;&lt;/p&gt;&lt;p&gt;int writebufcounter = 0;&lt;/p&gt;&lt;p&gt;int writebufpointer = 0;&lt;/p&gt;&lt;p&gt;int readbufcounter = 0;&lt;/p&gt;&lt;p&gt;int readbufpointer = 0;&lt;/p&gt;&lt;p&gt;byte bval=0;&lt;/p&gt;&lt;p&gt;byte fval=0;&lt;/p&gt;&lt;p&gt;byte soundbuffer[2][256];&lt;/p&gt;&lt;p&gt;bool bufferfull[2];&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;int soundbytes;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;int whichbuf =0;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;// timer tester&lt;/p&gt;&lt;p&gt;Adafruit_ZeroTimer zerotimer = Adafruit_ZeroTimer(3);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;void TC3_Handler() {&lt;/p&gt;&lt;p&gt;&amp;nbsp; Adafruit_ZeroTimer::timerHandler(3);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;// the timer callback&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;void TimerCallback0(void){&lt;/p&gt;&lt;p&gt;digitalWrite(9, LOW);&lt;/p&gt;&lt;p&gt;&amp;nbsp; //read buffer till all read and make it not full &lt;/p&gt;&lt;p&gt;if (bufferfull[readbufpointer]==true){&lt;/p&gt;&lt;p&gt;&amp;nbsp; bval = soundbuffer[readbufpointer][readbufcounter];&lt;/p&gt;&lt;p&gt;&amp;nbsp; readbufcounter++;&lt;/p&gt;&lt;p&gt;&amp;nbsp; if (readbufcounter&amp;gt;255){&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; bufferfull[readbufpointer] = false;&amp;nbsp; //enable file to write &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (readbufpointer==0)&amp;nbsp; digitalWrite(6, LOW); &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (readbufpointer==1)&amp;nbsp; digitalWrite(7, LOW); &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp; readbufcounter = 0;&lt;/p&gt;&lt;p&gt;&amp;nbsp; readbufpointer&amp;nbsp; = 1 &amp;amp; (readbufpointer ^1);&amp;nbsp; // point to the other buffer &lt;/p&gt;&lt;p&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; else { &lt;/p&gt;&lt;p&gt;&amp;nbsp; bval = 0x80; &lt;/p&gt;&lt;p&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; val = ((int)bval&amp;lt;&amp;lt;2)&amp;amp;0x3ff;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; analogWrite(0, val );&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; digitalWrite(9, HIGH);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;void play(const char *fname) {&lt;/p&gt;&lt;p&gt;bufferfull[0]=false;&lt;/p&gt;&lt;p&gt;bufferfull[1]=false;&amp;nbsp; &lt;/p&gt;&lt;p&gt;writebufpointer =0;&lt;/p&gt;&lt;p&gt;readbufpointer =0;&amp;nbsp; &lt;/p&gt;&lt;p&gt;digitalWrite(8, HIGH);&lt;/p&gt;&lt;p&gt;myFile = fatfs.open(fname);&lt;/p&gt;&lt;p&gt;if (myFile) {&lt;/p&gt;&lt;p&gt;Serial.println(fname);&lt;/p&gt;&lt;p&gt;Serial.println(myFile.size());&lt;/p&gt;&lt;p&gt;Serial.println(&amp;quot;b4readin&amp;quot;);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;for(int i =0; i&amp;lt;44; i++)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myFile.read();&amp;nbsp;&amp;nbsp; // eliminate header&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Serial.println(&amp;quot;counted44&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (soundbytes = myFile.available()) {&amp;nbsp; // find out how may bytes are still available &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bufferfull[writebufpointer]==false){&amp;nbsp;&amp;nbsp; //buffer available&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fval= myFile.read();&lt;/p&gt;&lt;p&gt;//Serial.write(fval);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; soundbuffer[writebufpointer][writebufcounter]&amp;nbsp; = fval;&amp;nbsp; // fill sound buffer&lt;/p&gt;&lt;p&gt;writebufcounter++;&lt;/p&gt;&lt;p&gt;if (writebufcounter&amp;gt;255){&lt;/p&gt;&lt;p&gt;&amp;nbsp; bufferfull[writebufpointer] = true;&amp;nbsp; //stop file to write &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (writebufpointer==0)&amp;nbsp; digitalWrite(6, HIGH); &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (writebufpointer==1)&amp;nbsp; digitalWrite(7, HIGH); &lt;/p&gt;&lt;p&gt;&amp;nbsp; writebufcounter = 0;&lt;/p&gt;&lt;p&gt;&amp;nbsp; writebufpointer&amp;nbsp; = 1 &amp;amp; (writebufpointer ^1);;&amp;nbsp; // point to the other buffer &lt;/p&gt;&lt;p&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt; // file is done reading, see if there is still a buffer to fill&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt; while (bufferfull[writebufpointer]=false){&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;soundbuffer[writebufpointer][writebufcounter]&amp;nbsp; = 0x80;&amp;nbsp; // fill sound buffer&amp;nbsp; with audio 0&lt;/p&gt;&lt;p&gt;writebufcounter++;&lt;/p&gt;&lt;p&gt;if (writebufcounter&amp;gt;255){&lt;/p&gt;&lt;p&gt;bufferfull[writebufpointer] = true;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (writebufpointer==0)&amp;nbsp; digitalWrite(6, HIGH); &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (writebufpointer==1)&amp;nbsp; digitalWrite(7, HIGH); &lt;/p&gt;&lt;p&gt;writebufcounter = 0;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;//DONE&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;digitalWrite(8, LOW);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;void setup() {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; // Open serial communications and wait for port to open:&lt;/p&gt;&lt;p&gt;&amp;nbsp; Serial.begin(115200);&lt;/p&gt;&lt;p&gt;&amp;nbsp; while (!Serial) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; delay(1); // wait for serial port to connect. Needed for native USB port only&lt;/p&gt;&lt;p&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Serial.print(&amp;quot;Initializing Filesystem on external flash...&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Init external flash&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flash.begin();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Open file system on the flash&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( !fatfs.begin(&amp;amp;flash) ) {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Serial.println(&amp;quot;Error: filesystem is not existed. Please try SdFat_format example to make one.&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1) yield();&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp; Serial.println(&amp;quot;initialization done.&amp;quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; pinMode(6, OUTPUT);&lt;/p&gt;&lt;p&gt;&amp;nbsp; pinMode(7, OUTPUT);&lt;/p&gt;&lt;p&gt;&amp;nbsp; pinMode(8, OUTPUT);&lt;/p&gt;&lt;p&gt;&amp;nbsp; pinMode(9, OUTPUT);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; tc_clock_prescaler prescaler = TC_CLOCK_PRESCALER_DIV1;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; zerotimer.enable(false);&lt;/p&gt;&lt;p&gt;&amp;nbsp; zerotimer.configure(prescaler,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // prescaler =1&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TC_COUNTER_SIZE_16BIT,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // bit width of timer/counter&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TC_WAVE_GENERATION_MATCH_PWM // frequency or PWM mode&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; zerotimer.setCompare(0, 1000);&amp;nbsp;&amp;nbsp; // 48000000/8000 = 6000&lt;/p&gt;&lt;p&gt;&amp;nbsp; zerotimer.setCallback(true, TC_CALLBACK_CC_CHANNEL0, TimerCallback0);&lt;/p&gt;&lt;p&gt;&amp;nbsp; zerotimer.enable(true);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;void loop() {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;play(&amp;quot;0.wav&amp;quot;);&lt;/p&gt;&lt;p&gt;delay(1000);&lt;/p&gt;&lt;p&gt;play(&amp;quot;1.wav&amp;quot;);&lt;/p&gt;&lt;p&gt;delay(1000);&lt;/p&gt;&lt;p&gt;play(&amp;quot;2.wav&amp;quot;);&lt;/p&gt;&lt;p&gt;delay(1000);&lt;/p&gt;&lt;p&gt;play(&amp;quot;3.wav&amp;quot;);&lt;/p&gt;&lt;p&gt;delay(1000);&lt;/p&gt;&lt;p&gt;play(&amp;quot;4.wav&amp;quot;);&lt;/p&gt;&lt;p&gt;delay(1000);&lt;/p&gt;&lt;p&gt;play(&amp;quot;5.wav&amp;quot;);&lt;/p&gt;&lt;p&gt;delay(1000);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=10639&amp;AppID=278&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: A QT Py Christmas - Failed to play audio from external Flash memory</title><link>https://community.element14.com/challenges-projects/project14/holidayspecial20/b/blog/posts/a-qt-py-christmas---failed-to-play-audio-from-external-flash-memory</link><pubDate>Mon, 04 Jan 2021 11:35:20 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:c87bb94a-059d-4f2c-a628-552df0ad4c71</guid><dc:creator>neilk</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Ralph, a really nice build; such a shame that you were defeated by stuff that hasn&amp;#39;t been updated correctly.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I&amp;#39;ve almost been caught by that recently, but managed to find a solution - which is still &amp;quot;officially&amp;quot; undocumented!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Neil&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=10639&amp;AppID=278&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: A QT Py Christmas - Failed to play audio from external Flash memory</title><link>https://community.element14.com/challenges-projects/project14/holidayspecial20/b/blog/posts/a-qt-py-christmas---failed-to-play-audio-from-external-flash-memory</link><pubDate>Mon, 04 Jan 2021 04:06:16 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:c87bb94a-059d-4f2c-a628-552df0ad4c71</guid><dc:creator>hugohu</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;quot;Failed&amp;quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Ah that sucks.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;But, nice project &lt;span&gt;[View:/resized-image/__size/16x16/__key/commentfiles/f7d226abd59f475c9d224a79e3f0ec07-c87bb94a-059d-4f2c-a628-552df0ad4c71/contentimage_5F00_2516.png:16:16]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;had fun reading your blogs.&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=10639&amp;AppID=278&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item></channel></rss>