некорректный вывод звука в режиме стерео
olber
Пункты: 580
Регистрация: 06.04.2012
Доброго времени суток
Пытаюсь проиграть стерео wav 48 rHz 16 бит файл на плате AT91SAM9260 через /dev/dsp
Код
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <stdio.h>
#include <linux/soundcard.h>
#define RATE 48000 /* the sampling rate */
#define SIZE 16 /* sample size: 8 or 16 bits */
#define CHANNELS 2/* 1 = mono 2 = stereo */
/* this buffer holds the digitized audio */
unsigned char buf[1024];
int main()
{
int fd; /* sound device file descriptor */
int arg; /* argument for ioctl calls */
int status; /* return status of system calls */
/* open sound device */
fd = open("/dev/dsp", O_RDWR);
if (fd < 0) {
perror("open of /dev/dsp failed");
exit(1);
}
/* set sampling parameters */
arg = SIZE; /* sample size */
status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);
if (status == -1)
perror("SOUND_PCM_WRITE_BITS ioctl failed");
if (arg != SIZE)
perror("unable to set sample size");
arg = CHANNELS; /* mono or stereo */
status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg);
if (status == -1)
perror("SOUND_PCM_WRITE_CHANNELS ioctl failed");
if (arg != CHANNELS)
perror("unable to set number of channels");
arg = RATE; /* sampling rate */
status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);
if (status == -1)
perror("SOUND_PCM_WRITE_WRITE ioctl failed");
while (1) { /* loop until Control-C */
// прием звука извне
//
//
// ////
status = write(fd, buf, sizeof(buf)); /* play it back */
if (status != sizeof(buf))
perror("wrote wrong number of bytes");
}
все работает но ногда путаются правый и левый канал
как это можно лечить?
искал здесь и гуглил ничего похожего не нашел.
olber
Пункты: 580
Регистрация: 06.04.2012
Сборка стандартная linux 2.6.28
Применял обновления от2009 на tlv320 без эффектов.
Глюки начинаются если при проигрывании есть паузы.
То есть затолкали примерно секундный буфер. обождали, и тд