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에서는 조각이라고 함)로 나누고 데이터를 주기로 전송합니다.
이것은 다음과 같이 들립니다:
- 오디오 샘플은 버퍼에 저장됩니다.
- 커널은 오디오 샘플을 버퍼에서 애플리케이션 메모리로 복사합니다.
- 버퍼가 너무 커서 하나의 복사본으로 전송할 수 없습니다(지연 발생).
- 버퍼는
period
s 라고 불리는 조각으로 복사됩니다.
기사는 다음을 제공합니다.차트.