Недавно я изучал зачарованную папку / dev. Я хочу записать случайные данные на аудиоустройство, чтобы создать шум.
Я использую ALSA.
Поэтому я приказываю cat передать некоторые случайные данные в файл воспроизведения в папке / dev ...
cat file-of-random-data > /dev/snd/pcmC0D0p
тогда я получаю то, что кажется ошибкой от кошки
cat: write error: File descriptor in bad state
Как я могу это исправить, чтобы услышать восхитительную статическую игру с моей звуковой карты?
Ответы:
Я думаю, что причина этого не работает для вас, потому что этот интерфейс устарел. Вы обычно не можете писать аудио, используя
/dev/dsp
больше, по крайней мере, не будучи хитрым.Существует программа , которая будет выполнять это для вас на вашей системе:
padsp
. Это сопоставит файл/dev/audio
или/dev/dsp
с новой системой Audio Server.Запустите терминал и войдите в режим root с помощью
sudo su
.Затем я собираюсь направить
cat /dev/urandom
выводpadsp
и использоватьtee
команду для отправки данных/dev/audio
. Вы получите тонну мусора в своем терминале, так что вы можете перенаправить на/dev/null
.Когда вы в суперпользователе, попробуйте эту команду:
Вы можете даже попробовать другие устройства, такие как мышь: например, Use:
/dev/psaux
или драйвер usb. Вы даже можете запустить свою память через это:/dev/mem
Надеюсь, это проясняет, почему это не сработало раньше.
Лично я обнаружил, что мышь и память гораздо интереснее, чем игра в случайную статическую игру!
источник
sudo
привилегии не требуются для этого.cat /dev/urandom | aplay
это команда, которую нужно набрать. Если вы не в группе «audio», вы можете добавить к sudo префикс aplay. Это также не мешает работе демонов (я работал,pulseaudio
когда эта команда была активной, и правильно слышал «шум»).РЕДАКТИРОВАТЬ (6 августа 2019 г.): В более старой версии команды у меня тоже было что-
padsp tee
то междуcat
иaplay
. Теперь, когда я действительно работаю в этой области, я понимаю, что в этом нет абсолютно никакого смысла. Кроме того, я знаю, что обновленная команда (видимая в начале этого ответа) работает, потому что я использую ее несколько раз в день на работе.источник
padsp tee
было необходимо (у меня был точный 12.04.2 в то время) Дело в том, что вы не должны пытаться выгружать данные непосредственно на устройства, даже если вы были пользователем root ( Насколько я знаю, мало файлов доступно для чтения и ни одного файла в папке / dev), потому что вы можете либо получить ошибку (в лучшем случае, которая встречается чаще при каждом обновлении), либо вызвать сбой ядра, либо даже сломать устройство, в редких случаях. Для этого нужно использовать непривилегированные элементы, такие как aplay (требуется аудиогруппа или root, к сожалению). @geremiapadsp tee
вещь вообще не имеет никакого смысла. На работе я использую нечто подобное без этой строки, чтобы проверить, что я делаю успехи в написании аудио драйвера. Буду обновлять мой ответ.Попробуйте / dev / audio или одно из других устройств в / dev / snd. Не все они являются приемниками аудиоданных, возможно, вы поймали микшер, микрофон или что-то еще
источник
Звуковой демон (например
pulseaudio
) удерживает блокировку на устройстве? Я думаю, что вы можете узнать, есть ли что-нибудь еще, с помощью этогоlsof
.источник
grep
иlsof
.pulseaudio
использует,/dev/snd/controlC0
но не включен/dev/snd/pcmC0D0p
. Я дважды проверил,/var/lock
нашел ли файл для блокировки устройства.ls -al
говорит, что папка пуста. Так что я думаю, что нет блокировки на pcmC0D0pTL; DR: параметры устройства должны быть установлены до чтения или записи в него данных.
Шаг за шагом:
Откройте устройство PCM. Например:
fd = open("/dev/snd/pcmC0D0p", O_RDWR)
. После открытия PCM находится вOPEN
состоянии.Установите параметры с помощью
ioctl(fd, SNDRV_PCM_IOCTL_HW_PARAMS, (struct snd_pcm_hw_params*) p)
. Структура аппаратных параметров имеет маски (каждый бит является значением) и интервалы (диапазон [минимум, максимум]). Параметры, которые не устанавливаются, должны быть заполнены (все биты / значения установлены для масок; полный диапазон для интервалов). После установки аппаратных параметров PCM находится вSETUP
состоянии. См. Pcm_set_config () TinyALSA для кода.Установка
ACCESS
,FORMAT
,RATE
,CHANNELS
,PERIOD_SIZE
иPERIODS
достаточно. Другие параметры являются их вариантами, за исключением того,BUFFER_SIZE
что в некоторых устройствах может быть установлено не кратноеPERIOD_SIZE
.Вызов
ioctl(fd, SNDRV_PCM_IOCTL_PREPARE)
для подготовки устройства и переменных времени выполнения ALSA. После этого PCM находится вPREPARED
состоянии.Начните чтение (захват) или запись (воспроизведение).
Минимальное приложение для чтения или записи на устройство PCM будет иметь большую часть своего кода вокруг манипулирования аппаратными параметрами.
источник
snd_pcm_read()
иsnd_pcm_write()
, байты преобразуются в кадры .