LPCXpresso 4337 + UMB-AUAD1361A を使用したオーディオ・サンプル。
Dependencies: mbed shimabara unzen_lpcxpresso_4337
main.cpp@0:dd5efda2d8eb, 2016-06-11 (annotated)
- Committer:
- shorie
- Date:
- Sat Jun 11 05:22:50 2016 +0000
- Revision:
- 0:dd5efda2d8eb
????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shorie | 0:dd5efda2d8eb | 1 | #include "unzen.h" // audio framework include file |
shorie | 0:dd5efda2d8eb | 2 | #include "umb_adau1361a.h" // audio codec contoler include file |
shorie | 0:dd5efda2d8eb | 3 | #include "mbed.h" |
shorie | 0:dd5efda2d8eb | 4 | |
shorie | 0:dd5efda2d8eb | 5 | #define CODEC_I2C_ADDR 0x38 |
shorie | 0:dd5efda2d8eb | 6 | |
shorie | 0:dd5efda2d8eb | 7 | DigitalOut myled1(LED1); |
shorie | 0:dd5efda2d8eb | 8 | |
shorie | 0:dd5efda2d8eb | 9 | |
shorie | 0:dd5efda2d8eb | 10 | // customer signal processing initialization call back. |
shorie | 0:dd5efda2d8eb | 11 | void init_callback( |
shorie | 0:dd5efda2d8eb | 12 | unsigned int block_size // block size [sample] |
shorie | 0:dd5efda2d8eb | 13 | ) |
shorie | 0:dd5efda2d8eb | 14 | { |
shorie | 0:dd5efda2d8eb | 15 | // place initialization code here |
shorie | 0:dd5efda2d8eb | 16 | } |
shorie | 0:dd5efda2d8eb | 17 | |
shorie | 0:dd5efda2d8eb | 18 | |
shorie | 0:dd5efda2d8eb | 19 | // customer signal processing call back. |
shorie | 0:dd5efda2d8eb | 20 | void process_callback( |
shorie | 0:dd5efda2d8eb | 21 | float rx_left_buffer[], // array of the left input samples |
shorie | 0:dd5efda2d8eb | 22 | float rx_right_buffer[], // array of the right input samples |
shorie | 0:dd5efda2d8eb | 23 | float tx_left_buffer[], // place to write the left output samples |
shorie | 0:dd5efda2d8eb | 24 | float tx_right_buffer[], // place to write the left output samples |
shorie | 0:dd5efda2d8eb | 25 | unsigned int block_size // block size [sample] |
shorie | 0:dd5efda2d8eb | 26 | ) |
shorie | 0:dd5efda2d8eb | 27 | { |
shorie | 0:dd5efda2d8eb | 28 | // Sample processing |
shorie | 0:dd5efda2d8eb | 29 | for ( int i=0; i<block_size; i++) // for all sample |
shorie | 0:dd5efda2d8eb | 30 | { |
shorie | 0:dd5efda2d8eb | 31 | tx_left_buffer[i] = rx_left_buffer[i]; // copy from input to output |
shorie | 0:dd5efda2d8eb | 32 | tx_right_buffer[i] = rx_right_buffer[i]; |
shorie | 0:dd5efda2d8eb | 33 | |
shorie | 0:dd5efda2d8eb | 34 | } |
shorie | 0:dd5efda2d8eb | 35 | } |
shorie | 0:dd5efda2d8eb | 36 | |
shorie | 0:dd5efda2d8eb | 37 | |
shorie | 0:dd5efda2d8eb | 38 | |
shorie | 0:dd5efda2d8eb | 39 | int main() |
shorie | 0:dd5efda2d8eb | 40 | { |
shorie | 0:dd5efda2d8eb | 41 | // I2C is essential to talk with ADAU1361 |
shorie | 0:dd5efda2d8eb | 42 | I2C i2c(SDA, SCL); |
shorie | 0:dd5efda2d8eb | 43 | |
shorie | 0:dd5efda2d8eb | 44 | // create an audio codec contoler |
shorie | 0:dd5efda2d8eb | 45 | shimabara::UMB_ADAU1361A codec(shimabara::Fs_32, i2c, CODEC_I2C_ADDR ); // Default Fs is 48kHz |
shorie | 0:dd5efda2d8eb | 46 | // shimabara::UMB_ADAU1361A codec(shimabara::Fs_441, i2c, CODEC_I2C_ADDR ); |
shorie | 0:dd5efda2d8eb | 47 | // shimabara::UMB_ADAU1361A codec(shimabara::Fs_48, i2c, CODEC_I2C_ADDR ); |
shorie | 0:dd5efda2d8eb | 48 | // shimabara::UMB_ADAU1361A codec(shimabara::Fs_96, i2c, CODEC_I2C_ADDR ); |
shorie | 0:dd5efda2d8eb | 49 | |
shorie | 0:dd5efda2d8eb | 50 | // create an audio framework by singlton pattern |
shorie | 0:dd5efda2d8eb | 51 | unzen::Framework audio; |
shorie | 0:dd5efda2d8eb | 52 | |
shorie | 0:dd5efda2d8eb | 53 | // Set I3C clock to 100kHz |
shorie | 0:dd5efda2d8eb | 54 | i2c.frequency( 100000 ); |
shorie | 0:dd5efda2d8eb | 55 | |
shorie | 0:dd5efda2d8eb | 56 | |
shorie | 0:dd5efda2d8eb | 57 | // Configure the optional block size of signal processing. By default, it is 1[Sample] |
shorie | 0:dd5efda2d8eb | 58 | // audio.set_block_size(16); |
shorie | 0:dd5efda2d8eb | 59 | |
shorie | 0:dd5efda2d8eb | 60 | |
shorie | 0:dd5efda2d8eb | 61 | // Start the ADAU1361. Audio codec starts to generate the I2C signals |
shorie | 0:dd5efda2d8eb | 62 | codec.start(); |
shorie | 0:dd5efda2d8eb | 63 | |
shorie | 0:dd5efda2d8eb | 64 | // Start the audio framework on ARM processor. |
shorie | 0:dd5efda2d8eb | 65 | audio.start( init_callback, process_callback); // path the initializaiton and process call back to framework |
shorie | 0:dd5efda2d8eb | 66 | |
shorie | 0:dd5efda2d8eb | 67 | |
shorie | 0:dd5efda2d8eb | 68 | // periodically changing gain for test |
shorie | 0:dd5efda2d8eb | 69 | while(1) |
shorie | 0:dd5efda2d8eb | 70 | { |
shorie | 0:dd5efda2d8eb | 71 | for ( int i=-15; i<4; i++ ) |
shorie | 0:dd5efda2d8eb | 72 | { |
shorie | 0:dd5efda2d8eb | 73 | codec.set_hp_output_gain( i, i ); |
shorie | 0:dd5efda2d8eb | 74 | codec.set_line_output_gain( i, i ); |
shorie | 0:dd5efda2d8eb | 75 | myled1 = 1; |
shorie | 0:dd5efda2d8eb | 76 | wait(0.2); |
shorie | 0:dd5efda2d8eb | 77 | myled1 = 0; |
shorie | 0:dd5efda2d8eb | 78 | wait(0.2); |
shorie | 0:dd5efda2d8eb | 79 | } |
shorie | 0:dd5efda2d8eb | 80 | } |
shorie | 0:dd5efda2d8eb | 81 | } |