audioio.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. Sekai - addons for the WORLD speech toolkit
  3. Copyright (C) 2016 Tobias Platen
  4. This program is free software: you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation, either version 3 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. #include "sekai/audioio.h"
  16. #include <math.h>
  17. #include <sndfile.h>
  18. #include <stdint.h>
  19. #include <stdio.h>
  20. #include <string.h>
  21. double *wavReadMono(char *fileName, int *samplerate, int *length) {
  22. SF_INFO info;
  23. memset(&info, 0, sizeof(info));
  24. SNDFILE *sf = sf_open(fileName, SFM_READ, &info);
  25. *samplerate = info.samplerate;
  26. *length = info.frames;
  27. if (info.channels != 1) return NULL;
  28. fprintf(stderr, "reading.....\n");
  29. double *ret = new double[*length];
  30. sf_read_double(sf, ret, *length);
  31. sf_close(sf);
  32. return ret;
  33. }
  34. bool wavWriteMono(char *fileName, int samplerate, int length, double *samples) {
  35. SF_INFO info;
  36. memset(&info, 0, sizeof(info));
  37. info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
  38. info.samplerate = samplerate;
  39. info.channels = 1;
  40. SNDFILE *sf = sf_open(fileName, SFM_WRITE, &info);
  41. int count = sf_write_double(sf, samples, length);
  42. sf_close(sf);
  43. return count == length;
  44. }