Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

66 linhas
1.0KB

  1. #include "play_sd_raw.h"
  2. void AudioPlaySDcardRAW::begin(void)
  3. {
  4. playing = false;
  5. if (block) {
  6. release(block);
  7. block = NULL;
  8. }
  9. }
  10. bool AudioPlaySDcardRAW::play(const char *filename)
  11. {
  12. stop();
  13. rawfile = SD.open(filename);
  14. if (!rawfile) {
  15. Serial.println("unable to open file");
  16. return false;
  17. }
  18. Serial.println("able to open file");
  19. playing = true;
  20. return true;
  21. }
  22. void AudioPlaySDcardRAW::stop(void)
  23. {
  24. __disable_irq();
  25. if (playing) {
  26. playing = false;
  27. __enable_irq();
  28. rawfile.close();
  29. } else {
  30. __enable_irq();
  31. }
  32. }
  33. void AudioPlaySDcardRAW::update(void)
  34. {
  35. unsigned int i, n;
  36. // only update if we're playing
  37. if (!playing) return;
  38. // allocate the audio blocks to transmit
  39. block = allocate();
  40. if (block == NULL) return;
  41. if (rawfile.available()) {
  42. // we can read more data from the file...
  43. n = rawfile.read(block->data, AUDIO_BLOCK_SAMPLES*2);
  44. for (i=n/2; i < AUDIO_BLOCK_SAMPLES; i++) {
  45. block->data[i] = 0;
  46. }
  47. transmit(block);
  48. release(block);
  49. } else {
  50. rawfile.close();
  51. playing = false;
  52. }
  53. }