Sound Library
The mikroPascal 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 |
procedure Sound_Init(var snd_port, snd_pin: dword); |
|---|---|
| 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 |
procedure Sound_Play(freq_in_hz, duration_ms: word); |
|---|---|
| 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
program Sound;
procedure Tone1();
begin
Sound_Play(659, 250); // Frequency = 659Hz, duration = 250ms
end;
procedure Tone2();
begin
Sound_Play(698, 250); // Frequency = 698Hz, duration = 250ms
end;
procedure Tone3();
begin
Sound_Play(784, 250); // Frequency = 784Hz, duration = 250ms
end;
procedure Melody(); // Plays the melody "Yellow house"
begin
Tone1(); Tone2(); Tone3(); Tone3();
Tone1(); Tone2(); Tone3(); Tone3();
Tone1(); Tone2(); Tone3();
Tone1(); Tone2(); Tone3(); Tone3();
Tone1(); Tone2(); Tone3();
Tone3(); Tone3(); Tone2(); Tone2(); Tone1();
end;
procedure ToneA(); // Tones used in Melody2 function
begin
Sound_Play( 880, 50);
end;
procedure ToneC();
begin
Sound_Play(1046, 50);
end;
procedure ToneE();
begin
Sound_Play(1318, 50);
end;
procedure Melody2(); // Plays Melody2
var counter : byte;
begin
for counter := 9 downto 1 do
begin
ToneA();
ToneC();
ToneE();
end;
end;
begin
GPIO_Config(@GPIO_PORTJ_DATA, %11111000, _GPIO_DIR_INPUT, _GPIO_CFG_DIGITAL_ENABLE, 0);
Sound_Init(GPIO_PORTA_DATA, 6);
Sound_Play(880, 1000);
while TRUE do // endless loop
begin
if (Button(GPIO_PORTJ_DATA,7,1,1)) then // If GPIO_PORTJ.7 is pressed play Tone1
begin
Tone1();
while (GPIO_PORTJ_DATA7_bit <> 0) do nop; // Wait for button to be released
end;
if (Button(GPIO_PORTJ_DATA,6,1,1)) then // If GPIO_PORTJ.6 is pressed play Tone1
begin
Tone2();
while (GPIO_PORTJ_DATA6_bit <> 0) do nop; // Wait for button to be released
end;
if (Button(GPIO_PORTJ_DATA,5,1,1)) then // If GPIO_PORTJ.5 is pressed play Tone1
begin
Tone3();
while (GPIO_PORTJ_DATA5_bit <> 0) do nop; // Wait for button to be released
end;
if (Button(GPIO_PORTJ_DATA,4,1,1)) then // If GPIO_PORTJ.4 is pressed play Tone1
begin
Melody2();
while (GPIO_PORTJ_DATA4_bit <> 0) do nop; // Wait for button to be released
end;
if (Button(GPIO_PORTJ_DATA,3,1,1)) then // If GPIO_PORTJ.3 is pressed play Tone1
begin
Melody();
while (GPIO_PORTJ_DATA3_bit <> 0) do nop; // Wait for button to be released
end;
end;
end.
STM32
program Sound;
procedure Tone1();
begin
Sound_Play(659, 250); // Frequency = 659Hz, duration = 250ms
end;
procedure Tone2();
begin
Sound_Play(698, 250); // Frequency = 698Hz, duration = 250ms
end;
procedure Tone3();
begin
Sound_Play(784, 250); // Frequency = 784Hz, duration = 250ms
end;
procedure Melody(); // Plays the melody "Yellow house"
begin
Tone1(); Tone2(); Tone3(); Tone3();
Tone1(); Tone2(); Tone3(); Tone3();
Tone1(); Tone2(); Tone3();
Tone1(); Tone2(); Tone3(); Tone3();
Tone1(); Tone2(); Tone3();
Tone3(); Tone3(); Tone2(); Tone2(); Tone1();
end;
procedure ToneA(); // Tones used in Melody2 function
begin
Sound_Play( 880, 50);
end;
procedure ToneC();
begin
Sound_Play(1046, 50);
end;
procedure ToneE();
begin
Sound_Play(1318, 50);
end;
procedure Melody2(); // Plays Melody2
var counter : byte;
begin
for counter := 9 downto 1 do
begin
ToneA();
ToneC();
ToneE();
end;
end;
begin
GPIO_Digital_Input(@GPIOD_IDR, _GPIO_PINMASK_LOW);
Sound_Init(GPIOE_ODR, 14);
Sound_Play(880, 1000);
while TRUE do // endless loop
begin
if (Button(GPIOD_IDR,7,1,1)) then // If PORTB.7 is pressed play Tone1
begin
Tone1();
while (GPIOD_IDR.B7 <> 0) do nop; // Wait for button to be released
end;
if (Button(GPIOD_IDR,6,1,1)) then // If PORTB.6 is pressed play Tone1
begin
Tone2();
while (GPIOD_IDR.B6 <> 0) do nop; // Wait for button to be released
end;
if (Button(GPIOD_IDR,5,1,1)) then // If PORTB.5 is pressed play Tone1
begin
Tone3();
while (GPIOD_IDR.B5) do nop; // Wait for button to be released
end;
if (Button(GPIOD_IDR,4,1,1)) then // If PORTB.4 is pressed play Tone1
begin
Melody2();
while (GPIOD_IDR.B4 <> 0) do nop; // Wait for button to be released
end;
if (Button(GPIOD_IDR,3,1,1)) then // If PORTB.3 is pressed play Tone1
begin
Melody();
while (GPIOD_IDR.B3 <> 0) do nop; // Wait for button to be released
end;
end;
end.
What do you think about this topic ? Send us feedback!




