.asoundrc의 "채널", "버퍼_크기", "기간_크기", "바인딩" 및 "ipc_key"가 무엇을 나타내는지 이해합니다.

.asoundrc의 "채널", "버퍼_크기", "기간_크기", "바인딩" 및 "ipc_key"가 무엇을 나타내는지 이해합니다.

Linux PC에 USB 사운드 카드를 설정하기 위해 ALSA를 배우고 구성 파일을 작성하기 시작했습니다. 많은 노력 끝에 마침내 하나를 작성하고 실행할 수 있었습니다. .asoundrc내 홈 폴더에 저장한 내용은 다음과 같습니다 .

pcm.!default {
    type plug
    slave {
       pcm "hw:1,0"
    }
}

ctl.!default {
    type hw
    card 1
}

pcm_slave.maudiomtrackeight1 {
    pcm "hw:1,0"
    channels 8
    rate 44100
    buffer_size 4096
    period_size 1024
}

pcm.outch1 {
    type dshare
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 0 ]
    hint.description "M-Audio M-Track Eight output/playback channel 1"
}

pcm.inch1 {
    type dsnoop
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 0 ]
    hint.description "M-Audio M-Track Eight input/capture channel 1"
}

pcm.outch2 {
    type dshare
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 1 ]
    hint.description "M-Audio M-Track Eight output/playback channel 2"
}

pcm.inch2 {
    type dsnoop
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 1 ]
    hint.description "M-Audio M-Track Eight input/capture channel 2"
}

pcm.outch3 {
    type dshare
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 2 ]
    hint.description "M-Audio M-Track Eight output/playback channel 3"
}

pcm.inch3 {
    type dsnoop
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 2 ]
    hint.description "M-Audio M-Track Eight input/capture channel 3"
}

pcm.outch4 {
    type dshare
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 3 ]
    hint.description "M-Audio M-Track Eight output/playback channel 4"
}

pcm.inch4 {
    type dsnoop
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 3 ]
    hint.description "M-Audio M-Track Eight input/capture channel 4"
}

pcm.outch5 {
    type dshare
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 4 ]
    hint.description "M-Audio M-Track Eight output/playback channel 5"
}

pcm.inch5 {
    type dsnoop
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 4 ]
    hint.description "M-Audio M-Track Eight input/capture channel 5"
}

pcm.outch6 {
    type dshare
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 5 ]
    hint.description "M-Audio M-Track Eight output/playback channel 6"
}

pcm.inch6 {
    type dsnoop
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 5 ]
    hint.description "M-Audio M-Track Eight input/capture channel 6"
}

pcm.outch7 {
    type dshare
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 6 ]
    hint.description "M-Audio M-Track Eight output/playback channel 7"
}

pcm.inch7 {
    type dsnoop
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 6 ]
    hint.description "M-Audio M-Track Eight input/capture channel 7"
}

pcm.outch8 {
    type dshare
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 7 ]
    hint.description "M-Audio M-Track Eight output/playback channel 8"
}

pcm.inch8 {
    type dsnoop
    ipc_key 1111
    slave maudiomtrackeight1
    bindings [ 7 ]
    hint.description "M-Audio M-Track Eight input/capture channel 8"
}

대부분의 개념을 이해할 수 있지만 다음 내용은 이해할 수 없습니다.

  • channels: 오디오 채널 번호를 나타내는 건가요? 내가 사용할 것처럼단핵구증또는스테레오? 내 사운드 카드에 8개의 입력 포트와 8개의 출력 포트가 있다고 가정하면단핵구증구성을 16 - 8개 입력 + 8개 출력 또는 8 - 8개 입력 출력 쌍으로 설정해야 합니다(사용하려는 경우).스테레오구성에서 값을 8 - 4 입력 + 4 출력 또는 4 - 4 입력-출력 쌍으로 설정해야 합니까?
  • buffer_size: 대기 시간을 줄이기 위해 이러한 크기를 줄여야 한다는 것 외에는 아무것도 모르겠습니다. 이것은 무엇을 의미 하는가?
  • period_size: 이것도 역시 레이턴시와 관련이 있나요?
  • bindings:이러한 매핑 채널이 포트에 있습니까? ~을 위한단핵구증내가 사용하는 구성 [ <index_number> ]. 나는 [ <index_number1> <index_number2> ]사용할 수 있다스테레오구성도?
  • ipc_key: 동일한 슬레이브에서 정의된 모든 PCM 장치에 대해 동일한 고유 번호가 부여된 것으로 알고 있습니다. 슬레이브로 감지된 새 사운드 카드를 추가하고 hw:2,0위와 동일한 방식으로 PCM 장치를 계속 정의한다고 가정하면, 새 슬레이브 장치에서 정의된 각 PCM 장치에 다른 값(예: 2222)을 할당해야 합니까?

나머지를 알아내기 위해 몇 가지 실험을 시도해 볼 수 있지만 여전히 명확하지 않은 것이 있습니다. 튜토리얼이 많지 않고 좋은 공식 ALSA 문서가 부족하다는 사실은 도움이 되지 않습니다. 누군가 이것을 설명할 수 있나요?

답변1

부분 답변:

먼저 M-Track에 대한 구성을 작성할 필요가 전혀 없을 가능성이 높다고 말씀드리고 싶습니다. 사실 설정 방법은 귀하의 몫입니다.아니요대부분의 경우 예상되는 사항: 각 채널을 별도의 장치로 설정했습니다. 즉, 밴드 연주를 동시에 녹음하려고 하면 각 채널이 개별적으로 처리되기 때문에 채널(밴드 멤버) 간에 임의의 오프셋이 발생할 수 있습니다. 따라서 일반적으로 8개 채널을 모두 별도의 트랙에 녹음한 다음 적절하게 동기화하고 편집합니다.

음악을 재생하기 위해 홈 Hi-Fi 시스템을 연결하려는 경우에도 마찬가지입니다. 별도의 장치가 아닌 왼쪽/오른쪽/중앙/서브우퍼/후면 등에 대해 동기화된 채널이 필요합니다.

제가 생각할 수 있는 유일한 상황은, 어떤 이유로 각 채널이 다른 방의 스피커에 연결되어 있고, 각 채널을 통해 다른 음악을 재생하고 싶다면 별도의 장치를 만드는 것이 합리적일까요?

또한 최신 ALSA는 기본적으로 하드웨어 장치 위에 플러그인 dshare을 자동으로 제공하므로 dsnoop이를 명시적으로 지정할 필요가 없습니다.

즉, 설명은 다음과 같습니다.

  • channels: 동시에 녹화/재생되는 채널 수입니다. 1개는 모노, 2개는 스테레오, 8개는 카드용입니다. 입력과 출력은 별도로 계산되므로 8개 입력과 8개 입력 채널의 경우 "8개 채널"이라고 말하면 됩니다. 장치를 설정하는 inch방법에 따라 각 장치에 대한 항목을 만들어야 outch합니다 .channels 1

  • bindings: 장치에서 바인딩된 장치의 채널을 장치의 채널에 매핑합니다. 상단에 플러그인을 배치하여 원래 장치의 왼쪽 및 오른쪽 채널을 바꾸고 싶다고 가정해 보겠습니다 bindings { 0 1 1 0 }.

  • ipc_key: dmix, 플러그인을 사용 dshare하면 dsnoop여러 클라이언트가 단일 소스/싱크와 통신할 수 있습니다. 이 통신은 이 키를 통해 수행됩니다(IPC = 프로세스 간 통신). 따라서 하나의 사운드 카드에 여러 개의 플러그인이 있든 각 사운드 카드에 하나의 플러그인이 있든 관계없이 각 플러그인마다 키가 달라야 합니다. 그렇지 않으면 문제가 발생하게 됩니다.

  • buffer_size: 오디오 데이터는 소위 버퍼, 즉 여러 샘플을 저장하는 데 사용되는 RAM 블록에 저장되고 전송됩니다. 이 값을 높게 설정하면 처리되기 전에 많은 양의 데이터가 저장되므로 지연 시간이 늘어납니다. 매우 낮게 설정하면 처리 오버헤드로 인해 다음 데이터가 들어오거나 출력되어야 하기 전에 모든 데이터가 처리되지 않아 오디오 드롭아웃이 발생합니다.

  • period_size: 전혀 모르겠어요.

모든 ALSA PCM 플러그인도 설명되어 있습니다.여기상세한.

자신이 하고 있는 일을 정말로 알지 않는 한 buffer_size주변을 어지럽히지 마십시오 . period_size대기 시간이 중요한 경우(예: 라이브 공연에 컴퓨터를 사용하려는 경우) 가장 먼저 해야 할 일은 Pulseaudio를 제거하고 jackd모든 오디오에 사용하는 것입니다. 당신이 경우에만아직상당한 지연 시간 문제가 발생하는 경우 다른 값을 시도해 볼 수 있습니다 buffer_size.

답변2

이 기사버퍼와 기간 사이의 관계에 대한 간략한 설명은 다음과 같습니다.

사운드 카드에는 녹음된 샘플을 저장하는 하드웨어 버퍼가 있습니다. 버퍼가 충분히 차면 [사운드 카드? ] 인터럽트가 발생합니다. 그런 다음 커널 사운드 드라이버는 DMA(직접 메모리 액세스)를 사용하여 샘플을 메모리의 응용 프로그램 버퍼로 전송합니다. [...] 버퍼는 매우 클 수 있으며 이를 한 번의 작업으로 전송하면 대기 시간이라고 알려진 허용할 수 없는 지연이 발생할 수 있습니다. 이 문제를 해결하기 위해 ALSA는 버퍼를 일련의 주기(OSS/Free에서는 조각이라고 함)로 나누고 데이터를 주기로 전송합니다.

이것은 다음과 같이 들립니다:

  • 오디오 샘플은 버퍼에 저장됩니다.
  • 커널은 오디오 샘플을 버퍼에서 애플리케이션 메모리로 복사합니다.
  • 버퍼가 너무 커서 하나의 복사본으로 전송할 수 없습니다(지연 발생).
  • 버퍼는 periods 라고 불리는 조각으로 복사됩니다.

기사는 다음을 제공합니다.차트.

관련 정보