Installation de l’utilitaire de son Audacity

sudo apt update && sudo apt install audacity -y

Générer un fichier son de une seconde un LA à 440 Hz

fichier : la.c

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

void write_wav_header(int fd, uint32_t sample_rate, uint32_t data_size) 
{
    uint32_t file_size = data_size + 36; /* 44 - 8 */
    uint32_t fmt_size = 16;
    uint16_t audio_format = 1; /* PCM */
    uint16_t num_channels = 1; /* mono */
    uint32_t byte_rate = sample_rate * num_channels * 8 / 8;
    uint16_t block_align = num_channels * 8 / 8;
    uint16_t bits_per_sample = 8;
    
    /* Écriture de l'en-tête RIFF */
    write(fd, "RIFF", 4);
    write(fd, &file_size, 4);
    write(fd, "WAVE", 4);
    
    /* Écriture du chunk fmt */
    write(fd, "fmt ", 4);
    write(fd, &fmt_size, 4);
    write(fd, &audio_format, 2);
    write(fd, &num_channels, 2);
    write(fd, &sample_rate, 4);
    write(fd, &byte_rate, 4);
    write(fd, &block_align, 2);
    write(fd, &bits_per_sample, 2);
    
    /* Écriture du chunk data */
    write(fd, "data", 4);
    write(fd, &data_size, 4);
    return;
}

int main(int argc, char **argv) 
{
    const char *filename = "la440.wav";
    const uint32_t sample_rate = 8000;
    const uint32_t duration = 1;
    const double frequency = 440.0;
    const double amplitude = 127.0;
    const double offset = 128.0;
    
    const uint32_t num_samples = sample_rate * duration;
    const uint32_t data_size = num_samples;

    uint32_t i;
    double time;
    double sample;
    uint8_t audio_sample;
        
    /* Ouverture du fichier avec open() */
    int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (fd == -1) {
        printf("Erreur: impossible de créer le fichier %s\n", filename);
        return EXIT_FAILURE;
    }
    
    /* Écriture de l'en-tête manuellement */
    write_wav_header(fd, sample_rate, data_size);
    
    /* Génération des données audio */
    for ( i = 0 ; i < num_samples; i++) 
    {
        time = (double)i / sample_rate;
        sample = sin(2.0 * M_PI * frequency * time);
        audio_sample = (uint8_t)(offset + amplitude * sample);
        write(fd, &audio_sample, 1);
    }
    
    /* Fermeture du fichier */
    close(fd);
    
    printf("Fichier %s créé avec succès!\n", filename);
    printf("Format: 8 bits mono, %d Hz, 1 seconde\n", sample_rate);
    printf("Fréquence: %.1f Hz (La4)\n", frequency);
    
    return EXIT_SUCCESS;
}

Pour compiler :

gcc la.c -o la -Wall -ansi -pedantic -lm -g 

pour écouter le fichier son généré

audacity la440.wav