LINUX.ORG.RU

ALSA API


0

1

Всем привет! Подскажите пожалуйста, может кто сталкивался... Использую функцию установки частоты дискретизации для захвата звука:

exact_rate = 8000; if (snd_pcm_hw_params_set_rate_near(pcm_handle, hwparams, &exact_rate, 0) < 0) { printf(...); }

Выставляет мне частоту 44100 вместо 8000 Hz. Т.е. ставит дефолтную частоту записи звуковой карты. Мне не подходит, т.к. дальше потом все это дело надо будет по сети передавать.

Второй день бьюсь не могу победить...



Последнее исправление: CoWork (всего исправлений: 3)

А звуковая вообще может на такой частоте писать?

Второй день бьюсь не могу победить...

За это время можно было бы уже написать понижение частоты дискретизации вручную.

Begemoth ★★★★★
()

не понел, ты с карты снимаешь поток, а потом в сеть? тогда бери частоту, которую может карта а потом ресемплируй; наверное, так:

int snd_pcm_hw_params_set_rate_resample ( snd_pcm_t * pcm,
snd_pcm_hw_params_t * params,
unsigned int val
)

Restrict a configuration space to contain only real hardware rates.

Parameters:
pcm PCM handle
params Configuration space
val 0 = disable, 1 = enable (default) rate resampling

anonymous
()
Ответ на: комментарий от Begemoth

Карточка: 0 [Intel ]: HDA-Intel - HDA Intel HDA Intel at 0xf3400000 irq 21

Должна по идее писать на 8000Hz, я же не выше задаю, чем она может. Если честно, то не знаю где глянуть...

Парадокс в том, что с консоли все пишется отлично: root@Rpc:/home/jp# arecord -f S16_LE -c1 -r8000 -B 1000000 > file_mono.wav

CoWork
() автор топика
Ответ на: комментарий от anonymous

Эта штука включает и выключает ресемплинг, - ее я пробовал, никаких положительных сдвигов.

CoWork
() автор топика
Ответ на: комментарий от CoWork

ну кагбе, некоторыее карты могут сильно ограниченный набор частот дискретизации
емнип, у меня на ноуте какраз не может 8k аппаратно
значит, ресемплируй сам, как выше написали
если алсу ниасилил, бери например libsamplerate

anonymous
()
Ответ на: комментарий от anonymous

так в том и дело что у меня то оно пишется вот так: arecord -f S16_LE -c1 -r8000 -B 1000000 > file_mono.wav

Значит карточка так может, весь вопрос как API заставить это делать???

CoWork
() автор топика
Ответ на: комментарий от CoWork

смотри сорцы aplay (arecord это симлинк на неё)

anonymous
()
Ответ на: комментарий от CoWork

Значит карточка так может

нет, не значит

anonymous
()
Ответ на: комментарий от CoWork

умеет ли карточка ты узнаешь, если задать arecord в кач-ве дивайса -D hw:X,0
это отключит автоматические преобразования альсы

anonymous
()

Частота дискретизации

Товарищи, в связи с дискуссией, соответственно, появились два наболевших вопроса:

1. Кто нибудь знает, как(где) посмотреть все частоты дискретизации, которые поддерживает звуковая карта?

2. Как безболезненно выполнить «ресемплирование» с частоты например: 44100->8000Hz, не прибегая к «окультным практикам ручных методов» (искал в «ALSA API» не нашел, может плохо искал).

CoWork
() автор топика
Ответ на: Частота дискретизации от CoWork

CoWork

Как безболезненно выполнить «ресемплирование» с частоты например: 44100->8000Hz, не прибегая к «окультным практикам ручных методов» (искал в «ALSA API» не нашел, может плохо искал).

В свое время решал похожую задачу, только для конкретного парка машин. Применяемые карточки все разные, кто что умеет непонятно, но записывать и воспроизводить в ондноканальном режиме , а так же на требуемой частоте дискретизации не умела ни одна. Решил проблему конфигурированием автоматического ресэмплинга и преобразования количества каналов через /etc/asound.conf.

m0rph ★★★★★
()
Ответ на: комментарий от x905

ALSA API дискретизация

>посмотри как делает это http://www.music.mcgill.ca/~gary/rtaudio/

Спасибо за помощь, еще в Инете нашел следующие либы, цитирую: «You can use OpenAL and/or PortAudio as more productive and easier sound API. Libraries like SDL and SFML also provide abstract APIs. I wouldn't recommend using the ALSA API directly. »

На всякий случай попробую написать разработчикам ALSA, интересно, что они скажут...

CoWork
() автор топика

Re: Частота дискретизации
cat /proc/asound/card0/codec#0

Благодаря «dimon555» стали точно известны поддерживаемые частоты дискретизации:

PCM:

rates [0x560]: 44100 48000 96000 192000

bits [0xe]: 16 20 24

formats [0x1]: PCM

Теперь буду пробовать другие API, чтобы все таки получить 8000Hz -> о результатах сообщу (может кому понадобится)...

CoWork
() автор топика

help

Надо написать короткую программу на с под ubuntu установил ubuntu alsa и codelite, написал и запустил как положено hello word, но дальше попал в совершенно идиотскую ситуацию-не могу в Codelite заставить линкер увидеть библиотеку alsa, указываю линкеру опцию -llibasound.so. Что я делаю не так?

Заранее спасибо

anonymous
()

help

я буквально вчера установил ubuntu alsa и codelite... подскажите пожалуйста как вы указываете линкеру библиотеку alsa? я в codelite не могу слинковать файл с обращениями к функциям asoundlib.h

oleg_r
()
Ответ на: комментарий от anonymous

обидно, что быдлокод даже не мой а пример из http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2pcm__min_8c-example.html

gcc -c «/media/0408-650D/test_1/tst_1/main.c» -g -O0 -Wall -o ./Debug/main.o -I. -I. gcc -o ./Debug/tst_1 @«/media/0408-650D/test_1/tst_1/tst_1.txt» -L/usr/lib/ ./Debug/main.o: In function `main': /media/0408-650D/test_1/tst_1/main.c:24: undefined reference to `snd_pcm_open' /media/0408-650D/test_1/tst_1/main.c:25: undefined reference to `snd_strerror' /media/0408-650D/test_1/tst_1/main.c:28: undefined reference to `snd_pcm_set_params' /media/0408-650D/test_1/tst_1/main.c:35: undefined reference to `snd_strerror' /media/0408-650D/test_1/tst_1/main.c:40: undefined reference to `snd_pcm_writei' /media/0408-650D/test_1/tst_1/main.c:42: undefined reference to `snd_pcm_recover' /media/0408-650D/test_1/tst_1/main.c:44: undefined reference to `snd_strerror' /media/0408-650D/test_1/tst_1/main.c:51: undefined reference to `snd_pcm_close' collect2: ld returned 1 exit status make[1]: *** [Debug/tst_1] Error 1 make[1]: Leaving directory `/media/0408-650D/test_1/tst_1' make: *** [All] Error 2 ----------Build Ended---------- 8 errors, 0 warnings

компилятор проходит без замечаний

oleg_r
()
Ответ на: комментарий от anonymous

а опции -lasound почему то нет, хотя в linker option codelite я ее указал ... не там указываю, а где надо не понимаю - превый день знакомства с codelite :(

oleg_r
()
Ответ на: комментарий от anonymous

нашел в чем проблема!

ОГРОМНОЕ СПАСИБО за помощь!!!

oleg_r
()
Ответ на: комментарий от oleg_r

Open Sound System же!

Есть эмуляция OSS в alsa (кстати, вполне сносно работает), но лучше сразу OSS4 поставить и радоваться.

Я когда-то баловался со звуковушкой (для использования ее в качестве дешевых ЦАП/АЦП), так вот один и тот же код на OSS занимал в несколько раз меньше места и был намного более понятно читаем, чем на alsa.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от oleg_r

Судя по скриншотам codelite, geany во много крат удобне.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Спасибо!

Спасибо, мои проблемы были совсем не из-за ALSA :) Как это всегда бывает, неожиданно возникла задача быстро написать тестовую программу по под линукс... Все бы ничего, но я до этого с линуксом дела не имел, в результате его установки похоже потерян навсегда раздел 7 виндов, благодаря неполному разрушению раздела ХР около 16 гигов своей инфы, к счастью, удалось сохранить на флэшке и потрачен целый день на установку ALSA, codelite и обучению...

Вобщем создал себе проблемы, а потом героически их преодолел :)))

oleg_r
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.