簡體   English   中英

如何在STM32中播放PCM音頻時消除背景噪音?

[英]How to cancel background noise while playing PCM Audio in STM32?

我正在嘗試從 STM32(blackpill_f411ce)中的 PCM 數據播放音頻。 我可以聽到音頻,但音頻也伴隨着陡峭的噪音。 我正在使用 Audrino 的框架在 PlatformIO 中工作。 PCM 數據在代碼中定義為無符號字符數組,如下所示

unsigned char sample[98216] = {0x52, 0x49, 0x46, 0x46, 0xA0,......}

我的代碼如下

#include<Arduino.h>
#include <SoundData.h>

#define OUT_PIN_STM_32 PA8
int SineValues[256];    

void InitSineValues()
{
    float ConversionFactor=(2.0*3.142)/256.0;                                           
    float RadAngle;                                     
    for(int MyAngle=0;MyAngle<256;MyAngle++)
   {
        RadAngle=MyAngle*ConversionFactor;              
        SineValues[MyAngle]=(sin(RadAngle)*127)+128;                                            
    }
}

void playPcmData()
{
  for (size_t i = 0; i < 98216; i++)
  {
    int val=int(sample[i]);
    analogWrite(OUT_PIN_STM_32,SineValues[val]);
    delayMicroseconds(50);

  }
  
}
void setup() {
  InitSineValues();
  
}
void loop() {
  playPcmData();
  delay(5000);
}

我在 ESP32 中使用了與 dacWrite 相同的代碼,它運行良好。

在設置中,我添加了analogWriteFrequency(200000)並解決了問題

void setup() {
  analogWriteFrequency(200000);
}

而且也不需要輸入正弦值

void playPcmData()
{
  for (size_t i = 0; i < 98216; i++)
  {
    int val=int(sample[i]);
    analogWrite(OUT_PIN_STM_32,val);
    delayMicroseconds(50);

  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM