私は音楽学位のための最終プロジェクトに取り組んでいます(アイデアは電子楽器とやりとりするための別の入力方法を模索しています) Teensy 3.2とAdafruit STMPE610を使ったベースのシンセ。私はもともとハードウェアベースの設定で行くことを計画していましたが、異なる回路と戦った後、私はもっと快適になるソフトウェアを使うことに決めました。オーディオ出力がありませんTeensy 3.2でオンボードDACまたはUSBパススルーを使用
問題は、オンボードDACまたはデジタルUSBインターフェイスを介してコンピュータに渡されるオーディオを再生できないように見えることです。私は、プログラムがオーディオが再生されるべき場所に到達しているが、何も働きたくないと思うように見える。
dac1.begin()を追加すると、プログラムがハングアップし、初期プロジェクトのタイトルのみが出力されます。私はその機能は必要ではないと思っていますが、ライブラリのソースコードを見てから、私はそれを見つけたので、私はそれを行かせると思っていました。
セットアップ機能に何か不足している場合や、特にループ機能でオーディオを出力する必要があるかどうかはわかりません。
はここ(dac1.beginせずにシリアルモニタに出力のコピーです)私と一緒にランダムに(ソースコードは下にある)、タッチスクリーン上で押す:
=======================
Touch Synth
<name> - 2017
Music Major Project
=======================
Note on
Touch location (x,y,z) -> 1884 2371 49
Touch location (x,y,z) -> 1896 2365 37
Touch location (x,y,z) -> 1892 2365 34
Touch location (x,y,z) -> 1428 2152 37
Note off
Note on
Touch location (x,y,z) -> 1985 2440 55
Touch location (x,y,z) -> 1987 2420 39
Touch location (x,y,z) -> 2010 2381 36
Touch location (x,y,z) -> 2023 2327 34
Touch location (x,y,z) -> 2277 2552 34
Touch location (x,y,z) -> 2074 2648 40
Note off
Note on
Touch location (x,y,z) -> 2006 2575 35
Touch location (x,y,z) -> 2024 2568 35
Note off
Note on
Touch location (x,y,z) -> 1992 2522 34
Touch location (x,y,z) -> 2005 2525 31
Touch location (x,y,z) -> 2004 2523 31
Touch location (x,y,z) -> 2007 2514 33
Note off
Note on
Touch location (x,y,z) -> 2047 2409 36
Touch location (x,y,z) -> 2036 2410 32
Touch location (x,y,z) -> 2039 2405 31
Touch location (x,y,z) -> 2066 2399 37
Note off
Note on
Touch location (x,y,z) -> 2058 2367 36
Touch location (x,y,z) -> 2062 2372 34
Note off
Note on
Touch location (x,y,z) -> 2013 2398 34
Touch location (x,y,z) -> 2029 2399 32
Note off
とコード:
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SerialFlash.h>
#include "Adafruit_STMPE610.h"
// ===== Audio GUI Tool code =====
// GUItool: begin automatically generated code
AudioSynthWaveform waveform1; //xy=97,100
AudioSynthWaveform waveform2; //xy=97,137
AudioMixer4 mixer1; //xy=349,119
AudioEffectEnvelope envelope1; //xy=514,104
AudioMixer4 mixer2; //xy=676,123
AudioOutputAnalog dac1; //xy=841,110
AudioConnection patchCord1(waveform1, 0, mixer1, 0);
AudioConnection patchCord2(waveform2, 0, mixer1, 1);
AudioConnection patchCord3(mixer1, envelope1);
AudioConnection patchCord4(envelope1, 0, mixer2, 0);
AudioConnection patchCord5(mixer2, 0, dac1, 0);
// GUItool: end automatically generated code
// ===== Pinout setup =====
const byte PWR_LED = 13;
const byte GATE_OUT = 6;
const byte SPI_SCK = 14;
const byte SPI_MOSI = 11;
const byte SPI_MISO = 12;
const byte STMPE_CS = 15; // Touch Screen Controller Chip Select
const byte aPot = 16;
const byte rPot = 17;
// ===== Touch Screen Object Declaration =====
// SDI to MOSI, SDO to MISO, and SCL to SPI CLOCK
// Tie MODE to 3.3V and POWER CYCLE the STMPE610 (there is no reset pin)
Adafruit_STMPE610 touch = Adafruit_STMPE610(STMPE_CS, SPI_MOSI, SPI_MISO, SPI_SCK);
// ===== Function Declarations =====
void error(int);
// ===== Global variables =====
int gTouchOn = 0;
int gNoteOn = 0;
void setup() {
Serial.begin(9600); // Setup serial
Serial.println("======================="); // ============================
Serial.println("Touch Synth"); //
Serial.println("Callum Blackmore - 2017"); // Print faux splash screen to
Serial.println("Music Major Project"); // serial output
Serial.println("======================="); //
//Serial.flush(); // ============================
pinMode(PWR_LED, OUTPUT); //Setup power LED
digitalWrite(PWR_LED, HIGH);
if (! touch.begin()) {
Serial.println("STMPE not found!");
error(1000);
}
AudioMemory(50);
//dac1.begin(); // <--- Code will hang here if uncommented
dac1.analogReference(INTERNAL);
waveform1.begin(WAVEFORM_SINE);
waveform2.begin(WAVEFORM_TRIANGLE);
mixer1.gain(0, 0.5);
mixer1.gain(1, 0.5);
mixer2.gain(0, 0.75);
envelope1.delay(0);
envelope1.attack(100);
envelope1.hold(0);
envelope1.decay(15);
envelope1.sustain(0.7);
envelope1.release(200);
}
void loop() {
// put your main code here, to run repeatedly:
uint16_t analogVal; // temp value for analog reads
uint16_t x, y; // Touch coordinates
uint8_t z; // ''
analogVal = analogRead(aPot); // =====
//Serial.print(analogVal); Serial.print(' ');
envelope1.attack(analogVal/10); // Read pots and update attack and release values
analogVal = analogRead(rPot); //
//Serial.print(analogVal); Serial.println(' ');
envelope1.release(analogVal/10); // =====
if(touch.touched())
{
gTouchOn = 1;
while (! touch.bufferEmpty())
{
touch.readData(&x, &y, &z);
waveform1.frequency((y*2)+100);
waveform2.frequency((y*2)+100);
Serial.print("Touch location (x,y,z) -> ");
Serial.print(x); Serial.print(' ');
Serial.print(y); Serial.print(' ');
Serial.print(z); Serial.println(' ');
}
touch.writeRegister8(STMPE_INT_STA, 0xFF); // reset all ints
if(gNoteOn == 0)
{
Serial.print("Note on"); Serial.println(' ');
gNoteOn = 1;
envelope1.noteOn();
}
}
else if(!touch.touched() && gNoteOn == 1)
{
Serial.print("Note off"); Serial.println(' ');
envelope1.noteOff();
gNoteOn = 0;
gTouchOn = 0;
}
}
void error(int len){
while(1) {
digitalWrite(PWR_LED, HIGH);
delay(len);
digitalWrite(PWR_LED, LOW);
delay(len);
}
}