<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[How to stop MP3 file from playing (pause &#x2F; rewind button)?]]></title><description><![CDATA[<p dir="auto">Hi,</p>
<p dir="auto">Can I ask a question?<br />
I want to make an m5stack program that would play an mp3 file if I send a trigger via UDP, and would stop if I send a different trigger via UDP.<br />
I followed some code from:<br />
<a href="http://forum.m5stack.com/topic/143/lesson-6-1-speaker-mp3-player/9" target="_blank" rel="noopener noreferrer nofollow ugc">http://forum.m5stack.com/topic/143/lesson-6-1-speaker-mp3-player/9</a></p>
<p dir="auto">But when I sent the trigger, the mp3 only played the first second (1s) and kept repeating the same time position. It wouldn't play the entire mp3 song.</p>
<p dir="auto">This is the code that I used:</p>
<hr />
<p dir="auto">#include &lt;M5Stack.h&gt;<br />
#include &lt;WiFi.h&gt;<br />
#include &lt;WiFiUdp.h&gt;<br />
#include "AudioFileSourceSD.h"<br />
#include "AudioFileSourceID3.h"<br />
#include "AudioGeneratorMP3.h"<br />
#include "AudioOutputI2S.h"<br />
#define N 1024</p>
<p dir="auto">bool playing = true;<br />
AudioGeneratorMP3 *mp3;<br />
AudioFileSourceSD *file;<br />
AudioOutputI2S *out;<br />
AudioFileSourceID3 *id3;</p>
<p dir="auto">const char* ssid = "wifiname";<br />
const char* password = "wifipassword";<br />
const int port = 5555;</p>
<p dir="auto">// The udp library class<br />
WiFiUDP udp;</p>
<p dir="auto">void print_wifi_state(){<br />
M5.Lcd.clear(BLACK);  // clear LCD<br />
M5.Lcd.setTextColor(YELLOW);<br />
M5.Lcd.setCursor(3, 3);<br />
M5.Lcd.println("");<br />
M5.Lcd.println("WiFi connected.");<br />
M5.Lcd.print("IP address: ");<br />
M5.Lcd.println(WiFi.localIP());<br />
M5.Lcd.print("Port: ");<br />
M5.Lcd.println(port);<br />
}</p>
<p dir="auto">void setup_wifi(){<br />
M5.Lcd.setTextColor(RED);<br />
M5.Lcd.setTextSize(2);<br />
M5.Lcd.setCursor(3, 10);<br />
M5.Lcd.print("Connecting to ");<br />
M5.Lcd.println(ssid);</p>
<p dir="auto">// setup wifi<br />
WiFi.mode(WIFI_STA);  // WIFI_AP, WIFI_STA, WIFI_AP_STA or WIFI_OFF<br />
WiFi.begin(ssid, password);<br />
// WiFi.begin();</p>
<p dir="auto">// Connecting ..<br />
while (WiFi.status() != WL_CONNECTED) {<br />
delay(100);<br />
M5.Lcd.print(".");<br />
}</p>
<p dir="auto">// print state<br />
print_wifi_state();</p>
<pre><code>udp.begin(port);
</code></pre>
<p dir="auto">}</p>
<p dir="auto">void setup() {<br />
M5.begin();<br />
M5.Speaker.setVolume(5);<br />
play('m');<br />
// setup wifi<br />
setup_wifi();</p>
<p dir="auto">}</p>
<p dir="auto">bool play(char dir){<br />
switch(dir)<br />
{<br />
case 'm':<br />
delete file;<br />
delete out;<br />
delete mp3;<br />
mp3 = NULL;<br />
file = NULL;<br />
out = NULL;<br />
file = new AudioFileSourceSD("/");<br />
id3 = new AudioFileSourceID3(file);<br />
out = new AudioOutputI2S(0, 1);<br />
out-&gt;SetOutputModeMono(true);<br />
mp3 = new AudioGeneratorMP3();<br />
mp3-&gt;begin(id3, out);<br />
playing = false;<br />
return true;<br />
default:<br />
if(playing){<br />
play('m');<br />
return true;<br />
}<br />
break;<br />
}<br />
mp3-&gt;stop();<br />
delete file;<br />
delete out;<br />
delete mp3;<br />
mp3 = NULL;<br />
file = NULL;<br />
out = NULL;<br />
file = new AudioFileSourceSD("/RainDrizzle.mp3");<br />
id3 = new AudioFileSourceID3(file);<br />
id3-&gt;seek(trackList-&gt;timePos, 1);<br />
out = new AudioOutputI2S(0, 1);<br />
out-&gt;SetOutputModeMono(true);<br />
mp3 = new AudioGeneratorMP3();<br />
mp3-&gt;begin(id3, out);<br />
playing = true;</p>
<p dir="auto">return true;<br />
}</p>
<p dir="auto">void loop() {<br />
char packetBuffer[N];<br />
int packetSize = udp.parsePacket();</p>
<p dir="auto">// get packet<br />
if (packetSize){</p>
<pre><code>int len = udp.read(packetBuffer, packetSize);

if (len &gt; 0){
  packetBuffer[len] = '\0'; // end
}
</code></pre>
<p dir="auto">}</p>
<pre><code>if(strcmp(packetBuffer,"start")==0){
// print param
M5.Lcd.clear(BLACK);
M5.Lcd.setCursor(3, 3);
M5.Lcd.setTextColor(GREEN);
M5.Lcd.println(packetBuffer);

play('t');

}

if(strcmp(packetBuffer,"stop")==0){
M5.Lcd.clear(BLACK);
M5.Lcd.setCursor(3, 3);
M5.Lcd.setTextColor(GREEN);
M5.Lcd.println(packetBuffer);
play('m');
}

if(playing){
  if(mp3-&gt;isRunning()){
    if(!mp3-&gt;loop()){
      mp3-&gt;stop();
      playing = false;
    }
  }
  else{
    delay(1000);
  }
</code></pre>
<p dir="auto">}<br />
M5.update();<br />
}</p>
<hr />
<p dir="auto">Please advise if anything's wrong in the code.</p>
<p dir="auto">Thank you in advance.</p>
]]></description><link>https://community.m5stack.com/topic/1494/how-to-stop-mp3-file-from-playing-pause-rewind-button</link><generator>RSS for Node</generator><lastBuildDate>Sun, 03 May 2026 18:43:12 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/1494.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Nov 2019 01:35:08 GMT</pubDate><ttl>60</ttl></channel></rss>