기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

망고210 보드를 사용하고 있습니다.


1. ALSA library와 Android Audio HAL부분에 대해서 보고 있는데 아래의 내용에 대한 원인을 알고 계시는 분 있나요?

2. /system/etc/asound.conf 파일은 어떻게 설정 되는 것인가요?



어플에서 Speaker 볼륨을 조절하기 위해서 AudioFlinger를 조절하기 위해서 setMasterVolume을 사용을 하려고 합니다. AudioSystem 서비스에서 setStreamVolume -> setMasterVolume으로 조절을 하였습니다.

HAL부분(./external/libaudio/AudioHardwareALSA.cpp)에 있는 setMasterVolume()에서 alsa-api를 사용하지 못합니다.


----------------------------------------------------------------------------

status_t ALSAMixer::setMasterVolume(float volume)
{
    mixer_info_t *info = mixerMasterProp[SND_PCM_STREAM_PLAYBACK].mInfo;
    if (!info || !info->elem) return INVALID_OPERATION;

    long minVol = info->min;
    long maxVol = info->max;

    // Make sure volume is between bounds.
    long vol = minVol + volume * (maxVol - minVol);
    if (vol > maxVol) vol = maxVol;
    if (vol < minVol) vol = minVol;

    info->volume = vol;
    snd_mixer_selem_set_playback_volume_all (info->elem, vol);

    return NO_ERROR;
}

----------------------------------------------------------------------------

원인을 알수가 없어서 아래 부분의 PCM->Playback으로 변경을 하여 alsa-api를 사용할 수 있습니다.


static alsa_properties_t
mixerMasterProp[SND_PCM_STREAM_LAST+1] = {
    { ROUTE_ALL, "alsa.mixer.playback.master",  "PCM",     NULL},
    { ROUTE_ALL, "alsa.mixer.capture.master",   "Capture", NULL}
};



아래 log는 PCM으로 설정된 경우 입니다.


D/AudioHardwareALSA( 2000): Mixer: element name: 'Headphone'
D/AudioHardwareALSA( 2000): Mixer: element name: 'Playback'
D/AudioHardwareALSA( 2000): Mixer: element name: '3D'
D/AudioHardwareALSA( 2000): Mixer: element name: 'ALC Attack'
D/AudioHardwareALSA( 2000): Mixer: element name: 'ALC Decay'
D/AudioHardwareALSA( 2000): Mixer: element name: 'ALC Hold Time'
D/AudioHardwareALSA( 2000): Mixer: element name: 'ALC Max Gain'
D/AudioHardwareALSA( 2000): Mixer: element name: 'ALC Min Gain'
D/AudioHardwareALSA( 2000): Mixer: element name: 'ALC Target'
D/AudioHardwareALSA( 2000): Mixer: element name: 'Left Output Mixer Boost Bypass'
D/AudioHardwareALSA( 2000): Mixer: element name: 'Left Output Mixer LINPUT3'
D/AudioHardwareALSA( 2000): Mixer: element name: 'Noise Gate Threshold'
D/AudioHardwareALSA( 2000): Mixer: element name: 'Right Output Mixer Boost Bypass'
D/AudioHardwareALSA( 2000): Mixer: element name: 'Right Output Mixer RINPUT3'
D/AudioHardwareALSA( 2000): Mixer: element name: 'Speaker'
D/AudioHardwareALSA( 2000): Mixer: element name: 'Speaker AC'
D/AudioHardwareALSA( 2000): Mixer: element name: 'Speaker DC'
D/AudioHardwareALSA( 2000): Mixer: master 'PCM' not found.
D/AudioHardwareALSA( 2000): Mixer: route 'Earpiece' not found.
D/AudioHardwareALSA( 2000): Mixer: route 'Speaker' found.
D/AudioHardwareALSA( 2000): Mixer: route 'Bluetooth' not found.
D/AudioHardwareALSA( 2000): Mixer: route 'Headphone' found.
D/AudioHardwareALSA( 2000): Mixer: route 'Bluetooth A2DP' not found.
D/AudioHardwareALSA( 2000): Mixer: element name: 'Playback'
D/AudioHardwareALSA( 2000): Mixer: element name: 'Capture'
D/AudioHardwareALSA( 2000): Mixer: master 'Capture' found.
D/AudioHardwareALSA( 2000): Mixer: route 'Capture' found.
D/AudioHardwareALSA( 2000): Mixer: route '' not found.
D/AudioHardwareALSA( 2000): Mixer: route 'Bluetooth Capture' not found.
D/AudioHardwareALSA( 2000): Mixer: route 'Capture' found.
D/AudioHardwareALSA( 2000): Mixer: route 'Bluetooth A2DP Capture' not found.
D/AudioHardwareALSA( 2000): mixer initialized.
D/AudioHardwareInterface( 2000): setMode(NORMAL)


고도리

2012.02.08 12:11:44
*.127.19.87

음.....저도 일일이 소스를 보면서 비교해봐야 답을 할 수 있을 듯 합니다만(현재......집입니다...ㅠ.ㅠ)


1. asound.conf 는 주로 audio 경로 설정 혹은 시나리오를 지정할 때 사용합니다. mixer 세팅 부분이 있는지는 다시 함 봐야겠네요.


2. static alsa_properties_t

mixerMasterProp[SND_PCM_STREAM_LAST+1] = {
    { ROUTE_ALL, "alsa.mixer.playback.master",  "PCM",     NULL},
    { ROUTE_ALL, "alsa.mixer.capture.master",   "Capture", NULL}
};


의 내용을 이용해서 alsa mixer를 제어하게 되어 있는데, PCM이 동작하지 않고, Playback이 동작한다는 얘기는 alsa driver,의 구성이 alsa hal과 맞지 않는다는 것입니다.


3. alsa driver와 alsa hal과의 관계는 alsa hal이 alsa driver를 이용하는 구조입니다.


4. 해서 android에서는 alsa hal에 맞춰서 alsa driver를 구현해 주는게 걱정을 더는 방법 중 하나입니다.



List of Articles
번호 제목 글쓴이 날짜 조회 수sort
5828 [완료]printk & UART질문 [2] 조성철 2007-06-28 1874
5827 VMWARE 에서 이동식메모리가 인식이 되지 않는데..... [1] blue0sky 2014-01-07 1873
5826 안드로이드 sd카드 인식 문제 [2] 누구누구 2011-08-30 1872
5825 ARM에서 modified virtual address와 process id가 왜 필요할 까요... [3] 이종진 2009-03-16 1872
» Android - ALSA HAL 관련 문의 [1] 새희망 2012-02-08 1870
5823 MP2530에 LAN91C113 드라이버 질문 [1] 정순철 2009-08-01 1869
5822 [완료] 이솝 3차 보드 구입하기가 힘들어서 PCB를 제작할려고 하... [6] 황순일 2007-06-05 1864
5821 [ARNDALE BOARD] 오디오 관련해서 문의드립니다. file [3] 강현성 2013-02-05 1863
5820 vold 사용시 문제. [2] 김종현 2009-08-06 1863
5819 [Linux] SMSC911x Driver Upgrade 관련 질문... [3] 스페셜 2012-04-19 1862
5818 안드로이드 개발 서버 구축 (우분투 설치) [5] jacket 2011-02-17 1860
5817 TCPIP 통신에 관해 질문있습니다. [6] SpecialCase 2014-01-09 1858
5816 u-boot 에서 usb 메모리스틱 읽기...<==[완료!] [3] 이율삼 2006-08-12 1856
5815 android key up timeout 값 관련 [2] 신현호 2013-02-28 1855
5814 커널 패닉에러.. [1] 곰비 2011-09-27 1854
5813 u-boot ext3format, fastboot 문제점 nsys 2013-02-19 1853
5812 S3C6410에 Micro SD를 쓰는데 에러 발생 윤상인 2013-12-05 1847
5811 libusb 보드에서 드라이버 인식 [1] pedor11 2014-01-29 1846
5810 ethernet 초기화 [1] 권오혁 2013-04-20 1846
5809 디바이스드라이버 등록하는 방법 [2] 갱고 2011-12-16 1846

사용자 로그인