SPDIF In 장치가 실제로 연결되어 있는지 확인하는 방법이 alsa/libasound에 있습니까?
저는 현재 USB 사운드 카드가 있는 Raspberry Pi를 사용하여 SPDIF를 통해 들어오는 PC 오디오를 Pi의 오디오와 결합한 다음 스피커로 출력하고 있습니다.
문제는 컴퓨터를 종료하거나 절전 모드로 설정하면 스피커가 몇 초 동안 두드리는 소리를 내기 시작한 다음 조용해지고 프로그램에 엄청난 캡처 버퍼 오버플로가 발생한다는 것입니다.
따라서 PCM 입력을 읽기 전에 장치가 실제로 연결되어 있는지 확인해야 합니다.
답변1
비록 내가 바라던 최선의 해결책은 아니었지만 해결책을 찾았습니다.
누구든지 아이디어가 있다면 기꺼이 듣고 싶습니다. 그때까지는 다음과 같이 문제를 처리하겠습니다.
나는 케이블이 제거되었을 때 샘플이 들어오는 속도가 떨어지는 것을 발견했습니다. 컴퓨터가 꺼져 있을 때도 마찬가지일 것이라고 예상하지만, 이는 꽤 안전한 가정이라고 생각합니다.
어쨌든 스트림을 재생할지 무시할지 결정하기 위해 크로노를 사용하여 high_precision_clock
20사이클 사이의 간격을 측정했습니다.
각 주기마다 사용된 읽기 샘플의 양을 수집합니다 snd_pcm_readi
. 한 주기에 걸리는 시간보다 오랫동안 읽기 프로세스가 중단되는 것을 방지하기 위해 비차단 모드와 시간 초과를 사용합니다.
마지막으로 샘플 속도를 계산하고 예상 샘플 속도와 2kHz 이상 차이가 나면 다시 예상 범위로 돌아갈 때까지 스트림을 무시합니다.