Szintetizátor+ARDUINO(Usb)+Pc
- nyitraitomi
- Újonc

- Hozzászólások: 7
- Csatlakozott: 2010. július 17. szombat, 6:00
Szintetizátor+ARDUINO(Usb)+Pc
Sziasztok!
Egy régi szintetizátort szeretnék "felturbózni" arduinoval, úgy hogy az egy használható midibillentyűzet legyen.
Tehát adott egy 61 billentyűs szintetizátor aminek a billentyűzetét használom fel.
Adott az arduino. Adott a pc megfelelő szoftverekkel, hogy az arduinot midi billentyűzetnek lássa. Mivel az interneten nem igazán találtam kielégítő magyarázatot rá akkor most itt kérdeznék.
Milyen módon tudom a leggyorsabban beolvasni egy 8x8 -as mátrixbillentyűzet állapotát? Mindenfelé shift regisztereket alkalmaznak, de nem lenne gyorsabb enélkül? Illetve tud valaki erre példát?
Egy régi szintetizátort szeretnék "felturbózni" arduinoval, úgy hogy az egy használható midibillentyűzet legyen.
Tehát adott egy 61 billentyűs szintetizátor aminek a billentyűzetét használom fel.
Adott az arduino. Adott a pc megfelelő szoftverekkel, hogy az arduinot midi billentyűzetnek lássa. Mivel az interneten nem igazán találtam kielégítő magyarázatot rá akkor most itt kérdeznék.
Milyen módon tudom a leggyorsabban beolvasni egy 8x8 -as mátrixbillentyűzet állapotát? Mindenfelé shift regisztereket alkalmaznak, de nem lenne gyorsabb enélkül? Illetve tud valaki erre példát?
Re: Szintetizátor+ARDUINO(Usb)+Pc
8x8-as mátrix az AVR 2 portja kellene. Az alapelv: mint a 4x4 billmátrix. Amúgy a shiftregiszter tényleg a gyorsabb.
AVR-ből akkor a Leonardo lenne?
AVR-ből akkor a Leonardo lenne?
- nyitraitomi
- Újonc

- Hozzászólások: 7
- Csatlakozott: 2010. július 17. szombat, 6:00
Re: Szintetizátor+ARDUINO(Usb)+Pc
Avr dunio/r3
Egyébként beszereztem már a 74HC595 -ös shift-regisztereket, és úgynézki működik. A mátrix viszont ha minden igaz 6x11. A billentyűzetre még nem kötöttem rá, az lesz a következő lépés. Majd a végeredményről beszámolok, mert szerintem lesz még néhány buktató.
Egyébként beszereztem már a 74HC595 -ös shift-regisztereket, és úgynézki működik. A mátrix viszont ha minden igaz 6x11. A billentyűzetre még nem kötöttem rá, az lesz a következő lépés. Majd a végeredményről beszámolok, mert szerintem lesz még néhány buktató.
Re: Szintetizátor+ARDUINO(Usb)+Pc
Így csak soros-midi lesz. Nem natív USB-s direktmidi....
- nyitraitomi
- Újonc

- Hozzászólások: 7
- Csatlakozott: 2010. július 17. szombat, 6:00
Re: Szintetizátor+ARDUINO(Usb)+Pc
Értem. Illetve nem mert nem tudom pontosan mi a különbség. Akkor ez hogyan működik vagy hol lehet információt találni róla? Annyira már működik most, hogy szól a számítógépen, de azért lenne mit faragni a több billentyű egyszerre lenyomás terén.
- nyitraitomi
- Újonc

- Hozzászólások: 7
- Csatlakozott: 2010. július 17. szombat, 6:00
Re: Szintetizátor+ARDUINO(Usb)+Pc
Igazából most az a gondom, hogy késik a hang. Hogyan tudom kideríteni, hogy mi okozhatja ezt? Arduino, vagy a számítógép szoftverei?
- nyitraitomi
- Újonc

- Hozzászólások: 7
- Csatlakozott: 2010. július 17. szombat, 6:00
Re: Szintetizátor+ARDUINO(Usb)+Pc
Ez fut az arduinón
https://github.com/evankale/ArduinoMidi ... PullUp.ino
Ez így jó?
Usb-n megy az adat.
https://github.com/evankale/ArduinoMidi ... PullUp.ino
Kód: Egész kijelölése
#define NUM_ROWS 6
#define NUM_COLS 11
#define NOTE_ON_CMD 0x90
#define NOTE_OFF_CMD 0x80
#define NOTE_VELOCITY 127
//MIDI baud rate
#define SERIAL_RATE 31250
// Pin Definitions
// Row input pins
const int row1Pin = 2;
const int row2Pin = 3;
const int row3Pin = 4;
const int row4Pin = 5;
const int row5Pin = 6;
const int row6Pin = 7;
// 74HC595 pins
const int dataPin = 8;
const int latchPin = 9;
const int clockPin = 10;
boolean keyPressed[NUM_ROWS][NUM_COLS];
uint8_t keyToMidiMap[NUM_ROWS][NUM_COLS];
// bitmasks for scanning columns
int bits[] =
{
B11111110,
B11111101,
B11111011,
B11110111,
B11101111,
B11011111,
B10111111,
B01111111
};
void setup()
{
int note = 31;
for(int colCtr = 0; colCtr < NUM_COLS; ++colCtr)
{
for(int rowCtr = 0; rowCtr < NUM_ROWS; ++rowCtr)
{
keyPressed[rowCtr][colCtr] = false;
keyToMidiMap[rowCtr][colCtr] = note;
note++;
}
}
// setup pins output/input mode
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(row1Pin, INPUT);
pinMode(row2Pin, INPUT);
pinMode(row3Pin, INPUT);
pinMode(row4Pin, INPUT);
pinMode(row5Pin, INPUT);
pinMode(row6Pin, INPUT);
Serial.begin(SERIAL_RATE);
}
void loop()
{
for (int colCtr = 0; colCtr < NUM_COLS; ++colCtr)
{
//scan next column
scanColumn(colCtr);
//get row values at this column
int rowValue[NUM_ROWS];
rowValue[0] = !digitalRead(row1Pin);
rowValue[1] = !digitalRead(row2Pin);
rowValue[2] = !digitalRead(row3Pin);
rowValue[3] = !digitalRead(row4Pin);
rowValue[4] = !digitalRead(row5Pin);
rowValue[5] = !digitalRead(row6Pin);
// process keys pressed
for(int rowCtr=0; rowCtr<NUM_ROWS; ++rowCtr)
{
if(rowValue[rowCtr] != 0 && !keyPressed[rowCtr][colCtr])
{
keyPressed[rowCtr][colCtr] = true;
noteOn(rowCtr,colCtr);
}
}
// process keys released
for(int rowCtr=0; rowCtr<NUM_ROWS; ++rowCtr)
{
if(rowValue[rowCtr] == 0 && keyPressed[rowCtr][colCtr])
{
keyPressed[rowCtr][colCtr] = false;
noteOff(rowCtr,colCtr);
}
}
}
}
void scanColumn(int colNum)
{
digitalWrite(latchPin, LOW);
if(0 <= colNum && colNum <= 7)
{
shiftOut(dataPin, clockPin, MSBFIRST, B11111111); //right sr
shiftOut(dataPin, clockPin, MSBFIRST, bits[colNum]); //left sr
}
else
{
shiftOut(dataPin, clockPin, MSBFIRST, bits[colNum-8]); //right sr
shiftOut(dataPin, clockPin, MSBFIRST, B11111111); //left sr
}
digitalWrite(latchPin, HIGH);
}
void noteOn(int row, int col)
{
Serial.write(NOTE_ON_CMD);
Serial.write(keyToMidiMap[row][col]);
Serial.write(NOTE_VELOCITY);
}
void noteOff(int row, int col)
{
Serial.write(NOTE_OFF_CMD);
Serial.write(keyToMidiMap[row][col]);
Serial.write(NOTE_VELOCITY);Usb-n megy az adat.
- nyitraitomi
- Újonc

- Hozzászólások: 7
- Csatlakozott: 2010. július 17. szombat, 6:00
Re: Szintetizátor+ARDUINO(Usb)+Pc
Nos gyakorlatilag teljesen tökéletesen működik.
A hangkártya volt a ludas, amit ASIO -val meghajtva a 500-600 ms-os késés max 3 ms lett.
Amint időhöz jutok leírom ide a legelejétől a végéig.
A hangkártya volt a ludas, amit ASIO -val meghajtva a 500-600 ms-os késés max 3 ms lett.
Amint időhöz jutok leírom ide a legelejétől a végéig.
- nyitraitomi
- Újonc

- Hozzászólások: 7
- Csatlakozott: 2010. július 17. szombat, 6:00
Re: Szintetizátor+ARDUINO(Usb)+Pc
Nos ez alapján indultam el: http://www.youtube.com/watch?v=lXX8v-ZW6Tk
Annyi külömbséggel, hogy én nem használtam midi csatlakozót, hiszen az arduino már amúgy is küldi az adatokat az usb-n a pc-re. Virtuális midi kábel szoftver(hairless midiserial(bemenetként az arduino sorosportját kell beállítani)+loop midi(midi portok)+virtuális szintetizátor(pl.: Fl Studio).
Ha késik a hang akkor ASIO4All nagyon fontos! A buffer méretet addíg kell csökkenteni, amíg elfogadható lesz a hang késése. Ha nagyon kicsire állítjuk elveszhet a polifónia.
Sok sikert!
Annyi külömbséggel, hogy én nem használtam midi csatlakozót, hiszen az arduino már amúgy is küldi az adatokat az usb-n a pc-re. Virtuális midi kábel szoftver(hairless midiserial(bemenetként az arduino sorosportját kell beállítani)+loop midi(midi portok)+virtuális szintetizátor(pl.: Fl Studio).
Ha késik a hang akkor ASIO4All nagyon fontos! A buffer méretet addíg kell csökkenteni, amíg elfogadható lesz a hang késése. Ha nagyon kicsire állítjuk elveszhet a polifónia.
Sok sikert!
Re: Szintetizátor+ARDUINO(Usb)+Pc
Sziasztok.
Próbálok midi szintit összehozni ez alapján.
http://www.instructables.com/id/Arduino ... /?ALLSTEPS
A problémám az hogy midi parancsként több hangot küld azaz egy leütés alapján több midi hang kerül rögzítésre a gépen.
Pl.A0 bemenetre van kötve a piezo.Ha megütöm a piezzot akkor nem csak az 57 hang kerül rögzítésre hanem több hang is.így neház felvenni használható dallamot.
Hogyan lehet ezt megoldani?
Köszönöm a segítséget
Próbálok midi szintit összehozni ez alapján.
http://www.instructables.com/id/Arduino ... /?ALLSTEPS
A problémám az hogy midi parancsként több hangot küld azaz egy leütés alapján több midi hang kerül rögzítésre a gépen.
Pl.A0 bemenetre van kötve a piezo.Ha megütöm a piezzot akkor nem csak az 57 hang kerül rögzítésre hanem több hang is.így neház felvenni használható dallamot.
Hogyan lehet ezt megoldani?
Köszönöm a segítséget
Re: Szintetizátor+ARDUINO(Usb)+Pc
Nem lehet hogy rezonálnak a holmik és a többi hangot is leütésnek veszi?
Re: Szintetizátor+ARDUINO(Usb)+Pc
Egy piezo van csak használatban .mindentől függetlenül(levegőben van).
Re: Szintetizátor+ARDUINO(Usb)+Pc
Kicsit off de a szinti része ez is.
Ennek a felforrasztása kábelesre során ügyelni kell valamire?Hogyan kell szakszerűen?
http://www.hestore.hu/prod_10034292.html
Ennek a felforrasztása kábelesre során ügyelni kell valamire?Hogyan kell szakszerűen?
http://www.hestore.hu/prod_10034292.html