Michael U. schrieb:
> Hallo,
>
> ich habe mich damit nicht befasst, bei mir hängt ein I2S-DAC dran.
>
> Wenn beim Streamstart die PWM gestartet wird geht der Pegelvon 0 auf den
> Mittelwert des Audiosignals, das wird knacken, beim Stop genauso.
> Es dürfte zumindest etwas Aufwand machen, beim Start der Ausgabe die PWM
> von nahe 0% (oder 100% falls es von H-Pehel am Pin ausgeht) auf den
> mittleren Ausgabepegel des Soundanfangs zu fahren oder zumindest auf
> 50%.
> Beim Abschalten passiert es ähnlich, da müßte man also auch zaubern.
>
> Mit einem I2S-DAC passiert das prinzipiell nicht, der will ein passendes
> Frame damit hinten was rauskommt.
Die Ursache denke ich mir auch so. Im Prinzip kann es aber kein so
großes Problem sein, beim Initialisieren der PWM in einem Loop von z.B.
200ms "soft" auf 50%& zu fahren.
Ich habe mir mal Debug-ausgaben mit jeweils einer Wartezeit von 2s in
den Code eingesetzt. Ich weiss nun, dass es jeweils an den markierten
Stellen knackt (s. Code).
Leider ist das Lib-Bundle ziemlich umfangreich und ich weiss nicht so
recht, wo anfangen.
1 | #include <Arduino.h>
|
2 | #include <ESP8266WiFi.h>
|
3 | #include "AudioFileSourceICYStream.h"
|
4 | #include "AudioFileSourceBuffer.h"
|
5 | #include "AudioGeneratorMP3.h"
|
6 | #include "AudioOutputI2SNoDAC.h"
|
7 |
|
8 | const char *SSID = "WNK-DIGITAL";
|
9 | const char *PASSWORD = "1248-WNK-1632";
|
10 | const char *URL= "http://192.168.200.8/mtest/audio.mp3";
|
11 |
|
12 | AudioGeneratorMP3 *mp3;
|
13 | AudioFileSourceICYStream *file;
|
14 | AudioFileSourceBuffer *buff;
|
15 | AudioOutputI2SNoDAC *out;
|
16 |
|
17 | void setup()
|
18 | {
|
19 | WiFi.disconnect();
|
20 | WiFi.softAPdisconnect(true);
|
21 | WiFi.mode(WIFI_STA);
|
22 | WiFi.begin(SSID, PASSWORD);
|
23 |
|
24 | while (WiFi.status() != WL_CONNECTED) {blinx(50);}
|
25 |
|
26 | file = new AudioFileSourceICYStream(URL);
|
27 | buff = new AudioFileSourceBuffer(file, 8192);
|
28 |
|
29 | out = new AudioOutputI2SNoDAC(); //<----------------- erster Knacks
|
30 |
|
31 | mp3 = new AudioGeneratorMP3();
|
32 | mp3->begin(buff, out); //<----------------- zweiter Knacks
|
33 | out->SetGain(3);
|
34 | }
|
35 |
|
36 | void loop()
|
37 | {
|
38 | if (mp3->isRunning())
|
39 | {
|
40 | if (!mp3->loop()){mp3->stop();} //<--------------- dritter Knacks
|
41 | }
|
42 | else{blinx(1000);}
|
43 | }
|
44 |
|
45 | void blinx(int t)
|
46 | {
|
47 | pinMode(LED_BUILTIN, OUTPUT);
|
48 | digitalWrite(LED_BUILTIN, LOW); delay(t);
|
49 | digitalWrite(LED_BUILTIN, HIGH); delay(t);
|
50 | }
|