Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9260-SIMXXX
некорректный вывод звука в режиме стерео
olber
Добавлено 07.12.2012 01:10
0
Сообщение: 1
olber
0

Пункты: 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
Добавлено 07.12.2012 11:02 Сообщение: 2
olber
0

Пункты: 580
Регистрация: 06.04.2012
Сборка стандартная linux 2.6.28
Применял обновления от2009 на tlv320 без эффектов.
Глюки начинаются если при проигрывании есть паузы.
То есть затолкали примерно секундный буфер. обождали, и тд
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9260-SIMXXX