Sound Library
The mikroC PRO for ARM provides a Sound Library to supply users with routines necessary for sound signalization in their applications. Sound generation needs additional hardware, such as piezo-speaker (example of piezo-speaker interface is given on the schematic at the bottom of this page).
Library Routines
Sound_Init
Prototype |
void Sound_Init(unsigned long *snd_port, unsigned long snd_pin); |
---|---|
Description |
Configures the appropriate MCU pin for sound generation. |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
Stellaris// Initialize the pin GPIO_PORTA.6 for playing sound Sound_Init(&GPIO_PORTA_DATA, 6); STM32// Initialize the pin GPIOE_ODR.14 for playing sound Sound_Init(&GPIOE_ODR, 14); |
Notes |
None. |
Sound_Play
Prototype |
void Sound_Play(unsigned int freq_in_hz, unsigned< int/b> duration_ms); |
---|---|
Description |
Generates the square wave signal on the appropriate pin. |
Parameters |
|
Returns |
Nothing. |
Requires |
In order to hear the sound, you need a piezo speaker (or other hardware) on designated port. Also, you must call Sound_Init to prepare hardware for output before using this function. |
Example |
// Play sound of 1KHz in duration of 100ms Sound_Play(1000, 100); |
Notes |
None. |
Library Example
The example is a simple demonstration of how to use the Sound Library for playing tones on a piezo speaker.
Stellaris
void Tone1() { Sound_Play(659, 250); // Frequency = 659Hz, duration = 250ms } void Tone2() { Sound_Play(698, 250); // Frequency = 698Hz, duration = 250ms } void Tone3() { Sound_Play(784, 250); // Frequency = 784Hz, duration = 250ms } void Melody() { // Plays the melody "Yellow house" Tone1(); Tone2(); Tone3(); Tone3(); Tone1(); Tone2(); Tone3(); Tone3(); Tone1(); Tone2(); Tone3(); Tone1(); Tone2(); Tone3(); Tone3(); Tone1(); Tone2(); Tone3(); Tone3(); Tone3(); Tone2(); Tone2(); Tone1(); } void ToneA() { Sound_Play( 880, 50); } void ToneC() { Sound_Play(1046, 50); } void ToneE() { Sound_Play(1318, 50); } void Melody2() { unsigned short i; for (i = 9; i > 0; i--) { ToneA(); ToneC(); ToneE(); } } void main() { GPIO_Config(&GPIO_PORTJ_DATA, 0b11111000, _GPIO_DIR_INPUT, _GPIO_CFG_DIGITAL_ENABLE, 0); Sound_Init(&GPIO_PORTA_DATA, 6); Sound_Play(880, 1000); // Play sound at 880Hz for 1 second while (1) { if (Button(&GPIO_PORTJ_DATA,7,1,1)) // GPIO_PORTJ.B7 plays Tone1 Tone1(); while (GPIO_PORTJ_DATA7_bit); // Wait for button to be released if (Button(&GPIO_PORTJ_DATA,6,1,1)) // GPIO_PORTJ.B6 plays Tone2 Tone2(); while (GPIO_PORTJ_DATA6_bit); // Wait for button to be released if (Button(&GPIO_PORTJ_DATA,5,1,1)) // GPIO_PORTJ.B5 plays Tone3 Tone3(); while (GPIO_PORTJ_DATA5_bit); // Wait for button to be released if (Button(&GPIO_PORTJ_DATA,4,1,1)) // GPIO_PORTJ.B4 plays Melody2 Melody2(); while (GPIO_PORTJ_DATA4_bit); // Wait for button to be released if (Button(&GPIO_PORTJ_DATA,3,1,1)) // GPIO_PORTJ.B3 plays Melody Melody(); while (GPIO_PORTJ_DATA3_bit); // Wait for button to be released } }
STM32
void Tone1() { Sound_Play(659, 250); // Frequency = 659Hz, duration = 250ms } void Tone2() { Sound_Play(698, 250); // Frequency = 698Hz, duration = 250ms } void Tone3() { Sound_Play(784, 250); // Frequency = 784Hz, duration = 250ms } void Melody() { // Plays the melody "Yellow house" Tone1(); Tone2(); Tone3(); Tone3(); Tone1(); Tone2(); Tone3(); Tone3(); Tone1(); Tone2(); Tone3(); Tone1(); Tone2(); Tone3(); Tone3(); Tone1(); Tone2(); Tone3(); Tone3(); Tone3(); Tone2(); Tone2(); Tone1(); } void ToneA() { Sound_Play( 880, 50); } void ToneC() { Sound_Play(1046, 50); } void ToneE() { Sound_Play(1318, 50); } void Melody2() { unsigned short i; for (i = 9; i > 0; i--) { ToneA(); ToneC(); ToneE(); } } void main() { GPIO_Digital_Input(&GPIOD_IDR, _GPIO_PINMASK_LOW); Sound_Init(&GPIOE_ODR, 14); Sound_Play(880, 1000); // Play sound at 880Hz for 1 second while (1) { if (Button(&GPIOD_IDR,7,1,1)) // RB7 plays Tone1 Tone1(); while (GPIOD_IDR.B7); // Wait for button to be released if (Button(&GPIOD_IDR,6,1,1)) // RB6 plays Tone2 Tone2(); while (GPIOD_IDR.B6); // Wait for button to be released if (Button(&GPIOD_IDR,5,1,1)) // RB5 plays Tone3 Tone3(); while (GPIOD_IDR.B5); // Wait for button to be released if (Button(&GPIOD_IDR,4,1,1)) // RB4 plays Melody2 Melody2(); while (GPIOD_IDR.B4); // Wait for button to be released if (Button(&GPIOD_IDR,3,1,1)) // RB3 plays Melody Melody(); while (GPIOD_IDR.B3); // Wait for button to be released } }
What do you think about this topic ? Send us feedback!