MP34 MP3 현재 재생시간 계산하기 (플레이타임) MP3를 재생하다 보면 현재 재생시간을 표시해줘야 한다. 이를 계산하는 방법이 간단하게는.. 재생이 되면 타이머를 써서, 멈출때까지 타이머로 보여주는 방법이 있는데 문제는 지정한 시간으로 재생하고자 할때는 이 방법은 사용할수가 없다. 그래서 조금 귀찮더라도 계산을 통해 얻어야 해야 한다. 우선 MP3 파일을 재생하기 전에 얻을 수 있는 정보는 다음과 같다. 총 재생시간 파일 크기 그외 음원 정보 그리고 재생중에는 현재 파일의 오프셋 (seek) 을 알 수가 있다. 현재 오프셋이 파일의 절반되는 위치에 있으면 4분짜리 음원일 때 2분을 나타내며, 1/4의 위치에 있으면 1분을 나타낸다. 그래서 비율을 계산하면 다음과 같다. 재생 시간 비율 = 현재 파일 오프셋 / 전체 파일 크기 이제 비율을 전체 재생 시.. 2022. 1. 24. MP3 총 재생 시간 계산하기 MP3 파일의 총 재생 시간을 구하는 방법은 다음과 같다. 총 재생시간(초) 계산식 1 = ( 파일 크기 - ID3를 제외한 첫 MP3 프레임 시작 offset) * 8 / 비트레이트 파일크기 : 파일 전체 크기 ID3를 제외한 첫 MP3 프레임 시작 offset : 첫 번째 MP3 Sync word 가 시작하는 파일 오프셋 비트레이트 : 음원의 비트레이트 (192kbps 등) 예를 들어 파일 크기가 6013734byte 이고, 비트레이드가 192 kbps일때, 시작 offset이 138 이면 ( 6013734 - 138 ) * ( 8 / 192000 ) = 250.56 이 나온다. 분 단위로 변경 하면 250 / 60 = 4분, 250 % 60 = 10초 즉, 4분 10초 짜리 음원이 된다. 단 C언어.. 2022. 1. 24. 펌웨어에서 FAT파일시스템의 확장자 구분 파일 확장자란 해당파일의 종류를 표시하기 위해 사용한다. FAT에서는 기본적으로 파일명은 8자리, 확장자는 3자리를 사용했으나, 긴 파일명도 지원하기에 파일명도 255자, 확장자도 .xlxs 같이 4자리도 사용한다. 이번에 하는 프로젝트에서 USB 메모리 스틱에서 특정 파일 리스트를 정리하는 함수가 필요했다. 음악파일인 MP3만 정리해서 파일 리스트를 뽑아주는 함수였다. 폴더내 파일중에 확장자 .mp3 만 찾아 변수에 정리만 하면 되는데, 특정mp3들이 추가가 안되는 이슈가 발생했다. mp3를 구분하는 함수는 다음과 같다. bool APP_SDCARD_AUDIO_Card_isSupportedAudioFile(int8_t *name) { int i = 0; if(name == NULL) return fal.. 2022. 1. 18. Helix MP3 Decoder 와 ID3 처리 요즘은 원만한 디바이스에도 리눅스가 포팅되기에 오디오나 비디오 코덱 적용이 어렵지 않다. 하지만 아직도 펌웨어로 오디오 코덱을 개발해야 하는 경우도 있고, MP3를 재생하기 위해 Helix MP3 Decoder를 포팅하여 사용했다. https://github.com/ultraembedded/libhelix-mp3 포팅방법에 대해서는 그다지 복잡하지 않고, 인터넷에 샘플 소스가 많아 찾기 어렵지 않으며 http://ww1.microchip.com/downloads/en/Appnotes/01367A.pdf https://www.silabs.com/documents/public/application-notes/an1112-efm32-helix-mp3-decoder.pdf문서들을 참조하면 좋다. 또 MP3 대한.. 2022. 1. 18. 이전 1 다음