]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | // SPDX-License-Identifier: GPL-2.0+ |
511ed5fd RS |
2 | /* |
3 | * Copyright (C) 2012 Samsung Electronics | |
4 | * R. Chandrasekar <[email protected]> | |
511ed5fd RS |
5 | */ |
6 | ||
511ed5fd | 7 | #include <common.h> |
f7ae49fc | 8 | #include <log.h> |
511ed5fd | 9 | #include <sound.h> |
511ed5fd | 10 | |
7d92b060 | 11 | void sound_create_square_wave(uint sample_rate, unsigned short *data, int size, |
f987177d | 12 | uint freq, uint channels) |
511ed5fd | 13 | { |
511ed5fd | 14 | const unsigned short amplitude = 16000; /* between 1 and 32767 */ |
7d92b060 | 15 | const int period = freq ? sample_rate / freq : 0; |
511ed5fd RS |
16 | const int half = period / 2; |
17 | ||
18 | assert(freq); | |
19 | ||
20 | /* Make sure we don't overflow our buffer */ | |
21 | if (size % 2) | |
22 | size--; | |
23 | ||
24 | while (size) { | |
f987177d SG |
25 | int i, j; |
26 | ||
511ed5fd RS |
27 | for (i = 0; size && i < half; i++) { |
28 | size -= 2; | |
f987177d SG |
29 | for (j = 0; j < channels; j++) |
30 | *data++ = amplitude; | |
511ed5fd RS |
31 | } |
32 | for (i = 0; size && i < period - half; i++) { | |
33 | size -= 2; | |
f987177d SG |
34 | for (j = 0; j < channels; j++) |
35 | *data++ = -amplitude; | |
511ed5fd RS |
36 | } |
37 | } | |
38 | } |