Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <linux/soundcard.h>
#include <errno.h>
#include <stdlib.h>
#include "hip.h"
#ifdef _WIN32
#include <io.h>
#include <fcntl.h>
#endif
int main(int argc, char **argv){
HIP_File hf;
int eof=0;
int current_section;
char pcmout[8192];
int speed = 44100;
int stereo = 1; // 0=mono, 1=stereo
int format;
int iFd_Audio;
int fd;
int bits = 16;
#ifdef _WIN32
_setmode( _fileno( stdin ), _O_BINARY );
_setmode( _fileno( stdout ), _O_BINARY );
#endif
if ((iFd_Audio = open("/dev/dsp", O_WRONLY, 0)) == -1)
{
puts("Error trying to open /dev/dsp");
return;
}
format = AFMT_S16_LE;
if (ioctl(iFd_Audio, SNDCTL_DSP_SETFMT, &format)==-1)
{
puts("Error - could not set audio format to AFMT_S16_LE");
return;
}
if (format != AFMT_S16_LE)
{
puts("Error - the requested Format (AFMT_S16_LE) is not supported by the audio device /dev/dsp");
return;
}
if (ioctl(iFd_Audio, SNDCTL_DSP_STEREO, &stereo)==-1)
{
puts("Konnte kein Stereo setzen!");
}
if (ioctl(iFd_Audio, SNDCTL_DSP_STEREO, &stereo)==-1)
{
puts("Error - could not set mode to Stereo");
return;
}
if (stereo != 1)
{
puts("Error - device doesn't support Stereo");
return;
}
if (ioctl(iFd_Audio, SNDCTL_DSP_SPEED, &speed)==-1)
{
puts("Error - could not set sample rate to 44100");
return;
}
if (speed != 44100)
{
puts("Error - device doesn't support 44100 khz sample rate");
return;
}
/*
iFd_Audio=open("/dev/dsp",O_WRONLY);
if (iFd_Audio == -1) { printf ("can not open /dev/dsp \n"); exit(0); }
ioctl (iFd_Audio, SNDCTL_DSP_SYNC, NULL);
ioctl (iFd_Audio, SNDCTL_DSP_SAMPLESIZE, &bits);
ioctl (iFd_Audio, SNDCTL_DSP_STEREO, &stereo);
ioctl (iFd_Audio, SNDCTL_DSP_SPEED, &speed);
*/
fd = open (argv[1],O_RDONLY);
if(hip_open(stdin, &hf, NULL, 0) < 0) {
fprintf(stderr,"Input does not appear to be an mpeg bitstream.\n");
exit(1);
}
while(!eof){
long ret=hip_read(&hf,pcmout,sizeof(pcmout),0,2,1,¤t_section);
if (ret == 0) {
/* EOF */
eof=1;
} else if (ret < 0) {
/* error in the stream. Not a problem, just reporting it in
case we (the app) cares. In this case, we don't. */
} else {
//fwrite(pcmout,1,ret,hp);
printf("write: %d\n", write(iFd_Audio,pcmout,8192));
perror("\n");
}
}
hip_clear(&hf);
fprintf(stderr,"Done.\n");
return(0);
}
Lesezeichen