기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
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를 통해 했습니다.
(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 을 한번 다른 걸로 교체해서 한번 해보시는것도.............
통상적으로 resampler의 경우는 audio server의 경우를 써야하는 경우에만 사용합니다.
대표적인 것이 pulseaudio나 android에서는 audioflinger입니다.
스코프로 16khz로 나온다면 정확한 내용으로 보여집니다. 왜냐하면 scope를 의심하기는 힘들고,
데이터의 양이 달라졌다면 그것도 문제이기 때문입니다.
CDCLK보다는 정확하게, BCLK를 찍어 보셔야 합니다.
LRCLK * 32 가 나오는지 확인해 봐 주시기 바랍니다.
제가 오디오만 근래 미친듯이 보고 있는데, 음.....................scope까지 의심하기에는.....^^
아래와 같이 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를 의심해야 하는가요?
ubuntu는 아마도 pulseaudio를 써서 play하지 않나 싶습니다.
해서, 16khz --> 48khz로 나오지 않나 생각이 됩니다.
가장 확실한 방법은 I2S의 LRCLK를 스코프로 찍어서 16khz가 나오는지 확인하는 것입니다.
아니면 alsa를 이래저래 세팅을 해야하는데, 그다지 좋은 자료가 없습니다...