최근에는 마법에 걸린 / 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
파일을 새 오디오 서버 시스템에 매핑합니다 .
을 사용하여 터미널을 시작하고 루트 모드로 들어갑니다 sudo su
.
그런 다음 cat /dev/urandom
출력을 파이프 로 보내고 명령을 padsp
사용하여 tee
에 데이터를 보냅니다 /dev/audio
. 터미널에 많은 쓰레기가 생겨서로 리디렉션 할 수 있습니다 /dev/null
.
수퍼 유저가되면 다음 명령을 시도하십시오.
cat /dev/urandom | padsp tee /dev/audio > /dev/null
마우스와 같은 다른 장치로 시도해 볼 수도 있습니다 /dev/psaux
. 예 : 또는 USB 드라이버를 사용하십시오 . 당신은 그것을 통해 메모리를 실행할 수 있습니다 :
/dev/mem
이것이 이전에 작동하지 않은 이유를 분명히하기를 바랍니다.
개인적으로, 마우스와 메모리가 랜덤 스태틱을 플레이하는 것보다 훨씬 흥미로웠다는 것을 알았습니다!
답변
cat /dev/urandom | aplay
입력해야하는 명령입니다. “audio”그룹에 속하지 않으면 ado 접두사를 sudo로 지정할 수 있습니다. 이것은 또한 모든 데몬을 방해하지 않습니다 ( pulseaudio
이 명령이 활성화되어 있고 “노이즈”가 올바르게 들리는 동안 실행 중이었습니다.
편집 (2019 년 8 월 6 일) : 이전 버전의 명령 padsp tee
에서 cat
와 사이 에 문제 가있었습니다 aplay
. 저는 실제로 현장에서 일하고 있기 때문에 전혀 이해가되지 않습니다. 또한 직장에서 하루에 여러 번 사용하기 때문에 업데이트 된 명령 (이 답변의 시작 부분에 표시되는 명령)이 작동한다는 것을 알고 있습니다.
답변
/ dev / audio 또는 / dev / snd 아래의 다른 장치 중 하나를 시도하십시오. 그들 모두가 오디오 데이터 싱크 인 것은 아닙니다. 믹서, 마이크 등을 잡았을 수 있습니다.
답변
사운드 데몬 (예 🙂 pulseaudio
이 장치를 잠그고 있습니까? 를 통해 다른 핸들이 있는지 알아낼 수 있다고 생각합니다 lsof
.
답변
TL; 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
상태입니다. 코드는 TinyALSA의 pcm_set_config () 를 참조하십시오 .설정
ACCESS
,FORMAT
,RATE
,CHANNELS
,PERIOD_SIZE
그리고PERIODS
충분하다. 다른 매개 변수는BUFFER_SIZE
일부 장치에서의 배수가 아닌 것으로 설정 될 수 있다는 점 을 제외하고는 이들의 변형 입니다PERIOD_SIZE
. -
ioctl(fd, SNDRV_PCM_IOCTL_PREPARE)
장치 및 ALSA 런타임 변수를 준비하기 위해 호출 합니다. 이 후 PCM은PREPARED
상태입니다. -
읽기 (캡처) 또는 쓰기 (재생)를 시작하십시오.
PCM 장치를 읽거나 쓰는 최소한의 응용 프로그램은 하드웨어 매개 변수 조작과 관련된 대부분의 코드를 갖습니다.