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

안녕하세요


Alsa driver 포팅하려고 하는데 녹음쪽이 잘 되지 않아서요


hardware/alsa_sound/alsa_default.cpp 에서 sampleRate를 44100으로 할때는 5초간 녹음하면 5초동안 재생이 되는데

sampleRate를 16000으로 바꾸면 5초간 녹음하면 1~2초 정도밖에 재생이 안되요


파형 비교해 보니까 44100일때는 제가 못주는 데이터를 0으로 처리해서 데이터가 띄엄띄엄있는 형태구요

16000일때는 파형은 유지되는데 3초분량을 1초만에 재생하다보니 소리가 이상하게 나와요


현재 증상이 sample rate와는 별도로 초당 데이터량이 정의되어 있는 것 같은데 설정 할 수 있는 방법이 있을까요??

그리고 Dummy.c 이용했을 때 녹음 데이터 흐름도 알려주시면 감사하겠습니다.


고도리

2012.08.06 22:29:55
*.200.239.234

1. android HAL 포팅이신가요? alsa driver 자체가 목적인가요?

즉, HAL을 test하시는 것인지? 아니면 ALSA의 녹음 기능만 테스트 하고 싶으신 것인지요?


2. 녹음을 어떻게 처리했는지에 따라 결과가 틀릴겁니다.


3. audio HAL에서 resampling 처리를 따로 하신 것인지? 아니면 어떤 장비, CPU를 쓰시는 것인지에 따라 조금씩 차이가 날 것이고요.


4. 초당 데이터 량은 간단하게 계산이 되기는 할 겁니다만 다른 계산이 있을지는 모르겠습니다.

보통 이렇게 계산합니다.


sampling rate * 채널수 * sample당 bytes수


안드로이드는 16bit pcm을 사용


5. dummy.c는 alsa에 있는 녀석인가요?

jaeokbr

2012.08.07 01:18:00
*.76.17.213

1. HAL 포팅 목적입니다.


2. dummy.c의 snd_pcm_ops안의 .copy함수에서 void __user *dst 파라미터로 받은 포인터에 Mic로 들어오는 데이터를 copy하는 방식으로 구현하였는데, 아래의 함수들에서 buffer데이터를 파일 변환하였을 때 제가 문의드렸던 사항들이 확인 되었습니다.(5초 분량이 1~2초 분량으로 변함)

frameworks/base/services/audioflinger/AudioFlinger.cpp

 -> status_t AudioFlinger::RecordThread::RecordTrack::getNextBuffer(AudioBufferProvider::Buffer* buffer)

 -> bool AudioFlinger::RecordThread::threadLoop()

hardware/alsa_sound/AudioStreamInALSA.cpp

 -> ssize_t AudioStreamInALSA::read(void *buffer, ssize_t bytes)


3. snd_pcm_ops안의 .copy함수에서 복사된 데이터를 어디서 받는지 확인이 안되어 추측일 뿐이지만 제가 데이터 확인 한 부분은 resampling된 데이터라 추측됩니다.


4. sampling rate 16000, 채널 1, SND_PCM_FORMAT_S16_LE type으로 설정하였습니다.

 sample당 bytes수에대해서는 위치 알려주시면 확인 하겠습니다.


5. dummy.c의 위치는 kernel/sound/drivers/dummy.c입니다. kernel에서 드라이버 형식으로 빌트인되어 있습니다.

고도리

2012.08.07 02:20:14
*.200.239.210

1. CPU에 따라 약간 동작이 틀릴수 있습니다.


2. AudioRecord class를 쓰셔서 특정 값들을 세팅한 후에 record 테스트를 부탁드립니다.


3. 1,2번과 연계되어 있는데, 44100->16k 변환을 audioflinger의 audioresampler에서 처리하는지 HAL에서 처리하는지에 따라 약간씩 틀립니다. --> samsung에서 release된 소스들도 마찬가지입니다. 저희는 삼성 소스를 사용하지 않습니다. 직접 만들어서 HAL에서 처리합니다.


4. Android는 기본적으로 16bit LE PCM을 사용합니다. 이 부분은 아마도 문제가 없을 듯 합니다.


5. dummy.c를 쓰시는 분을 꽤 오랜만에 봐서, buzzer와 같은 특수용도로 사용하는지에 대한 질문이었습니다.

위의 글을 보니 아닌 듯 싶네요.



파란새

2012.08.07 02:13:59
*.178.131.160

샘플링 주기를 변환하면 재생시간도 변할겁니다 ...

핸폰개발자

2012.08.07 03:28:09
*.111.135.254

안드로이드 audioflinger는 playback을 44100 이하는 무조건 업샘플링 시킵니다.

해당 파일은 audioresampler.cpp 이구요.

 

그럼으로 Audio Codec단에서 8k /16k으로 play를 시키고 싶으면 asoundconf 파일을 변경 하던지 SRC부분을

수정 하셔야 됩니다.

 

고도리

2012.08.07 09:29:29
*.127.19.87

제 경험상 말씀드리면.....레코딩시 옵션을 잘 못 주신게 아닐까 생각이 듭니다.


예를 들어 wav 파일의 헤더를 44100으로 해 놓고, 실제 data가 16000 이면 후딱 지나가거든요...^^

jaeokbr

2012.08.07 19:11:06
*.76.17.213

하루사이에 댓글이 많이 달렸네요 ^^ 다들 신경써주셔서 감사합니다.

말씀들중에 몇가지는 책 찾아보면서 테스트 해봐야 할거같은데


현재 제가 확인 한 바로는 AudioFlinger.cpp의 AudioFlinger::RecordThread::threadLoop(),

AudioStreamInALSA::read() 함수안에 buffer변수의 pcm데이터가 이미 다운샘플링 되어있는것 같아서요

Dummy에서 어떤루트를 통해 데이터가 전달 되는지 확인 중입니다.


AudioRecord, 샘플링 주기, asoundconf 쪽은 공부하면서 테스트 해보도록 하겠습니다.



고도리

2012.08.07 20:11:11
*.200.239.210

"AudioStreamInALSA::read() 함수안에 buffer변수의 pcm데이터가 이미 다운샘플링 되어있는것 같아서요"


라면.........HAL에서 손을 댔을 가능성이 높습니다.

왜냐하면, 보통 alsa-lib를 써서 downsampling을 잘 하지 않기 때문입니다.


platform과 소스 구조를 안 본 상태에서는 여기까지가 한계가 아닐까 싶습니다...^^

jaeokbr

2012.08.07 22:05:52
*.76.17.213

조언들 참고하여 찾아보도록 하겠습니다. 여기저기 관련된 소스파일들이 흩어져 있어서 찾기가 힘드네요 ^^


소스도 원본소스랑은 좀 다른것들도 있는거같아서 원인 파악하기가 더 힘든거 같아요.


신경 써 주셔서 감사합니다~

List of Articles
번호 제목 글쓴이 날짜 조회 수
5468 aesop2530 nand boot 소스파일 감사합니다. 그런데....ㅠㅠ [4] 칼마 2012-08-15 1410
5467 aesop2530의 nand를 256으로 바꿨는데... [2] 칼마 2012-08-11 1146
5466 [질문]안드로이드 프로그램에 작성에 대해서... [4] 만년설화 2012-08-11 1387
5465 How to run a script in the HAL layer ???? [1] Simba444 2012-08-10 1226
5464 ICS 의 Tiny Alsa 관련 문의 [6] Soyul 2012-08-10 2113
5463 리눅스 커널에서 코드 featuring 어떻게 하시나요? [7] 전유진 2012-08-10 1280
5462 QT에서 2D 가속을 사용하려면? 박영기 2012-08-09 716
5461 s5pc100 - 리눅스 단에서 v4l2 를 이용해 카메라 버퍼 접근.. [2] 딴따라 2012-08-09 1700
5460 특정 순간에 reset 이 안되는 문제 [7] 땜철학자 2012-08-08 1424
5459 AudioSink.cpp관련 질문 [4] ljcg 2012-08-08 1318
5458 S5PV210 보드의 NAND mtd driver 및 partition 관련 문의사항 [3] frog 2012-08-07 3844
5457 embedded linux 에서도 MSDN같은 함수 사전 같은 것이 있나요? [1] 혜민아빠 2012-08-06 1292
» Alsa record 관련 질문 드립니다. [9] jaeokbr 2012-08-06 1522
5455 S5PV210 CPU에서 LCD Pixel Clock 설정 관련 질문 [1] 김진만 2012-08-04 1631
5454 cp210x 드라이버 올리는게 잘 안됩니다. [1] 현쓰 2012-08-03 1966
5453 ffmpeg libstageFright Android 질문입니다. [4] 야호야호야 2012-08-01 1567
5452 s3c6410에 ucos를 올릴려고합니다. [7] Supsupi 2012-07-31 1503
5451 s3c6410 lcd 컨트롤러 및 안드로이드 사용자 UI 화면 지정 방법 [4] 만년설화 2012-07-30 1304
5450 Fastboot 오류 [3] 잭크 2012-07-28 2223
5449 i2c 에 관한 질문입니다. [2] NNEUL 2012-07-26 1650

사용자 로그인