언어 설정

Menu
Sites
Language
에뮬레이터와 폰(z1)의 차이점?

안녕하세요!!

타이젠 네이티브 애플리케이션으로 midi 파일 관련 앱을 만들고 있는 한 학생입니다.

타이젠 홈페이지에서는  폰에서 midi 파일을 지원한다고 적혀는 있는데

실제적으로 경로를 줘서 재생시켜보니 지원하지 않는 파일이라고 오류코드를 던지더라구요..

그래서 midi를 재생하기 위해서 할 수 없이 midi->wav로 변환하는 소스를 추가하였습니다.

에뮬레이터에서는 정상적으로 변환되고, 플레이까지 가능하였는데.. (리눅스에서도 정상 변환 됩니다..)

폰에서는 파일이 심하게 깨져서 wav파일은 만들어지지만(어떤경우는 4kb, 어떤경우는 200mb) 재생이 안되는 형태로 변환이 됩니다.. 

똑같은 파일(소스)인데 폰에선 안되고, 에뮬레이터에서 되는 이유를 잘 모르겠습니다.. 

변환하는 과정은 .mid 파일을 읽고 해석해서 .wav파일로 계속 계속 쓰는 과정으로 되어 있구요.

에뮬레이터와 폰의 크게 다른 점이 있을까요??  

 

 

 

답변 바로가기

Responses

4 댓글
pius lee

어떤 방식으로 play하고 계시고 변환은 어떻게 하고 계신지 올려 주셨으면 합니다.

혹시 Tizen 홈페이지 어느곳에서 midi 파일을 지원한다고 보셨는지 알수 있을까요?

 

https://source.tizen.org/sites/default/files/page/tizen-2.3-compliance-specification-for-mobile-profile-v1.0.pdf

2.3 공식 스펙을 보면 2.14 Multimedia에 있는 지원 format에 midi는 없는것을 알수 있습니다.

즉 Tizen 2.3은 공식적으로 미디를 지원하지 않습니다. 

 

기본적으로 General Midi를 재생하기 위해서는 Midi resource가 존재해야 하는데, 그게 없다면 Midi를 재생할 수 없으며,

midi -> wav 변환이 될리 없을것 같습니다. 스펙상 지원이 안된다니, 없을것 같지만, 제가 모르는 경로가 있을 수 있으니,

시도 해보신 play, 변환 방식을 알려 주시면 감사하겠습니다.

Hyun Ho Lee

안녕하십니까!! 답변이 느려서 죄송합니다..

이렇게 멋진 pdf가 있엇다니 ..  tizen 2.3 미디어 플레이어 관련하여 구글을 엄청 열심히 찾았었는데 발견을 못했었거든요 .. 제 능력부족인가봅니다 ㅠㅠ

우선 타이젠 홈페이지에서의 코덱 소개 링크입니다.

https://developer.tizen.org/ko/community/tip-tech/audio-video-playback-tutorial

지원 코덱은 MP4, 3GP, AVI, WM 7/8, ASF, MKV, MP3, AAC, WMV, AMR, WMA, OGG, WAV 라 나와있어 SMF 형식은 지원이 안되나 싶었는데,

아래 표로  설명란에 

차이점대상:

- FFmpeg 플러그인 대신 h/w 코덱 사용

- 최대 WMA9까지 사용 가능

- MMF, IMY, MIDI, SMAF 형식 지원

에뮬레이터:

- 최대 WMA8까지 사용 가능

 

MIDI 형식 지원이 나와있길래 '어랏? 지원하는건가' 라고 생각이들어 

res에 .mid 파일을 넣고 Player API 로 재생을 해본 결과 오류코드는 지원하지 않는 형식이라 나오는걸 보고서야 지원을 안하는것을 알게되었네요 ..

제가 저위의 설명을 잘못 이해 한건지 잘 모르겟습니다..

 

midi 파일 읽어서 내용 분석하는데는 문제가 없었으나, 

저의 목적은 midi 재생 개발이 목표는 아니었기 때문에 github에서 .mid를 .wav로 바꿔주는 C 소스코드를 급하게 구해보았습니다.

https://github.com/sadagussy/mid2wav 

우분투 GCC에서 돌려보니 잘 변환이 되었고, 재생도 잘되길래 (원래 깃허브의 소스를 조금 수정했습니다.. 아마 저 소스를 바로 돌리면 리눅스에서도 재생이 깨져서 나올겁니다.. 옵션을 조금 다르게 주어야 리눅스에서 말끔히 변환이 되더라구요..) 

바로 에뮬레이터로 가져가서 재생시켜 보았더니 에뮬레이터의 tizen player에서도 재생이 잘 되었습니다.

그러나 실제 Z1폰으로 옮겨서 변환을 해보니 우선 변환 속도가 비정상적으로 느렸고, (에뮬레이터는 4초, 폰에서는 몇분??) 변환 후에 재생해보니 재생이 되질 않았습니다.

생성된 파일의 hax에디터로 들여다보니 wav파일의 헤더 부분으로 추정되는 부분(?)까지만 변환이 되고 핵심적인 파형 부분의 정보는 아예 쓰여지질 않더군요.. 

이 소스의 특징은 midi 파일의 정보를  조금 조금씩 읽어서 wav파일을 조금 조금씩 쓰는 형식으로 이루어진 것 같았습니다. 소스 이해는 wav 파일 구조를 잘 몰라 원리 이해는 못했구요.. 

혹시나 해서 저 변환소스를 폰에서 돌렸을때 디버깅을 해보았습니다.

확인해보니 midi파일을 읽어들이는 것이 잘못되고 있는게 보였습니다,. 

이해하려면 머리도 아파오고 제가 가지고 있는 지식으로는 무리라고 판단하여 이 방식은 안쓰는 방향으로 했습니다. 그래서 그냥  앱에서 ogg와 midi를 같이 제공하는 식으로 해서 midi는 음을 분석하고, ogg를 재생하는 방식으로 문제를 해결했습니다만... 

저의 궁금증은 똑같은 소스인데 wav형식의 변환이 에뮬레이터에서는 정상적으로 잘 변환이 되는데  폰에서 안되는 이유를 잘 몰라 질문을 드렸습니다 ㅠㅠ..

운영체제 명령체제가 달라서 일까 생각이 들었는데.. 하하하 이부분은 제 지식범위 밖인것 같습니다.

 

여태 부족한 영어실력으로 사소한 질문을 올렸으나 이번 주제에 대해서는.. 영어로 설명하기가 힘들어 쥐푸라기라도 잡는 심정으로 한글로 올렷는데

이렇게 관심을 가져주신 분이 계셔서 너무 감사하고 존경스럽습니다!!

다시한번 답변 정말 감사합니다!!!!

 

 

Mark as answer
pius lee

일단 하드웨어 서포트를 얻어서 PCM 을 얻어서 WAV로 저장하는 것인줄 알았는데, sadagussy/mid2wav는 소스를 대충 보니, 직접 wav 신서사이징을 하는군요.

느린게 이해가 되네요, 근대 음질이 왜 나뻐지는진 잘 모르겠는데, 코드에 타이밍 이슈가 있을듯 하는 생각이 좀 듭니다.

일단 알려주신 주소의 support table은 그 주소의 자료 자체가 web application 자료이므로, webview에서 뭔가 해서 support 하거나 web app도 제대로 지원 안될 가능성이 있군요.

일반적으로 MIDI는 아시겠지만, 음원 자체를 가지고 있는것이 아니라, 음계에 대한 정보만 가지고 있기 때문에,  이를 재생 할때는 하드웨어에서 서포트 하는 음원으로 재생을 하거나 소프트웨어에서 렌더링 하는 음원으로 재생 해야 합니다.

보통 리눅스에서 MIDI를 소프트웨어 랜더링 해줄때는 Timidity나 FluidSynth를 씁니다.

일단 저도 두개 다 제대로 써본게 아니기 때문에, 그나마 볼만한 소스가 좀 있는 FluidSynth를 추천 해 드립니다.

http://fluidsynth.sourceforge.net/api/

물론 Timidity나 FluidSynth의 다른 자료는 구글링 하시면 더 나올테고, 둘다 wav 신서사이징을 직접 런타임에 하는건 아니기에 SoundFonts를 쓰고 있는걸로 알고 있습니다.

아마 런타임에 직접 wav를 생성하는게 아니기에 속도면에서 월등할 것이지만, 상용 앱에서 사용하실 것이라면 SoundFonts의 라이센스를 잘 보셔야 할것 같습니다.

Hyun Ho Lee

정말 좋은 가르침 주셔서 감사합니다!! 

저는 웹앱에서 지원되면 네이티브도 같이 지원할꺼라 생각했는데 아니었군요..흐흐

Timidity를 써보긴 했엇는데 makefile 생성에서 어떤 파일 하나가 존재하지 않아 자꾸 컴파일 에러가 떠서 중간에 하다가 포기하고 mid2wav를 찾아 썼었는데

굉장히 느린작업인지도 모르고 막 썻네요 ㅋㅋㅋ 거기에  코드타이밍 문제까지 짚어주시다니.. 생각도 못했습니다 ㅠㅠ 

정말 감사합니다. 앞으로 더 많이 배워야겠습니다..  

FluidSynth라는 소스를 봐보니 api 설명이 친절하게 잘 되어있네요!!

한번 꼭 적용시켜보겠습니다.. 

언젠가 타이젠이 midi 를 지원하는 날이 오겠죠 ㅎㅎㅎㅎ 정말 좋은 답변 해주시고 신경써주셔서 다시 한번 감사드립니다!!!