【发布时间】:2014-06-06 08:59:11
【问题描述】:
我已经组装了 8 位 DAC 并将其连接到我的 Arduino。我连接了扬声器到我的 DAC。现在我想知道如何播放 MIDI 文件。我发现了很多信息,但几乎所有信息都使用了一些盾牌。我找到的最好的是this。 读完后我复制粘贴了一些代码,所以它变成了
#include <avr/pgmspace.h>
byte sample[] PROGMEM = {/*midi here*/};
int sampleSize = (sizeof(sample)-1);
int nextdata;
int sampleNUM=0;//current index
ISR(TIMER2_COMPA_vect) {
nextdata = 127;
nextdata += (127-pgm_read_byte_near(sample+sampleNUM));
if (nextdata > 255){nextdata = 255;}
else if(nextdata < 0){nextdata=0;}
PORTA = nextdata;
if (sampleNUM == sampleSize){sampleNUM = 0;}
else {sampleNUM += 1;}
}
void setup() {
DDRA = 0xFF;
cli();
TCCR2A = 0;// set entire TCCR2A register to 0
TCCR2B = 0;// same for TCCR2B
OCR2A = 249;// = (1/44100) / ((1/(16*10^6))*8) - 1
TCCR2B |= (1 << WGM12);
TCCR2B |= (1 << CS11);
TIMSK2 |= (1 << OCIE2A);
sei();//allow interrupts
}
void loop() {}
我尝试使用教程中的应用程序转换音乐,甚至使用教程中的示例,但它只会产生白噪声
【问题讨论】:
-
看起来您正在将 midi 数据解释为示例音频数据。您需要构建一个音调振荡器,将 Midi 中的音符事件转换为字节流以发送到您的 DAC...
-
你需要一个软件合成器。而 Arduino 太弱了。