ALSA (+ где надо искать документацию)

Модератор: Модераторы разделов

Ответить
Аватара пользователя
amaora
Сообщения: 95
ОС: Slackware
Контактная информация:

ALSA

Сообщение amaora »

1. чуть переделанный пример с http://www.alsa-project.org/ ( остальные слишком длинные чтобы быстро разобратся )

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include <alsa/asoundlib.h>

unsigned char buffer[ 32000 * 4 ];                     /* some random data */

/*double __sq( double x )
{
    return x - floor( x / ( 2.0 * M_PI ) ) * ( 2.0 * M_PI );
}*/

int main( int argc, char *argv[] )
{
        int err;
        unsigned int i;
        snd_pcm_t *handle;
         snd_pcm_sframes_t frames;

         /*for ( i = 0; i < sizeof( buffer ); i++ )
                 buffer[ i ] = random() & 0x03 +
                 ( random() & 0x40 ) * ( ( random() & 0xf0 ) > 0x80 ) * ( ( i % 512 ) == 0 );*/

         for ( i = 0; i < sizeof( buffer ); i++ )
                 buffer[ i ] += ( unsigned char ) ( sin( ( double ) i * ( 2.0 * M_PI / 320.0 ) ) * 64.0 ) + 120;

         if ((err = snd_pcm_open( &handle, "default", SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
                 printf("Playback open error: %s\n", snd_strerror(err));
                 exit(EXIT_FAILURE);
         }

         if ((err = snd_pcm_set_params(handle,
                                       SND_PCM_FORMAT_U8,
                                       SND_PCM_ACCESS_RW_INTERLEAVED,
                                       1,
                                       32000,
                                       1,
                                       0)) < 0) {
                 printf("Playback open error: %s\n", snd_strerror(err));
                 exit(EXIT_FAILURE);
         }

         for (i = 0; i < 1; i++) {
                frames = snd_pcm_writei(handle, buffer, sizeof(buffer));
                 if (frames < 0)
                         frames = snd_pcm_recover(handle, frames, 0);
                 if (frames < 0) {
                         printf("snd_pcm_writei failed: %s\n", snd_strerror(err));
                         break;
                 }
                 if (frames > 0 && frames < (long)sizeof(buffer))
                         printf("Short write (expected %li, wrote %li)\n", (long)sizeof(buffer), frames);
         }

         snd_pcm_close(handle);
         return 0;
}


проблема в том, что к генерируемой синусоиде ( и не только, от формы сигнала почти не зависит ) добавляется какоето периодический треск непонятного происхождения. ну и доки, что то не сильно понятные.

2. как правильно искать тот, что нужно?
пример: функции получения времени ( какойнть счетчик милисекундный всмысле )
пример: как выводить в консоль не добавля новых строк, поверх уже выведенного ( для показания постоянно обновляющихся значения )

спасибо, что прочитали до конца ;^)
кто здесь?
Спасибо сказали:
Аватара пользователя
amaora
Сообщения: 95
ОС: Slackware
Контактная информация:

Re: ALSA

Сообщение amaora »

никто ничего не хочет сказать? :_(

первый вопрос почти решен. есль комуто интересно пытаюсь модиицировать утилиту szap с linuxtv.org для настройки на спутник по звуку ( может кто подскажет, есть ли что то уже готовое для этого? )

осталось сделать вывод без перевода на новую строку, затирая старый вывод, чтото вроде того как делает fsck, когда пишет сколько уже готово. ??? иначе както нехорошо.
кто здесь?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: ALSA

Сообщение serzh-z »

amaora писал(а):
05.07.2007 01:14
никто ничего не хочет сказать? :_(

По поводу вопроса?
amaora писал(а):
05.07.2007 01:14
как правильно искать тот, что нужно?
http://www.wwworld.ru/s.php/422.htm
http://www.ln.com.ua/~openxs/articles/smar...estions-ru.html
Спасибо сказали:
Аватара пользователя
amaora
Сообщения: 95
ОС: Slackware
Контактная информация:

Re: ALSA

Сообщение amaora »

serzh-z,

по первому вопросус поздно. насчет поиска то я не о том спрашиваю, скорее нужен поиск по сожержимому манов, или через гугл искать имя нужной функции это нормально?, а про вывод думаю нестоит и искать незная как это называется, а подсказать никто не хочет, видимо прийдется смотреть исходник fsck.
кто здесь?
Спасибо сказали:
Аватара пользователя
Juliette
Сообщения: 5058
Статус: ROSA Lab
ОС: Ubuntu LTS, Mandriva 2011

Re: ALSA

Сообщение Juliette »

amaora писал(а):
05.07.2007 15:12
подсказать никто не хочет

OFF
уважаемый amaora, я, например, с сочувствием слежу за вашими проблемами, но увы, наверное, мало кто программирует под альсу, так что дело не в нежелании :(
но опять же, не верю, что нету в документации того, что вам надо. Просто далеко запрятано, видимо. :girl_sad:
/OFF
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10
Контактная информация:

Re: ALSA

Сообщение BlackStar »

Поиск по манам: man -K <что ищем>
LightLang Team
Спасибо сказали:
Аватара пользователя
amaora
Сообщения: 95
ОС: Slackware
Контактная информация:

Re: ALSA

Сообщение amaora »

BlackStar, нда надо было читаь man man, спасибо.
кто здесь?
Спасибо сказали:
Аватара пользователя
amaora
Сообщения: 95
ОС: Slackware
Контактная информация:

Re: ALSA

Сообщение amaora »

вобщем то все сделал, что хотел, может и не лучшим способом, но оно работает. звук все так же с примесью треска. есль комуто будет надо/интересно/захочет_помоч, исходник есть здесь http://www.glproj.by.ru/linux/
кто здесь?
Спасибо сказали:
Ответить