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

Exynos 4412에 codec칩은 MAX98090을 사용을 하고 Interface는 I2S입니다.


44.1 kHz나 48 kHz는 PC에서와 같이 문제가 없이 Play가 되나

34초 16 kHz파일을 play하면 Exynos 4412에서는 31초 ~ 32초에 play가 됩니다.

PC와 동시에 play해 보변 아주 미세하게 빠르게 play됨을 알 수 있습니다.


Odroid-U에 uBuntu version으로 확인을 해 보니 odroid에서는 같은 길이로 play가 되어

확인해 본 결과 odroid에서는 16 kHz 파일을 up sampling(48 kHz)로 하는 것 같습니다.


혹시 16 kHz 파일을 무조건 48 kHz로 up sampling을 해서 play하는 방법이 있는지요?


sound는 alsa를 사용하였고 test는 aplay를 통해 했습니다.


고도리

2015.05.21 07:06:03
*.200.239.210

ubuntu는 아마도 pulseaudio를 써서 play하지 않나 싶습니다.

해서, 16khz --> 48khz로 나오지 않나 생각이 됩니다.


가장 확실한 방법은 I2S의 LRCLK를 스코프로 찍어서 16khz가 나오는지 확인하는 것입니다.


아니면 alsa를 이래저래 세팅을 해야하는데, 그다지 좋은 자료가 없습니다...

이동희

2015.05.21 21:38:04
*.90.129.146

LRCLK는 16kHz로 잘 나옵니다. 8kHz, 32kHz, 44.1kHz, 44kHz, 96kHz는 문제가 없습니다.

CDCLK도 Exynos 4412가 지원을 하는 4.0960 MHz, 6.1440 MHz, 8.1920 MHz, 12.2880 MHz 모두 확인 결과

같은 결과가 나옵니다.

쾌도난마

2015.05.22 00:23:13
*.49.29.2

odroid 에서도 console 에서 aplay 를 통해 play 하면 어떤가요?

aplay <-> driver <-> codec 사이에 리샘플러가 없을 거라 생각 됩니다.

이동희

2015.05.22 19:18:12
*.90.129.146

저도 쾌도난마님과 같은 생각으로 테스트를 했었습니다.

그런데 resample이 되더라구요. 현재 저의 platform은 linux에 qt 환경에서 application은 aplay source 참조 하여

wave 파일을 play하도록 되어 있습니다.


odroid console에서 aplay로 play시에 I2S device driver 및 codec의 hw_params() 에서 printf 문으로 sample rate를

확인 했습니다.

쾌도난마

2015.05.22 20:32:49
*.49.29.2

(user space alsa 쪽 경험이 많이 없어서 답변이 정확하지 않을 수 있습니다.)

제가 아는한 그 사이에 리샘플하는 부분이 없는 것으로 알고 있습니다.

alsa conf 에 dmix 가 default 되어 있지 않나요?

aplay 의 wave 가 바로 hw 로 가지 않고 sw 에 의해서 한번 resample 되고 난 뒤에 가는 것 같습니다.

간단하게 tinyplay 크로스 컴파일 해서 넣은 뒤에 

오드로이드 콘솔에서 한번 돌려 보셔서 테스트 해보시는 건 어떠신지요.


같은 환경에서 레퍼로 삼은 보드와 타겟 보드간 16Khz 검증해 보는 겁니다.

Odroid 에서 16Khz play 하면 resample 되니 resample 없애고 한번 해보셔서

같은 문제가 발생하는지 살펴보시면 좀더 추적하는데 용이하지 않을까요;;


아래 쓰신 내용도 읽어 보았는데, 문제가 좀 고달프네요,,

패밀리 샘플레이트 8K, 32K는 문제 없이 잘 동작하는데 16K 만 유독 문제가 발생한다?

HW 문제는 아닌거 같은데...

16Khz test wave file 을 한번 다른 걸로 교체해서 한번 해보시는것도.............


고도리

2015.05.22 09:20:07
*.200.239.210

통상적으로 resampler의 경우는 audio server의 경우를 써야하는 경우에만 사용합니다.

대표적인 것이 pulseaudio나 android에서는 audioflinger입니다.


스코프로 16khz로 나온다면 정확한 내용으로 보여집니다. 왜냐하면 scope를 의심하기는 힘들고,

데이터의 양이 달라졌다면 그것도 문제이기 때문입니다.


CDCLK보다는 정확하게, BCLK를 찍어 보셔야 합니다.

LRCLK * 32 가 나오는지 확인해 봐 주시기 바랍니다.


제가 오디오만 근래 미친듯이 보고 있는데, 음.....................scope까지 의심하기에는.....^^


이동희

2015.05.22 19:14:44
*.90.129.146

아래와 같이 16 kHz일때 BCLK도 512 kHz로 제대로 확인 됩니다. 또한 CDCLK의 경우 Max98090에서는

CDCLK를 Master Clock으로 받는데 10 MHz ~ 60 MHz 까지 입니다. 그래서 Exynos 4412의 768 fs를 사용하여

12.2880 MHz로 설정했습니다. (아래와 같이 3개 mode를 다 테스트를 해 보았습니다.)

BCLK    : 512 kHz

LRCLK :  16 kHz

CDCLK는 256fs (4096 kHz), 512fs (8192 kHz), 768fs (122880 kHz)


현재까지 codec 칩쪽에서 약간 끈기는 문제점 및 빠르게 재생되는 문제로 의심을 했었는데 180s짜리

를 play하면 161s로 재생을 합니다. 이런 경우 Exynos의 I2S 쪽 code를 의심해야 하는가요?


쾌도난마

2015.05.22 20:41:55
*.49.29.2

실제 codec에서 나오는 소리와 I2S 신호는 무시하고

눈으로만 플레이 시간을 확인해 보시는 건 어떤가요? (파형도 무시)

asoc 쪽 start, stop 부분에 printk 로만 play 시간 확인하시고,

아래와 같이 조합으로

LRCLK; fs

BCLK; 32fs, 64fs

MCLK; 128fs, 256fs, 512fs, 768fs

printk play 시간이 다 동일한지 한번 살펴 보세요...

(AP Side I2S 및 code 검증 시나리오네요..... ㅋ)


이동희

2015.05.22 21:12:22
*.90.129.146

asoc의 start/stop 부분에 printk를 이용하여 kernel time으로 확인을 해 보았습니다.(30초 기준)

  8 kHz : 녹음/재생 : 30.x 초

 16 kHz : 녹음 : 30.x 초

                재생 : 26.x 초

 48 kHz : 녹음/재생 : 30.x 초


여러 16 kHz Sampling 된 wave 파일을 갖고 테스트를 했는데 16 kHz 재생에서만 문제가 발생합니다.

쾌도난마

2015.05.22 21:19:31
*.49.29.2

bclk 32fs, 64fs

mclk 128,256,512,768 은 어떤가요?


이상황에서 의심할 수 있는건

I2S 가 에 공급되는 MCLK 가 너무 고속이라서 (768 fs 쓴다고 하시길레..)

캐치를 잘 못하는 것 아닐까? 라는 의심때문에 그렇습니다.


이동희

2015.05.22 22:13:06
*.90.129.146

Exynos 4412가 128 fs는 지원을 하지 않고 256fs, 384fs, 512fs, 768fs를 지원합니다.

테스트 결과 동일 합니다.

저희가 사용하는 max98090의 MCLK 범위가 10MHz ~ 60MHz 까지여서 768fs를 사용해야 12.288 MHz를 만들 수 있습니다.

쾌도난마

2015.05.22 22:31:38
*.49.29.2

음... 참 이유를 알수가 없네요.. ㅎㅎ

확실해진건 AP쪽 문제란 것만 확실해 졌네요... DMA 문제 일려나요? 흠...


만약 저라면.....

16Khz 2bytes 2ch, 1초짜리 pcm data를 파형으로 쉽게 알아 볼수 있도록 data를 만들어서 구분 지어서

어느 부분에서 I2S data가 없어지는지(전송안하는지) 일일이 스코프로 살펴 보는 수밖에 없을 것 같네요.


혹 나중에라도 원인이 밝혀지면 좀 알려주세요~


엄청 특이한 케이스네요.. ㅎㅎ

고도리

2015.05.23 04:17:56
*.76.159.163

정확한 문제는....실제로 봐봐야 알 수 있을 듯 합니다만


16khz에서만 문제라면 이상한 일입니다. 8khz나 다를 바 없거든요. 


데이터 클럭이 빨라진 상황이거나, 아니면 코덱이 빨리 내보내는 것인데 코덱은 빨리 내 보낼 이유가 없을 듯 합니다.

참 애매한 경우네요.



List of Articles
번호 제목 글쓴이 날짜 조회 수
6208 smsc9220 질문 file [2] *김종원 2015-07-24 203
6207 임베디드제품에 안드로이드 앱의 install이 가능한가요 ? [3] 김진희 2015-07-24 214
6206 kernel booting시 다운현상 문의 [6] 수위타자 2015-07-24 229
6205 리눅스 커널 버전이 벌써 4.x 대네요.. [1] 김민욱 2015-07-21 384
6204 Touch screen에 관한 문의드립니다. [2] 아이탱 2015-07-18 289
6203 안드로이드 보드 해상도 문의 드립니다. [2] 새삶 2015-07-16 319
6202 리눅스 드라이버와 안드로이드 어플리케이션 간 파일 공유 문제 [3] vain 2015-07-16 338
6201 커널컴파일 하면 모듈이 어디에 들어가게 되나요? [1] DavidKim 2015-07-04 238
6200 wince 6,0 LCD 포팅 질문 file [3] 깜성 2015-06-19 626
6199 flow control에 관해서 여쭤 보고자 합니다. 열심히 2015-06-17 113
6198 리눅스 루트 파일 시스템 질문드립니다. [1] 하하호호하하 2015-06-17 315
6197 v4l2를 이요하여 usb캠 출력하는데 영상이 깨지는현상이 나타나는데 ... file [1] biokk 2015-06-14 412
6196 리눅스에서 /dev/video 와 /dev/bue/usb/ 의 상관관계를 알수 있는 방... [1] pedor11 2015-06-08 259
6195 안드로이드 센서 데이터 강제 발생하는법에 대해 질문합니다. [1] ImYeol 2015-06-03 634
6194 구글한글입력기 라이센스 잘 아시는 분? [2] 엘카 2015-06-02 453
6193 임베디드 안드로이드, 스마트폰 안드로이드 동작이 많이 다른가요? [3] ice179 2015-05-26 461
6192 안드로이드 네비게이션 바 기본 위치 설정 관련 질문 살균세탁 2015-05-23 669
6191 android 에서 wifi ap list 기 안 나타나는 문제 [2] MrWho 2015-05-21 391
6190 android uenvt에 내용을 추가 했는데요 맞는 방법인가요? [1] pedor11 2015-05-20 121
6189 kernel testing & debugging, J-Link [2] *김종원 2015-05-20 237

사용자 로그인