Install sdl2 on your linux machine. These can work on ubuntu :
sudo apt-get install libsdl2-2.0-0
sudo apt-get install libsdl2-dev
#include <SDL.h>
#include <stdio.h>
#define FREQ 440 /* the frequency we want */
unsigned int audio_pos; /* which sample we are up to */
int audio_len; /* how many samples left to play, stops when <= 0 */
float audio_frequency; /* audio frequency in cycles per sample */
float audio_volume; /* audio volume, 0 - ~32000 */
/* dummy callback */
void MyAudioCallback(void *data, Uint8 *stream, int len)
{
len /= 2; /* 16 bit */
int i;
Sint16 *buf = (Sint16 *)stream;
for (i = 0; i < len; i++)
{
buf[i] = audio_volume * sin(2 * M_PI * audio_pos * audio_frequency);
audio_pos++;
}
audio_len -= len;
return;
}
int main()
{
printf("hi");
int i;
if (SDL_Init(SDL_INIT_AUDIO))
{
printf("[SDL] Failed to initialize: %s\n", SDL_GetError());
return 1;
}
/* print the audio driver we are using */
printf("[SDL] Audio driver: %s\n", SDL_GetCurrentAudioDriver());
/* pass it 0 for playback */
int numAudioDevices = SDL_GetNumAudioDevices(0);
/* print the audio devices that we can see */
printf("[SDL] %d audio devices:", numAudioDevices);
for (i = 0; i < numAudioDevices; i++)
printf(" \'%s\'", SDL_GetAudioDeviceName(i, 0)); /* again, 0 for playback */
printf("\n");
SDL_AudioSpec want, have;
SDL_zero(want);
/* a general specification */
want.freq = 44100;
want.format = AUDIO_S16;
want.channels = 1; /* 1, 2, 4, or 6 */
want.samples = 4096; /* power of 2, or 0 and env SDL_AUDIO_SAMPLES is used */
want.callback = MyAudioCallback; /* can not be NULL */
printf("[SDL] Desired - frequency: %d format: f %d s %d be %d sz %d channels: %d samples: %d\n", want.freq, SDL_AUDIO_ISFLOAT(want.format), SDL_AUDIO_ISSIGNED(want.format), SDL_AUDIO_ISBIGENDIAN(want.format), SDL_AUDIO_BITSIZE(want.format), want.channels, want.samples);
/* open audio device, allowing any changes to the specification */
SDL_AudioDeviceID dev = SDL_OpenAudioDevice(NULL, 0, &want, &have, SDL_AUDIO_ALLOW_ANY_CHANGE);
if (!dev)
{
printf("[SDL] Failed to open audio device: %s\n", SDL_GetError());
SDL_Quit();
return 1;
}
printf("[SDL] Obtained - frequency: %d format: f %d s %d be %d sz %d channels: %d samples: %d\n", have.freq, SDL_AUDIO_ISFLOAT(have.format), SDL_AUDIO_ISSIGNED(have.format), SDL_AUDIO_ISBIGENDIAN(have.format), SDL_AUDIO_BITSIZE(have.format), have.channels, have.samples);
audio_len = have.freq * 5; /* 5 seconds */
audio_pos = 0;
audio_frequency = 1.0 * FREQ / have.freq; /* 1.0 to make it a float */
audio_volume = 6000; /* ~1/5 max volume */
SDL_PauseAudioDevice(dev, 0); /* play! */
while (audio_len > 0)
{
SDL_Delay(500);
}
SDL_CloseAudioDevice(dev);
SDL_Quit();
return 0;
printf("bye");
}
gcc -o trtl test.c `sdl2-config --cflags --libs` -lSDL2main -lm