2014-09-03 9 views
2

필자가 작성한 프로그램에서 지연 시간이 짧은 Linux에서 오디오를 캡처하려고합니다.지연 시간이 짧은 Linux에서 사운드 캡쳐

ALSA API를 사용하여 몇 가지 실험을 실행했으며 snd_pcm_readi()를 사용하여 소리를 캡처 한 다음 snd_pcm_writei()를 사용하여 즉시 재생했습니다.

캡쳐 된 프레임 수와 버퍼 크기가 인 경우 재생을 시도했지만 지연 시간이 1 초 미만으로 줄어들 수있는 것 같습니다. 정도입니다.

PulseAudio 또는 JACK을 사용하는 것이 더 좋습니까? 그것들은 캡처 된 오디오 을 재생하는 데 사용할 수 있습니까?

+0

는 ALSA의 snd_pcm_mmap ... 기능은 대기 시간을 향상시킬 것인가? –

답변

0

캡처 대기 시간을 줄이려면 캡처 장치의 기간 크기를 줄입니다. 재생 대기 시간을 줄이려면 재생 장치의 버퍼 크기를 줄이십시오.

잭은 캡처 된 오디오를 재생할 수 있지만 (입력 포트를 출력 포트에 연결하기 만하면) 마침내 해당 마침표/버퍼를 구성해야합니다.

Relation between period size of speaker and micRecording from ALSA - understanding memory mapping도 참조하십시오. 나는 낮은 레이턴시 오디오 프로그래밍에 대한 몇 가지 일을했습니다

0

,

내 경험은, 첫째, 캡처 버퍼가 10ms의 기간 버퍼처럼, 작은해야한다. (512 프레임 버퍼와 48000 샘플 레이트를 사용한다고 가정 해 봅시다).

그런 다음 출력 장치 start_threshold를 최소한 2 * 프레임 크기 (기록 된 데이터의 처리가 많지 않은 경우 1 * 프레임 크기)로 설정해야합니다.

CL과 같은 기록 장치 용. 상대적으로 작은주기를 사용하는 것이 좋지만 irq를 너무 많이 피하기에는 너무 작지 않습니다.

또한 프로세스 일정을 FIFO 일정으로 변경할 수 있습니다.

그러면 잘하면 총 대기 시간이 약 20ms가됩니다.

0

나는 당신이 실제로 당신이 낮은 전형적인 대기 시간을 얻을 수있는 리눅스 커널을 실행하고 있는지 확인해야한다고 생각한다.

  • CONFIG_HZ_1000
  • CONFIG_IRQ_FORCED_THREADING
  • CONFIG_PREEMPT
  • CONFIG_PREEMPT_RT_FULL (만 RT 패치 사용 가능)
:

당신이 들여다 수있는 몇 가지 커널 컴파일시 구성 옵션이 있습니다

그 외에도 th Linux에서 오디오 대기 시간을 최적화하기 위해 할 수있는 일이 있습니다. 일부 시작 기준점이 찾을 수 있습니다

또한

http://wiki.linuxaudio.org/wiki/real_time_info