sine_player.c 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /*
  2. * Copyright (C) 2014 BlueKitchen GmbH
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. *
  8. * 1. Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. * 2. Redistributions in binary form must reproduce the above copyright
  11. * notice, this list of conditions and the following disclaimer in the
  12. * documentation and/or other materials provided with the distribution.
  13. * 3. Neither the name of the copyright holders nor the names of
  14. * contributors may be used to endorse or promote products derived
  15. * from this software without specific prior written permission.
  16. * 4. Any redistribution, use, or modification is done solely for
  17. * personal benefit and not for any commercial purpose or for
  18. * monetary gain.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
  21. * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  22. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  23. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
  24. * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  25. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  26. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
  27. * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
  28. * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  29. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
  30. * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. * SUCH DAMAGE.
  32. *
  33. * Please inquire about commercial licensing options at
  34. * contact@bluekitchen-gmbh.com
  35. *
  36. */
  37. #define BTSTACK_FILE__ "sine_player.c"
  38. /*
  39. * Sine Playback to test and validate audio output with simple wave form
  40. *
  41. */
  42. #include "btstack.h"
  43. #define TABLE_SIZE_441HZ 100
  44. static int sine_phase;
  45. static const int16_t sine_int16[] = {
  46. 0, 2057, 4107, 6140, 8149, 10126, 12062, 13952, 15786, 17557,
  47. 19260, 20886, 22431, 23886, 25247, 26509, 27666, 28714, 29648, 30466,
  48. 31163, 31738, 32187, 32509, 32702, 32767, 32702, 32509, 32187, 31738,
  49. 31163, 30466, 29648, 28714, 27666, 26509, 25247, 23886, 22431, 20886,
  50. 19260, 17557, 15786, 13952, 12062, 10126, 8149, 6140, 4107, 2057,
  51. 0, -2057, -4107, -6140, -8149, -10126, -12062, -13952, -15786, -17557,
  52. -19260, -20886, -22431, -23886, -25247, -26509, -27666, -28714, -29648, -30466,
  53. -31163, -31738, -32187, -32509, -32702, -32767, -32702, -32509, -32187, -31738,
  54. -31163, -30466, -29648, -28714, -27666, -26509, -25247, -23886, -22431, -20886,
  55. -19260, -17557, -15786, -13952, -12062, -10126, -8149, -6140, -4107, -2057,
  56. };
  57. static void audio_playback(int16_t * pcm_buffer, uint16_t num_samples_to_write){
  58. int count;
  59. for (count = 0; count < num_samples_to_write ; count++){
  60. pcm_buffer[count * 2] = sine_int16[sine_phase];
  61. pcm_buffer[count * 2 + 1] = sine_int16[sine_phase];
  62. sine_phase++;
  63. if (sine_phase >= TABLE_SIZE_441HZ){
  64. sine_phase -= TABLE_SIZE_441HZ;
  65. }
  66. }
  67. }
  68. int btstack_main(int argc, const char * argv[]);
  69. int btstack_main(int argc, const char * argv[]){
  70. (void)argc;
  71. (void)argv;
  72. // setup audio playback
  73. const btstack_audio_sink_t * audio = btstack_audio_sink_get_instance();
  74. if (!audio){
  75. printf("BTstack Audio Sink not setup\n");
  76. return 10;
  77. }
  78. audio->init(2, 44100, &audio_playback);
  79. audio->start_stream();
  80. return 0;
  81. }