LINUX.ORG.RU

чтение /dev/dsp


0

0

Подскажите пожалуйста, как интерпретировать данные, полученные при чтении из звуковой карты? Пробовал два способа: через эмуляцию OSS (открыл /dev/dsp и считывал из него данные функцией read) и напрямую из ALSA (посредством snd_pcm_readi). Формат данных - стандартный SND_PCM_FORMAT_S16_LE.

Интересно, что при записи моих данных (простая синусоида), звук есть, а вот чтение выдает хаотические числа во всем диапазоне возможных значений signed short. Сигнал на микрофонный вход не подается, так что, по идее должны считываться нули +- шум.

☆☆☆☆☆

Вот кусок кода, который сам использую. Всё работает:
http://pastebin.com/m2cf19baa

Я, правда, не смотрел, что там получается: сразу делаю FFT, но спектр выглядит как положено.

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

Я делаю так: http://pastebin.com/m602aa82

однако, в состоянии покоя выдаются сигналы в диапазоне -2000..2000, что не очень-то похоже на шумы.. Когда вставляю штекер и трогаю руками провода левого/правого каналов, на соответствующем канале проскакивают уже цифры до 32767, т.е. все-таки, какая-то более-менее верная информация поступает. Но почему «в покое» не нуль?

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

Наводки?

Маловероятно, да и амплитуда у этих шумов (~15 милливольт) высоковата.

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

Проверил в audacity - все-таки, скорее всего вы правы: там тоже вместо нуля пишутся какие-то шумы с амплитудой 0.1-0.2мв. Похоже, надо перебираться с экспериментированием на компьютер с более-менее приличной звуковухой :) (на моем рабочем ПК дерьмовенькая «восьмиканальная» встроенная интел, даже двухканальный noName за 300р намного лучше).

Eddy_Em ☆☆☆☆☆
() автор топика

В общем, заработало на компьютере с экспериментальной звуковой картой: http://pastebin.com/m1da67ef. Только, похоже, что в АЦП есть еще и фильтр на входном контуре, встроенный в микросхему (или я недоработал плату - выходной фильтр закоротил, все работает нормально, а вот на входном как будто конденсатор остался). Буду дорабатывать. Если получится - будет попсовенький быстрый АЦП/ЦАП.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em
#!/bin/bash

say() {
	echo "$@" | festival --tts --language russian
}

saya=('Уйди!' 'Гад! Гад! Гад! И три раза сволочь!' 'Отстань от меня!' 'Не трожь!' 'Тварь!' 'Вантузятник!' 'Иди нахрен!' 'Не трожь клаву, козел!' 'А в глаз?' 'У! Козел!')

rnd=$RANDOM%11
say ${saya[$rnd]}
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.