Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

83 lines
2.1KB

  1. /* Adaptation of Stereo peak meter example, including RMS.
  2. assumes Audio adapter but just uses terminal so no more parts required.
  3. This example code is in the public domain
  4. */
  5. #include <Audio.h>
  6. #include <Wire.h>
  7. #include <SPI.h>
  8. #include <SD.h>
  9. #include <SerialFlash.h>
  10. const int myInput = AUDIO_INPUT_LINEIN;
  11. // const int myInput = AUDIO_INPUT_MIC;
  12. AudioInputI2S audioInput; // audio shield: mic or line-in
  13. AudioAnalyzePeak peak_L;
  14. AudioAnalyzePeak peak_R;
  15. AudioAnalyzeRMS rms_L;
  16. AudioAnalyzeRMS rms_R;
  17. AudioOutputI2S audioOutput; // audio shield: headphones & line-out
  18. AudioConnection c1(audioInput, 0, peak_L, 0);
  19. AudioConnection c2(audioInput, 1, peak_R, 0);
  20. AudioConnection c3(audioInput, 0, rms_L, 0);
  21. AudioConnection c4(audioInput, 1, rms_R, 0);
  22. AudioConnection c5(audioInput, 0, audioOutput, 0);
  23. AudioConnection c6(audioInput, 1, audioOutput, 1);
  24. AudioControlSGTL5000 audioShield;
  25. void setup() {
  26. AudioMemory(6);
  27. audioShield.enable();
  28. audioShield.inputSelect(myInput);
  29. audioShield.volume(0.5);
  30. Serial.begin(9600);
  31. }
  32. // for best effect make your terminal/monitor a minimum of 62 chars wide and as high as you can.
  33. elapsedMillis fps;
  34. uint8_t cnt=0;
  35. void loop() {
  36. if(fps > 24) {
  37. if (peak_L.available() && peak_R.available() && rms_L.available() && rms_R.available()) {
  38. fps=0;
  39. uint8_t leftPeak = peak_L.read() * 30.0;
  40. uint8_t rightPeak = peak_R.read() * 30.0;
  41. uint8_t leftRMS = rms_L.read() * 30.0;
  42. uint8_t rightRMS = rms_R.read() * 30.0;
  43. for (cnt=0; cnt < 30-leftPeak; cnt++) {
  44. Serial.print(" ");
  45. }
  46. while (cnt++ < 29 && cnt < 30-leftRMS) {
  47. Serial.print("<");
  48. }
  49. while (cnt++ < 30) {
  50. Serial.print("=");
  51. }
  52. Serial.print("||");
  53. for(cnt=0; cnt < rightRMS; cnt++) {
  54. Serial.print("=");
  55. }
  56. for(; cnt < rightPeak; cnt++) {
  57. Serial.print(">");
  58. }
  59. while(cnt++ < 30) {
  60. Serial.print(" ");
  61. }
  62. Serial.print(AudioProcessorUsage());
  63. Serial.print("/");
  64. Serial.print(AudioProcessorUsageMax());
  65. Serial.println();
  66. }
  67. }
  68. }