2009-03-20 4 views
29

신입생 소프트웨어 프로그래밍 클래스에서 우리는 기타 뽑기 소리를 시뮬레이트하는 프로그램을 작성해야했습니다.기타 노트 생성 방법

나는 하루 종일 순수한 죄파를 만들 수 있지만 기타 뽑기와 같은 소리를내는 방법을 기억하려고합니다. 나는 그것이 sin 파동에 ​​random()과 falloff 상수를 사용하는 것을 기억하지만, 세부 사항을 기억할 수는 없다.

+0

소프트웨어를 사용하여 음파를 녹음하고 시각화 할 수 있습니다. 그것은 당신에게 몇 가지 아이디어를 줄 것입니다. –

+2

손가락을 골랐습니까? ;) –

+0

또한 dft로 분석 할 수있는 일부 소프트웨어가 도움이 될 수 있습니다. 아마 matlab. – Vasil

답변

21

자연스러운 소리의 합성음을 생성하는 것은 정말 어려운 문제입니다. 많은 기술들이 있습니다 - 어떤 것은 간단하고, 어떤 것은 실제로 복잡합니다. 좋은 결과를 얻으려면보다 복잡한 알고리즘 중 하나를 사용해야합니다.

  • 감산 합성
  • 첨가제 합성
  • 세분화 합성
  • 웨이브 테이블 합성
  • 주파수 변조 합성
  • 위상 왜곡 합성
  • 물리적 모델링 합성
  • 샘플 기반 합성
  • ,451,515,
  • 저조 파 합성

Wikipedia 찍은 일부 합성 방법이다. 물리적 모델링은 실제로 좋은 사운드를 생성 할 수 있지만이 방법의 복잡성을 보여줍니다. 아이디어가 간단하고 구현이 어렵습니다.

아마 합성 첨가제로 시작해야합니다. 이를 위해 기본 주파수와 정수 곱셈의 사인파를 더하십시오. 예를 들어 440Hz, 880Hz, 1320Hz, ... 진폭은 주파수와 함께 기하 급수적으로 떨어집니다. 구성 요소의 구조에 대한 정보는 음악 악기 분석에 대한 과학 논문에서 가장 잘 볼 수 있습니다. 마지막으로 신호의 진폭을 시간에 따라 변화시키는 봉투로 변조해야합니다. 언급 한 논문에서도 기타 구조를 찾을 수 있습니다. cdonner (Plucking a Guitar String - Karplus-Strong algorithm)과 Dervin Thunk (Physical modeling)에서


링크 유망 소리. 미분 방정식으로 전체 물리적 모델링을 간단히 근사합니다. 기타 현과 유사한 악기에만 제한적일 수 있지만, 추가 모델을 튜닝하는 것보다 찾고있는 것이고 분명히 간단합니다. 나는 주말 내내 시간을 찾으면 나 자신을 시도 할 것이다. 알고리즘에서 벗어날 수있는 것을 실제로 종료했습니다.

2

출발점으로, 기타 사운드의 일부 파형을보고 싶을 수 있습니다. MathWorks File Exchange의 Bob Sturm이 this posting을 확인했습니다. 신호 처리 데모가 많이 들어있어 기타를 비롯한 여러 악기에 포함 된 일부 .wav 파일이 있습니다. WAVREAD을 사용하여 MATLAB에로드 한 다음 파형을 복제하는 방법 (예 : 사용할 시간의 경과에 따른 감쇠)을 파악할 수 있습니다.

4

기타 합성은 특히 무한 수의 핑거링 방법으로 인해 현혹되어 특히 현혹적인 문제입니다.

본질적으로 문자열은 기저 주파수와 훨씬 적은 에너지로 여러 고조파를 발진합니다. 나는 un-fretted string pick의 Fourier plot을 볼 것을 권한다.

올바른 고조파를 추가하여 문자열의 정상 상태 사운드를 아주 가깝게 얻을 수 있지만 공격, 지속 및 감쇠 기간을 정확하게 시뮬레이트해야합니다. 진폭은 급격히 상승합니다 (피크가 될 수도 있음) 문자열이 선택 될 때. 짧은 기간 동안 조금 떨어지고 서서히 유지되며 (대부분 상수를 유지함) 결국 더 오랜 기간 지속됩니다. 기타가 아닌 기타처럼 들리려면이 권한을 가져야합니다.

2

1 학년 ("신입생"을 찾아야했다) 프로그래밍 수업을 고려할 때, 제 가정은 그들이 기타의 정확한 물리적 시뮬레이션보다는 간단한 뽑아 낸 문자열 필터를 찾고 있다는 것입니다. 아마도 추가 크레딧을받을 수는 있겠지만). 이는 디지털 신호 처리를 연구 할 때 일반적인 과제입니다.

필터는 저역 통과 필터를 통과하여 입력과 혼합되는 지연 루프로 구성됩니다. 음표를 연주하려면 짧고 넓은 스펙트럼의 신호를 입력으로 보내십시오 (예 : 백색 잡음의 파열). 이것은 지연 루프 주변을 돌아 다니며 매회 고주파 부품 중 일부가 손실됩니다. 지연 루프의 길이는 문자열의 공진 주파수를 정의합니다. Windows에서

1

,이 오래된 질문이지만, 여기 등의 합성 이론에 깊은 다이빙을 할 필요가 원하는 /하지 않는 사람들을위한 실제적인 대답에서 Win32 MM API를 (코드 5 선)

2

를 사용

스탠포드의 CCRMA 직원들은 오디오 합성 및 오디오 I/O를위한 C++ 클래스 세트를 만들었으며 pluckedtwang 클래스가 뽑아 낸 문자열을 에뮬레이션합니다.

관련 문제