Ich befasse mich gerade mit dem Beispiel "streaming MP3 from HTTP" und der I2C-DAC-Emulation(Wemos D1 in der Arduino IDE), was im Prinzip auch funktioniert. Leider ertönen immer zu Beginn eines Streams zwei und am Ende ein lauter Knackton. Das sind keine Übertragungsstörungen, der eigentliche Sound ist - im Rahmen des Möglichen - rel. sauber. Das Soundfile wird jeweils über 3s ein- und ausgeblendet. Das Knacken muss mit der Initialisierung des RX-Pin als Ausgabepin zusammenhängen. Hat hier jemand so viel Durchblick um eine Idee zu äußern, wie man auch dei PWM soft ein- und ausblenden könnte? Die Funktion out->SetGain(x) zum Einstellen der Lautstärke funktioniert zwar, hat aber nur Einfluss auf den Stream, nicht auf die Knackser. Danke für Tips.
:
Bearbeitet durch User
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. Gruß aus Berlin Michael
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 | } |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.