2010-12-30 11 views
1

인사의 배열로 음악을 분석하고 나는 컴퓨터 스피커으로 음악을 재생할 수 있습니다.어떻게이 <strong>낮은 수준</strong> 프로그래밍 프로젝트에서 일하고 있어요</p> <p>, 주파수와 그 노트의 지속 시간

는 이미 (timer2 포함) 스피커를 사용할 수있어와 노래는 다음과 같은 방식으로 표현된다 :

note_t *music; 

note_t는 메모를 대표하고 그것의 화합물로 :

typedef struct { 
    int freq; /* note frequency */ 
    int dur; /* note duration in miliseconds */ 
} note_t; 

이제 음악 파일에서 음표의 빈도와 지속 시간을 얻는 가장 좋은 방법은 무엇입니까?

미리 감사드립니다.

편집

약간의 의심을 명확히하려면, 내가 알고 싶은 것은 표시된 위의 구조로 노래를 만드는 데 필요한 정보를 얻을 수있는 가장 좋은 형식입니다.

+4

음악 파일의 형식에 따라 달라집니다. – aschepler

+4

이것은 매우 사소한 일입니다. – Falmarri

+4

이것은 명시된대로 대답 할 수 없습니다. –

답변

1

anatolyg 님의 답변이 좋다. 이 작업이 얼마나 복잡한지를 보여주고 싶습니다. 영감을 얻기 위해 MIDI를 살펴보십시오.

http://en.wikipedia.org/wiki/Musical_Instrument_Digital_Interface

MIDI 파일은 노트와 (예를 들어, 속도, 피치 벤드, 변조를 재생하는 등의 미묘한 차이를 설명하는 추가 정보를 많이 저장, 음악 소프트웨어의 "가상 악보"로 사용할 수 있습니다 에). 여러 악기와 폴리포니로 음악 전체를 저장하기 위해 제작되었습니다.

+0

나는 MIDI to txt 변환기 (http://en.nemidi.com/conversor/mid2txt.html)를 사용하고 있었다. - MIDI notes와 그 duration을 포함하는 많은 정보를 가지고 txt를 만든다. 그런 다음 음을 해당 주파수로 변환했습니다. 문제는 최종 곡이 원래의 MIDI보다 훨씬 빠릅니다. –

+0

각 주파수의 지속 시간을 늘립니다. 말하자면 각 지속 시간을 0.7로 곱하면 각 지속 시간이 느려집니다. 그러나 이것은 시행 착오입니다. 그러나 그것이 당신이 할 수있는 최소한의 것입니다. 또는 sleep() 또는 유사한 기능으로 실행 시간을 늦출 수 있습니다. –

+1

@Neigyl : 소프트웨어를 교정하기 위해 알려진 음표 길이의 준비된 MIDI부터 시작합니다. 시행 착오는 없습니다. – Scorchio

2

정확한 목적에 따라 벨소리 형식 중 하나를 사용하거나 자신을 고안 할 수 있습니다.

간단한 착신음 형식의 예는 RTTTL입니다.