Skip to content

luc117.c

Problem Statement

Write a program to convert a given text into an audio file using OpenAI Audio API (TTS).

Metadata

Property Detail
Author Amit Dutta amitdutta4255@gmail.com
Date 08 Feb 2026
License MIT License (See the LICENSE file for details)
Difficulty Beginner (index: 3 / 10)

Concepts

Beta Feature

This concept detection system is still in beta and may occasionally show incorrect or incomplete results.

  • Array
  • Pointers

Actions

Raw View on GitHub

You can print or save this file by opening Raw and using your browser.

Source Code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>

/* Pre-requisites:
   1. Install libcurl development package.
   2. Get OpenAI API Key.
*/

#define API_KEY "YOUR_OPENAI_API_KEY_HERE"

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}

int main(void) {
    CURL *curl;
    CURLcode res;
    FILE *fp;

    // JSON Payload construction
    const char *url = "https://api.openai.com/v1/audio/speech";
    const char *data = "{"
                       "\"model\": \"tts-1\","
                       "\"input\": \"Hello! This is a C program talking to you.\","
                       "\"voice\": \"alloy\""
                       "}";

    struct curl_slist *headers = NULL;
    char auth_header[100];
    sprintf(auth_header, "Authorization: Bearer %s", API_KEY);

    curl_global_init(CURL_GLOBAL_ALL);
    curl = curl_easy_init();

    if(curl) {
        // Set Headers
        headers = curl_slist_append(headers, "Content-Type: application/json");
        headers = curl_slist_append(headers, auth_header);

        // Open file to save audio
        fp = fopen("output_audio.mp3", "wb");
        if(!fp) {
            printf("Error opening file for writing.\n");
            return 1;
        }

        // Configure CURL
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);

        // Perform Request
        printf("Sending request to OpenAI TTS API...\n");
        res = curl_easy_perform(curl);

        if(res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        else
            printf("Audio saved to 'output_audio.mp3' successfully.\n");

        // Cleanup
        fclose(fp);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }

    curl_global_cleanup();
    return 0;
}

Explanation

Explain with AI

Copy the prompt below and paste it into any AI assistant.

    You are explaining a C programming code to a beginner.

    STRICT RULES:

    - Only use the given code. Do NOT assume anything not present.

    - Do NOT add extra examples.

    - Keep explanation clear and short.

    - If something is unclear, say "Not clear from code".

    - Follow the exact format below. Do NOT change headings.

    FORMAT:

    [START]

    ## What it does

    (Explain the overall purpose in 1-2 sentences)

    ## Step-by-step

    (Explain how the code works in steps, simple language)

    ## Key Concepts

    (List concepts like loop, condition, function, etc.)

    ## Notes

    (Mention any limitations, errors, or assumptions)

    [END]

    CODE (luc117.c):

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <curl/curl.h>

    /* Pre-requisites:
       1. Install libcurl development package.
       2. Get OpenAI API Key.
    */

    #define API_KEY "YOUR_OPENAI_API_KEY_HERE"

    size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
        size_t written = fwrite(ptr, size, nmemb, stream);
        return written;
    }

    int main(void) {
        CURL *curl;
        CURLcode res;
        FILE *fp;

        // JSON Payload construction
        const char *url = "https://api.openai.com/v1/audio/speech";
        const char *data = "{"
                           "\"model\": \"tts-1\","
                           "\"input\": \"Hello! This is a C program talking to you.\","
                           "\"voice\": \"alloy\""
                           "}";

        struct curl_slist *headers = NULL;
        char auth_header[100];
        sprintf(auth_header, "Authorization: Bearer %s", API_KEY);

        curl_global_init(CURL_GLOBAL_ALL);
        curl = curl_easy_init();

        if(curl) {
            // Set Headers
            headers = curl_slist_append(headers, "Content-Type: application/json");
            headers = curl_slist_append(headers, auth_header);

            // Open file to save audio
            fp = fopen("output_audio.mp3", "wb");
            if(!fp) {
                printf("Error opening file for writing.\n");
                return 1;
            }

            // Configure CURL
            curl_easy_setopt(curl, CURLOPT_URL, url);
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);

            // Perform Request
            printf("Sending request to OpenAI TTS API...\n");
            res = curl_easy_perform(curl);

            if(res
    ... (truncated for brevity)