wav.c 1007 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include <finsh.h>
  2. #include <dfs_posix.h>
  3. #include "netbuffer.h"
  4. #include "stm32f10x.h"
  5. static rt_err_t wav_tx_done(rt_device_t dev, void *buffer)
  6. {
  7. /* release memory block */
  8. sbuf_release(buffer);
  9. return RT_EOK;
  10. }
  11. void wav(char* filename)
  12. {
  13. int fd;
  14. rt_size_t block_size;
  15. block_size = sbuf_get_size();
  16. block_size = (block_size / 512) * 512;
  17. fd = open(filename, O_RDONLY, 0);
  18. if (fd >= 0)
  19. {
  20. rt_uint8_t* buf;
  21. rt_size_t len;
  22. rt_device_t device;
  23. /* open audio device and set tx done call back */
  24. device = rt_device_find("snd");
  25. rt_device_set_tx_complete(device, wav_tx_done);
  26. rt_device_open(device, RT_DEVICE_OFLAG_WRONLY);
  27. do
  28. {
  29. buf = sbuf_alloc();
  30. len = read(fd, (char*)buf, block_size);
  31. if (len > 0) rt_device_write(device, 0, buf, len);
  32. else sbuf_release(buf);
  33. } while (len != 0);
  34. /* close device and file */
  35. rt_device_close(device);
  36. close(fd);
  37. }
  38. }
  39. FINSH_FUNCTION_EXPORT(wav, wav test)