DISCO-F746NGのAudioOutから正弦波を出力するプログラムです。 This program outputs sine wave from AudioOut on DISCO-F746NG.
Dependencies: BSP_DISCO_F746NG_patch_fixed mbed
main.cpp@0:1d5b62d757e2, 2015-12-25 (annotated)
- Committer:
- nanase
- Date:
- Fri Dec 25 17:55:24 2015 +0000
- Revision:
- 0:1d5b62d757e2
First commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nanase | 0:1d5b62d757e2 | 1 | #include "mbed.h" |
nanase | 0:1d5b62d757e2 | 2 | #include "stm32746g_discovery_audio.h" |
nanase | 0:1d5b62d757e2 | 3 | |
nanase | 0:1d5b62d757e2 | 4 | #define PI ((double)3.1415926535897932384626433832795028) |
nanase | 0:1d5b62d757e2 | 5 | #define SamplingFreq I2S_AUDIOFREQ_16K |
nanase | 0:1d5b62d757e2 | 6 | #define BufferSize (SamplingFreq * DEFAULT_AUDIO_IN_CHANNEL_NBR) |
nanase | 0:1d5b62d757e2 | 7 | |
nanase | 0:1d5b62d757e2 | 8 | #define AudioVolume ((uint8_t)8) |
nanase | 0:1d5b62d757e2 | 9 | #define Amplifier ((double)0.25) |
nanase | 0:1d5b62d757e2 | 10 | #define SineFreq ((double)440.0) |
nanase | 0:1d5b62d757e2 | 11 | |
nanase | 0:1d5b62d757e2 | 12 | /* 注意: |
nanase | 0:1d5b62d757e2 | 13 | * AudioVolume で AudioOut のボリュームが設定できるはずだが、 |
nanase | 0:1d5b62d757e2 | 14 | * 現時点のライブラリだと、たとえば 0 だと大音量で再生される。 |
nanase | 0:1d5b62d757e2 | 15 | */ |
nanase | 0:1d5b62d757e2 | 16 | |
nanase | 0:1d5b62d757e2 | 17 | DigitalOut led1(LED1); |
nanase | 0:1d5b62d757e2 | 18 | int16_t buffer[BufferSize]; |
nanase | 0:1d5b62d757e2 | 19 | |
nanase | 0:1d5b62d757e2 | 20 | void error_trap() |
nanase | 0:1d5b62d757e2 | 21 | { |
nanase | 0:1d5b62d757e2 | 22 | while(1) { |
nanase | 0:1d5b62d757e2 | 23 | led1 = !led1; |
nanase | 0:1d5b62d757e2 | 24 | wait_ms(250); |
nanase | 0:1d5b62d757e2 | 25 | } |
nanase | 0:1d5b62d757e2 | 26 | } |
nanase | 0:1d5b62d757e2 | 27 | |
nanase | 0:1d5b62d757e2 | 28 | void init_audio() |
nanase | 0:1d5b62d757e2 | 29 | { |
nanase | 0:1d5b62d757e2 | 30 | if (BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_BOTH, AudioVolume, SamplingFreq) == AUDIO_ERROR) |
nanase | 0:1d5b62d757e2 | 31 | error_trap(); |
nanase | 0:1d5b62d757e2 | 32 | |
nanase | 0:1d5b62d757e2 | 33 | BSP_AUDIO_OUT_SetAudioFrameSlot(CODEC_AUDIOFRAME_SLOT_02); |
nanase | 0:1d5b62d757e2 | 34 | } |
nanase | 0:1d5b62d757e2 | 35 | |
nanase | 0:1d5b62d757e2 | 36 | void play_audio() |
nanase | 0:1d5b62d757e2 | 37 | { |
nanase | 0:1d5b62d757e2 | 38 | /* Generate sine wave */ |
nanase | 0:1d5b62d757e2 | 39 | for (int i = 0; i < SamplingFreq; i++) { |
nanase | 0:1d5b62d757e2 | 40 | buffer[i * 2 + 1] = |
nanase | 0:1d5b62d757e2 | 41 | buffer[i * 2 + 0] = |
nanase | 0:1d5b62d757e2 | 42 | (int16_t)(Amplifier * sin(2.0 * PI * SineFreq * i / SamplingFreq) * 32767.5); |
nanase | 0:1d5b62d757e2 | 43 | } |
nanase | 0:1d5b62d757e2 | 44 | |
nanase | 0:1d5b62d757e2 | 45 | if (BSP_AUDIO_OUT_Play((uint16_t*)&buffer, BufferSize * AUDIODATA_SIZE) == AUDIO_ERROR) |
nanase | 0:1d5b62d757e2 | 46 | error_trap(); |
nanase | 0:1d5b62d757e2 | 47 | } |
nanase | 0:1d5b62d757e2 | 48 | |
nanase | 0:1d5b62d757e2 | 49 | int main() |
nanase | 0:1d5b62d757e2 | 50 | { |
nanase | 0:1d5b62d757e2 | 51 | init_audio(); |
nanase | 0:1d5b62d757e2 | 52 | play_audio(); |
nanase | 0:1d5b62d757e2 | 53 | |
nanase | 0:1d5b62d757e2 | 54 | while(1) |
nanase | 0:1d5b62d757e2 | 55 | wait(1); |
nanase | 0:1d5b62d757e2 | 56 | } |