2011-10-06 3 views
0

사람들,PCM 데이터에서 기타가 울리는 시간이 변경됨

PCM 데이터의 재생 지속 시간과 관련된 간단한 개념으로 고민하고 있습니다. 의견을 보내 주시면 감사하겠습니다.

내가 개발중인 응용 프로그램은 음악 시트에서 기타 음을 연주합니다.

나는 기타를 뽑기위한 Jaffe-Smith 알고리즘을 구현했습니다.

https://ccrma.stanford.edu/~jos/Mohonk05/Extended_Karplus_Strong_EKS_Algorithm.html.

내가 1 초 동안 음표 A (440Hz)에 대한 샘플을 계산한다고 가정 해 봅니다.

샘플 속도 11025에서 PCM 오디오로 컴퓨터 스피커로 보낼 수있는 11025 개의 샘플을 저장합니다.

기타의 모든 고유 한 음표의 경우 모든 음표의 샘플을 계산하는 데 꽤 시간이 걸립니다. 미리 계산하여 이진 데이터로 저장하고 응용 프로그램이 실행될 때로드하는 것으로 생각합니다.

지금까지 그렇게 좋았습니다.

이제 노래 (다양한 음표 목록)를 재생하고 싶다고 가정 해 보겠습니다. 노래가 분당 100 비트로 재생되어야한다고 가정 해 봅시다. 내가 한 비트 또는 0.6 초 (60/100)의 노트 A를 연주해야한다고 가정 해 봅시다.

0.6 초 동안 샘플을 다시 계산하는 데는 꽤 시간이 걸릴 수 있습니다.

샘플을 (11025 * 0.6) 재생할 수 있습니까? 이로 인해 부작용이 발생합니까?

내가 수행하려고하는 것을 달성하는 더 좋은 방법이 있습니까?

도움을 주셔서 감사합니다.

감사합니다, 피터

답변

1

당신이 기본적으로 예, 합성 기타를 생성하면됩니다려고? 대신 샘플러 경로를 사용하는 것이 좋습니다.

샘플로, 나는 오디오의 작은 클립을 의미합니다 (ADC 또는 DAC의 의미에서 단일 샘플이 아님).

기본적으로, 당신은 당신이 4 개 부분으로 필요 평평하게 할 수 있습니다

  • 릴리스
  • 이 네 부분을 순서대로 작동

    서스테인

    • 공격
    • 붕괴
    • 을하고, 일반적으로 ADSR envelope이라고합니다. 음표의 공격은 초기 사운드입니다. 기타의 경우, 당신은 뽑기와 피치의 시작을 듣게 될 것입니다. 감쇠는 사라지기 시작할 때 끈의 표본이 될 것입니다. 서스테인은 키를 놓을 때까지 반복해서 반복되는 샘플입니다. 릴리스 샘플은 키를 놓을 때 재생되는 샘플입니다. 기타의 경우 손가락을 가볍게 두드려 샘플을 들으면서 진동을 막을 수 있습니다.

      이제 모든 샘플을 실시간으로 생성 할 수 있지만 CPU를 많이 사용하게 될 것입니다.

      질문 : "샘플 (11025 * 0.6)을 재생할 수 있습니까?" 예, 11025의 샘플 속도에서 오디오는 0.6 초가됩니다. 또한 사운드 카드에 연속적인 데이터 스트림을 보내고 빈 자리에 0을 채워야합니다 (서명 된 PCM의 경우).

    관련 문제