7.5 Audio Mixer (AUDMIX)
7.5.1 Introduction
많은 애플리케이션에서 서로 다른 효과를 내기 위해 두 개 이상의 오디오 믹싱을 요구한다. Audio Mixer를 사용하여 두 개의 오디오 스트림을 단일 스트림으로 믹스할 수 있다. 이들은 두 개의 Synchronous Audio Interface(SAI) 모듈에 의해 구동된다. 각 입력 시리얼 인터페이스는 TDM 방식으로 프레임에 8개의 오디오 채널을 전달한다. 믹서는 두 개의 인터페이스에서 해당 채널의 오디오 샘플을 단일 샘플로 믹싱한다. 믹싱하기 전에, 구성에 따라 두 입력의 오디오 샘플을 감쇠할 수 있다. Audio Mixer의 출력은 시리얼 오디오 인터페이스이기도 하다. 입력 인터페이스와 마찬가지로 동일한 TDM 프레임 형식을 가진다. 이 출력은 오디오 코덱의 시리얼 DAC TDM 인터페이스를 구동하는 데 사용되며, CPU에서 리드백하기 위해 일반 오디오 SAI 모듈의 수신 경로와 함께 외부 핀으로 전송된다.
Audio Mixer의 출력으로 세가지 스트림 중 하나를 선택할 수 있다:
- 시리얼 오디오 입력 1
- 시리얼 오디오 입력 2
- 믹스된 오디오
믹싱 작업은 오디오 샘플 속도와 무관하지만, 믹싱에 적합한 TDM 프레임에서 두 개의 오디오 입력 스트림은 동일한 채널 수로 동일한 오디오 샘플 속도를 가져야 한다.
7.5.2 Block diagram
아래 그림은 Audio Mixer 블럭의 상위 레벨의 관점을 보여준다.
7.5.3 Hardware Overview
Mixer 블럭에는 두 개의 오디오 스트림에 대한 두 개의 시리얼 오디오 입력 인터페이스가 있다. 그 중 하나는 일반 오디오에 사용되고, 다른 하나는 안전한 톤(safety tone)에 사용된다. 시리얼 오디오 TDM 프레임은 각각 32비트의 8개 샘플을 포함할 수 있다. 처음 6개의 샘플은 세 개의 스테레오 DAC용이다. 각 DAC는 좌측과 우측 채널에 대한 두 개의 샘플을 가져온다. 마지막 두 샘플은 확장이며 향후 사용할 수 있도록 유지된다. 오디오 믹싱 애플리케이션에서 두 개의 오디오 입력 스트림은 채널 수와 프레임 속도가 같아야 한다. 프레임 형식은 다음 그림에 나와 있다.
입력 TDM 프레임은 자체 인터페이스 비트 클럭의 프레임 펄스에서 시작하여 32비트 샘플로 역직렬화(de-serialized)된다. 각 샘플은 감쇠기를 통과한다. 감쇠기는 오디오 신호의 레벨을 줄인다. 이 프로세스는 감쇠라고 한다. 신호의 감쇠는 오디오 샘플에 감쇠 값을 곱하여 수행된다. 감쇠 값은 감쇠기 출력의 오디오 신호 레벨을 정의한다. 감쇠를 활성화하거나 비활성화할 수 있다. 비활성화하면, 오디오 샘플이 수정 없이 전달된다. 활성화하면, 다른 시간에 감쇠 값을 정의하는 구성에 따라 감쇠가 수행된다(감쇠 프로파일이라고 함).
두 개의 오디오 스트림에 대해 두 개의 독립적인 감쇠기가 있다. 두 개의 감쇠기 출력이 믹싱에 사용된다. 믹싱은 두 개의 감쇠기에서 해당 채널의 샘플을 추가하여 수행된다. 결과로 믹스된 샘플 값이 제공한다. 그런 다음 오디오 샘플의 원하는 너비를 얻기 위해 양자화된다. 양자화된 샘플은 출력 샘플을 형성하기 위해 반올림된다. 반올림은 양자화된 샘플의 LSB에서 수행된다. 그런 다음 최종 샘플은 직렬화(serialized)되어, 선택된 비트 클럭이 있는 입력 인터페이스와 동일한 프레임 형식으로 전송된다.
7.5.4 Software Overview
Audio Mixer 드라이버는 ALSA System on Chip(ASoC) 레이어에서 디자인되었다. Audio Mixer용 ASoC 드라이버는 AudioMixer 입력용 재생 디바이스 두 개와 Audio Mixer 출력 캡처를 위한 한 개의 캡처 디바이스를 제공한다. 재생 오디오의 형식은 16비트, 24비트 또는 32비트 너비의 선형 PCM 오디오이다. 캡처된 오디오 형식은 16비트, 18비트, 20비트, 24비트 또는 32비트 너비의 선형 PCM 오디오 데이터이다.
7.5.4.1 User Interface
Audio Mixer 인터페이스는 amixer -c <audio mixer card> 툴을 사용하여 사용자 공간에서 액세스할 수 있다. 아래 오디오 믹석 컨트롤은 사용자 공간에 노출되어 있다.
Table 84. Audio Mixer controls
ID | Name | Type | Access | Value | Default |
---|---|---|---|---|---|
1 | Mixing Clock Source |
enum | r/w | #0 'TDM1', #1 'TDM2' |
#0 ‘TDM1’ |
2 | Output Source | enum | r/w | #0 'Disabled', #1 'TDM1', #2 'TDM2', #3 'Mixed' |
#0 'Disabled' |
3 | Output Width | enum | r/w | #0 '16b', #1 '18b', #2 '20b', #3 '24b', #4 '32b' |
#4 '32b' |
4 | Output Clock Polarity |
enum | r/w | #0 'Positive edge', #1 'Negative edge' |
#1 'Negative edge' |
5 | Frame Rate Diff Error |
enum | r/w | #0 'Unmask', #1 'Mask' |
#0 'Unmask' |
6 | Clock Freq Diff Error |
enum | r/w | #0 'Unmask', #1 'Mask' |
#0 'Unmask' |
7 | Sync Mode Config |
enum | r/w | #0 'Disabled', #1 'Enabled' |
#0 'Disabled' |
8 | Sync Mode Clk Source |
enum | r/w | #0 'TDM1', #1 'TDM2' |
#0 'TDM1' |
9 | TDM1 Attenuation |
enum | r/w | #0 'Disabled', #1 'Enabled' |
#0 'Disabled' |
10 | TDM1 Attenuation Direction |
enum | r/w | #0 'Downward', #1 'Upward' |
#0 'Downward' |
11 | TDM1 Attenuation Step Divider |
int | r/w | min=0, max=4095 |
0 |
12 | TDM1 Attenuation Initial Value |
int | r/w | min=0, max=262143 |
262143 |
13 | TDM1 Attenuation Step Up Factor |
int | r/w | min=0, max=262143 |
174762 |
14 | TDM1 Attenuation Step Down Factor |
int | r/w | min=0, max=262143 |
196608 |
15 | TDM1 Attenuation Step Target |
int | r/w | min=0, max=262143 |
16 |
16 | TDM2 Attenuation |
enum | r/w | #0 'Disabled', #1 'Enabled' |
#0 'Disabled' |
17 | TDM2 Attenuation Direction |
enum | r/w | #0 'Downward', #1 'Upward' |
#0 'Downward' |
18 | TDM2 Attenuation Step Divider |
int | r/w | min=0, max=4095 |
0 |
19 | TDM2 Attenuation Initial Value |
int | r/w | min=0, max=262143 |
262143 |
20 | TDM2 Attenuation Step Up Factor |
int | r/w | min=0, max=262143 |
174762 |
21 | TDM2 Attenuation Step Down Factor |
int | r/w | min=0, max=262143 |
196608 |
22 | TDM2 Attenuation Step Target |
int | r/w | min=0, max=262143 |
16 |
7.5.4.2 Source Code Structure
아래 테이블에는 드라이버 소스 파일이 나열되어 있다.
Table 85. Audio Mixer Driver Files
File | Description |
---|---|
sound/soc/fsl/fsl_amix.h | 공통 정의가 있는 파일 포 |
sound/soc/fsl/fsl_amix.c | Audio Mixer DAI Driver |
sound/soc/fsl/imx-amix.c | Audio Mixer Machine Driver |
Documentation/devicetree/bindings/sound/fsl,amix.txt | Audio Mixer 디바이스 트리 바인딩 문서 |
7.5.4.3 Menu Configuration Options
아래 Linux 커널 구성은 이 모듈에서 제공된다:
- CONFIG_SND_IMX_AMIX - Audio Mixer Driver 구성 옵션
- Device Drivers -> Sound card support -> Advanced Linux Sound Architecture -> ALSA for SoC audio support -> SoC Audio for Freescale i.MX CPUs -> SoC Audio support for i.MX boards with AMIX