How can I play a .wav audio file in c in linux?

0

My teacher gave me this program and I have to get it to play an audio track but until now I have not been able to do it, I do not ask you to do the work to me, just to guide me

#include <sys/soundcard.h>      ///Se encuentran definicas las constantes que indican la configuracion de la tarjeta de audio
#include <sys/ioctl.h>          ///Permite usar la funcion ioctl();
#include <fcntl.h>              ///Se encunetran definidas las constantes que indican en que modo se abren los archivos
#include <errno.h>              ///Desplegan un mensaje de Error si ocurre alguno.
#include <stdlib.h>             ///Se encuentran declaradas las funciones malloc,exit,free
#include<stdio.h>               ///Permite el uso de entrada y salida del programa
#include<string.h>

#define tiempo 800


main(int argc,char *argv[])
{
    char *buffer;      ///Buffer en donde se carga la pista de audio
    int pista;                  ///descriptor de pista de audio
    int tar_escritura;          ///descriptor de tajreta de audio
    int taza = 16000;           ///taza de muestreo
    int canales = 1;            /// canal estereo
    int formato = AFMT_U16_LE;  ///Formato para 16 bits definido en la libreria sys/soundcard.h

    char NombreArchivo[100];
    strcpy(NombreArchivo,argv[1]);

        printf("El siguiente programa reproduce archivos WAV sin compresion con el estandar PCM \nCon una frecuencia de 16,000 hz en MODO estereo");

    if ( (tar_escritura = open("/dev/dsp",O_WRONLY)) == -1 )
    {
        perror("Error al abrir tarjeta de Audio");  ///Abre Tarjeta de Audio
        return (-1);
    }

    if((pista=open(NombreArchivo,O_RDONLY))==-1)
    {
        perror("Error al Abrir pista de audio");        ///Abre pista de Audio
        exit(-1);
    }


    buffer = malloc(taza*tiempo*(canales+1));  ///Crea buffer de audio

    read(pista,buffer,taza*tiempo*(canales+1));         ///Carga el audio en el Buffer


    if ( ioctl(tar_escritura, SNDCTL_DSP_STEREO,&canales) == -1 )
    {
        perror("Error al configurar canales de audio"); ///Configura los canales de Audio
        return errno;
    }


    if ( ioctl(tar_escritura, SNDCTL_DSP_SETFMT,&formato) == -1 )
    {
        perror("Error al leer el formato de pista");     ///Configura el formato de la pista de Audio
        return errno;
    }

    if (ioctl(tar_escritura, SNDCTL_DSP_SPEED,&taza) == -1 )
    {
        perror("Error alconfigurar la taza de muestreo");   ///Configura la taza de muestreo en hz
        return errno;
    }


    write(tar_escritura,buffer,taza*tiempo*(canales));    ///Escribe la pista de audio en la tarjeta de audio

    if (ioctl(tar_escritura, SNDCTL_DSP_SYNC) == -1)
    {
        perror("Error al enviar pista");                    ///Sincroniza y reproduce la pista de audio
        return errno;
    }

    free(buffer);           ///Libera el buffer

    close(pista);           ///Cierra el archivo de la pista de audio
    close(tar_escritura);   ///Cierra el archivo controlador de la tarjeta de audio
}
    
asked by alex 01.05.2018 в 23:22
source

0 answers