2012-02-06 7 views
4

나는 arduino에서 약간의 소리를내는 코드를 가지고있다. 노래가 숫자 값으로 인코딩되었습니다. 하지만 어떻게 그것을 arduino에서 더 크게 연주하게합니까?처리 할 때이 코드에서 볼륨을 크게 만드는 방법은 무엇입니까?

#include <PCM.h> 

int switchPin = 8; 

const unsigned char sample[] PROGMEM = { 
    140, 124, 130, 126, 129, 126, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 127, 128, 128, 128, 128, 
}; 

void setup() 
{ 
    pinMode(switchPin, INPUT); 
} 

void loop() 
{ 
    if(digitalRead(switchPin) == HIGH) 
    { 
    startPlayback(sample, sizeof(sample)); 
    } 
} 
+0

내 대답에서 제안을 시도 할 기회가 있었습니까? – japreiss

답변

4

이 샘플 코드 디지털 핀 온 오프 (그 출력 핀 간단한 스피커에 연결된다고 가정)하는 간격을 제어하는 ​​PCM technique 사용하는 서브 루틴을 사용한다. 사운드의 주파수는 톤을 만드는 것이며 볼륨은 해당 주파수의 진폭임을 기억하십시오. 그래서 당신이 요구하는 것은, 소리를 더 크게, 신호의 진폭을 증가시키는 것입니다. 그러나이 간단한 데모는 디지털 신호가 켜지는 시간 (주파수)과 진폭이 아닌 시간 (비트는 켜기 또는 끄기 중 하나임)을 변경할 수 있기 때문에 "정말로 켜기" [대문자 표시는 다음과 같습니다.)]) 여기에서 선택할 수있는 유일한 방법은 Arduino와 스피커 사이에 또 ​​다른 레이어의 하드웨어를 추가하여 톤의 진폭을 높이는 것입니다 - 일명 앰프. 이것은 this design tutorial에서 설명한 opamp처럼 간단 할 수도 있고, 스피커를 잭으로 바꾸면 boombox를 입력 할 수도 있습니다.

1

오디오 신호는 본래부터 서명 된 수량입니다. 라이브러리에서 오디오 데이터로 unsigned char을 사용하는 경우 0 -> -128 및 255 -> 127이 매핑 될 가능성이 높습니다. 이제 신호를 살펴 보겠습니다.

첫 번째 6 개 샘플 :

140, 124, 130, 126, 129, 126 

그런 다음 약간의 진동 약 127

128, 127, 128, 127, ... 

이 더 많거나 적은 DC 당신의 신호의 나머지 부분입니다. 그것은 들리지 않을 것입니다.

{0, 255, 0, 255, ...}의 신호를 먹이십시오. 소리가 훨씬 커야합니다.

0

pcm.h의 주석을 읽으면 볼륨이 매우 낮을 것이라고 표시됩니다. PCM 기술은 핀이 높은 시간 비율을 조정합니다. 나는 JDH의 권고에 동의한다. 볼륨은 앰프가 어떤 도움을 주든간에 제한 될 것이다. 좀 더 큰 소프트웨어의 경우, 조정 가능한 주파수의 구형파가 더 필요하다고 생각할 수 있습니다. 핀이 너무 낮아서 주파수가 높아지고 실제로 주파수가 조정됩니다. 나는 그것을 사용하지 않았지만 arduino Tone() 라이브러리를 살펴 본다.