7.5 Audio Mixer (AUDMIX)
7.5.1 Introduction
많은 애플리케이션에서 서로 다른 효과를 얻기 위해 둘 이상의 오디오를 믹싱해야한다. Audio Mixer를 사용하여 두 개의 오디오 스트림을 하나의 오디오 스트림으로 믹싱할 수 있다. Audio Mixer에는 2개의 시리얼 오디오 인터페이스가 있다. 이들은 2개의 Synchronous Audio Interface (SAI) 모듈로 구동된다. 각 입력 시리얼 인터페이스는 TDM 방식으로 프레임에 8개의 오디오 채널을 전달한다. Mixer는 두 인터페이스에서 해당 채널의 오디오 샘플을 단일 샘플로 믹싱한다. 믹싱하기 전에, 두 입력의 오디오 샘플은 구성에 따라 감쇠할 수 있다. Audio Mixer의 출력도 시리얼 오디오 인터페이스이다. 입력 인터페이스와 마찬가지로, 동일한 TDM 프레임 형식을 가진다. 이 출력은 오디오 코덱의 시리얼 DAC TDM 인터페이스를 구동하는 데 사용되며, CPU의 리드백을 위한 일반 오디오 SAI 모듈의 수신 경로와 함께 외부 핀으로도 전송된다.
Audio Mixer의 출력은 다음 세 가지 스트림 중에서 선택할 수 있다:
- 시리얼 오디오 입력 1
- 시리얼 오디오 입력 2
- 믹스된 오디오
믹싱 작업은 오디오 샘플링 속도와 무관하지만, 믹싱에 적합하려면 두 개의 오디오 입력 스트림이 TDM 프레임에서 동일한 채널 수와 동일한 오디오 샘플링 속도를 가져야 한다.
7.5.2 Block diagram
아래 그림은 Audio Mixer 블록의 상위 레벨의 구성을 보여준다.
7.5.3 Hardware Overview
믹서 블록에는 2개의 오디오 스트림을 위한 2개의 시리얼 오디오 입력 인터페이스가 있다. 그 중 하나는 일반적인 오디오용으로 사용되고 다른 하나는 safety tone(안전한 음정)용 이다. 시리얼 오디오 TDM 프레임은 각각 32비트의 8개 샘플을 포함할 수 있다. 처음 6개 샘플은 3개의 스테레오 DAC 용이다. 각 DAC는 왼쪽과 오른쪽 채널에 대해 구 개의 샘플을 사용한다. 마지막 2개의 샘플은 특수한 용도이고 향후 사용을 위해 유지된다. 오디오 믹싱 애플리케이션에서 두 개의 오디오 입력 스트림은 동일한 수의 채널과 프레임 속도를 가져야 한다. 프레임 형식은 아래 그림과 같다.
입력 TDM 프레임은 자체 인터페이스 비트 clock의 프레임 펄스에서 시작하는 32비트 샘플로 de-serialized(역직렬화) 된다. 각 샘플은 감쇠기를 통과한다. 감쇠기는 오디오 신호의 레벨을 줄인다. 이 처리를 감쇠(attenuation)라고 한다. 신호 감쇠는 오디오 샘플에 감쇠 값을 곱하여 수행된다. 감쇠 값은 감쇠기 출력에서 오디오 신호의 레벨을 정의한다. 감쇠를 활성화하거나 비활성화할 수 있다. 비활성화하면, 오디오 샘플이 변경 없이 전달된다. 활성화되면, 감쇠는 다른 시간에 감쇠 값을 정의(감쇠 프로파일이라고 함)하는 구성에 따라 수행된다.
2개의 오디오 스트림에 대해 2개의 독립적인 감쇠기가 있다. 2개의 감쇠기 출력은 믹싱에 사용된다. 믹싱은 두 감쇠기에서 해당하는 채널의 샘플을 추가하여 수행된다. 결과는 믹싱된 샘플 값을 제공한다. 그런 다음 오디오 샘플의 원하는 폭을 얻기 위해 양자화된다. 양자화된 샘플은 출력 샘플을 형성하기 위해 반올림된다. 반올림은 양자회된 샘플의 LSB에서 수행된다. 그런 다음 최종 샘플은 직렬화되고, 선택된 비트 clock이 있는 입력 인터페이스와 같이 동일한 프레임 형식으로 전송된다.
7.5.4 Software Overview
Audio Mixer 드라이버는 ALSA System on Chip (ASoC) 레이어에서 설계되어 있다. Audio Mixer용 ASoC 드라이버는 AudioMixer 입력을 위한 두 개의 재생 디바이스와 Audio Mixer 출력을 캡쳐하기 위한 하나의 캡처 디바이스를 제공한다. 재생 오디오 형식은 선형 PCM으로 16비트, 24비트나 32비트 폭의 오디오이다. 캡처된 오디오 형식은 16비트, 18비트, 20비트, 24비트나 32비트 폭의 선형 PCM 오디오 데이터이다.
7.5.4.1 User Interface
Audio Mixer 인터페이스는 amixer -c <audio mixer card> tool을 사용하여 사용자 공간에서 액세스할 수 있다. 아래 Audio Mixer 컨트롤은 사용자 공간에 노출된다.
Table 85. 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 86. 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