ዝርዝር ሁኔታ:
- አቅርቦቶች
- ደረጃ 1 ለሙዚቃ ማስታወሻ መፈለጊያ ሃርድዌር ይገንቡ
- ደረጃ 2 - የሙዚቃ ማስታወሻ መፈለጊያውን ያቅዱ
- ደረጃ 3: የሙዚቃ ማስታወሻ መፈለጊያውን ያዋቅሩ
ቪዲዮ: የሙዚቃ ማስታወሻ መፈለጊያ -3 ደረጃዎች
2024 ደራሲ ደራሲ: John Day | [email protected]. ለመጨረሻ ጊዜ የተሻሻለው: 2024-01-30 07:29
በአንድ መሣሪያ የተጫወተውን ማስታወሻ በሚለየው በዚህ ፕሮጀክት ጓደኞችዎን እና ቤተሰብዎን ያስደንቁ። ይህ ፕሮጀክት በኤሌክትሮኒክ ቁልፍ ሰሌዳ ፣ በፒያኖ መተግበሪያ ወይም በሌላ በማንኛውም መሣሪያ ላይ የተጫወተውን ግምታዊ ድግግሞሽ እንዲሁም የሙዚቃ ማስታወሻን ያሳያል።
ዝርዝሮች
ለዚህ ፕሮጀክት ከድምፅ ሞዱል መፈለጊያ የአናሎግ ውፅዓት ወደ አርዱዲኖ ኡኖ ወደ A0 አናሎግ ግብዓት ይላካል። የአናሎግ ምልክቱ ናሙና እና መጠናዊ (ዲጂታል የተደረገ) ነው። የራስ -ማስተካከያ ፣ የክብደት እና የማስተካከያ ኮድ የመጀመሪያዎቹን 3 ወቅቶች በመጠቀም መሠረታዊ ድግግሞሽ ለማግኘት ጥቅም ላይ ይውላል። ግምታዊው መሠረታዊ ድግግሞሽ በአቅራቢያው ያለውን የሙዚቃ ማስታወሻ ድግግሞሽ ለመወሰን በ octaves 3 ፣ 4 እና 5 ክልል ውስጥ ካለው ድግግሞሽ ጋር ይነፃፀራል። በመጨረሻም ለቅርብ ድግግሞሽ የሚገመተው ማስታወሻ በማያ ገጹ ላይ ታትሟል።
ማሳሰቢያ ይህ አስተማሪ ፕሮጄክቱን እንዴት እንደሚገነባ ላይ ብቻ ያተኩራል። ስለዝርዝሮቹ እና የንድፍ ማረጋገጫዎቹ የበለጠ መረጃ ለማግኘት እባክዎን ይህንን አገናኝ ይጎብኙ ተጨማሪ መረጃ
አቅርቦቶች
- (1) አርዱዲኖ ኡኖ (ወይም ገኒኖኖ ኡኖ)
- (1) DEVMO ማይክሮፎን ዳሳሽ ከፍተኛ ትብነት ያለው የድምፅ ማወቂያ ሞዱል ተኳሃኝ
- (1) አልባ አልባ የዳቦ ሰሌዳ
- (1) ዩኤስቢ-ሀ ለ ቢ ገመድ
- ዝላይ ሽቦዎች
- የሙዚቃ ምንጭ (ፒያኖ ፣ የቁልፍ ሰሌዳ ወይም የፓኖ መተግበሪያ ከድምጽ ማጉያዎች ጋር)
- (1) ኮምፒተር ወይም ላፕቶፕ
ደረጃ 1 ለሙዚቃ ማስታወሻ መፈለጊያ ሃርድዌር ይገንቡ
አርዱዲኖ ኡኖ ፣ የግንኙነት ሽቦዎች ፣ የማይሸጥ የዳቦ ሰሌዳ እና የ DEVMO ማይክሮፎን ዳሳሽ ከፍተኛ የስሜት ድምጽ ማወቂያ ሞዱል (ወይም ተመሳሳይ) በዚህ ምስል ላይ የሚታየውን ወረዳ ይገንቡ።
ደረጃ 2 - የሙዚቃ ማስታወሻ መፈለጊያውን ያቅዱ
በአርዱዲኖ አይዲኢ ውስጥ የሚከተለውን ኮድ ያክሉ።
gistfile1.txt
/* |
ፋይል/የስዕል ስም MusicalNoteDetector |
ስሪት ቁጥር: v1.0 ሰኔ 7 ቀን 2020 ተፈጥሯል |
የመጀመሪያው ደራሲ - ክላይድ ኤ ሌትሶሜ ፣ ፒኤችዲ ፣ ፒኢ ፣ ኤምኤም |
መግለጫ -ይህ ኮድ/ንድፍ በኤሌክትሮኒክ ቁልፍ ሰሌዳ ወይም በፒያኖ መተግበሪያ ላይ የተጫወተውን ግምታዊ ድግግሞሽ እንዲሁም የሙዚቃ ማስታወሻን ያሳያል። ለዚህ ፕሮጀክት የአናሎግ ውፅዓት ከ |
የድምፅ ሞዱል መፈለጊያ ወደ አርዱዲኖ ኡኖ ወደ A0 አናሎግ ግብዓት ይላካል። የአናሎግ ምልክቱ ናሙና እና መጠናዊ (ዲጂታዊ) ነው። የራስ -ማስተካከያ ፣ የክብደት እና የማስተካከያ ኮድ ጥቅም ላይ ውሏል |
የመጀመሪያዎቹን 3 ወቅቶች በመጠቀም መሠረታዊ ድግግሞሽ ያግኙ። በጣም ቅርብ የሆነውን ሙዚቃ ለመወሰን ግምታዊው መሠረታዊ ድግግሞሽ በኦክቶ 3 ፣ 4 እና 5 ክልል ውስጥ ካለው ድግግሞሽ ጋር ይነፃፀራል። |
የማስታወሻ ድግግሞሽ። በመጨረሻም ለቅርብ ድግግሞሽ የተገመተው ማስታወሻ በማያ ገጹ ላይ ታትሟል። |
ፈቃድ - ይህ ፕሮግራም ነፃ ሶፍትዌር ነው ፤ በጂኤንዩ አጠቃላይ የህዝብ ፈቃድ (GPL) ስሪት 3 ውሎች ፣ ወይም በማንኛውም በኋላ እንደገና ማሰራጨት እና/ወይም ማሻሻል ይችላሉ |
በነጻ ሶፍትዌር ፋውንዴሽን እንደታተመው የመረጡት ስሪት። |
ማስታወሻዎች የቅጂ መብት (ሐ) 2020 በ A. Lettsome Services ፣ LLC |
ለተጨማሪ መረጃ ይጎብኙ |
*/ |
#define SAMPLES 128 // ማክስ 128 ለአርዱዲኖ ኡኖ። |
#መለየት SAMPLING_FREQUENCY 2048 // Fs = በ Nyquist ላይ የተመሠረተ ፣ ከሚጠበቀው ከፍተኛ ድግግሞሽ 2 እጥፍ መሆን አለበት። |
#መግለፅ OFFSETSAMPLES 40 // ለ calabrating ዓላማዎች ጥቅም ላይ ውሏል |
#ጥራት TUNER -3 // C3 እስከ 130.50 ድረስ ያስተካክሉ |
ተንሳፋፊ ናሙና ፔሪዮድ; |
ያልተፈረመ ረጅም ማይክሮ ሰከንድ; |
int X [ናሙናዎች]; // እውነተኛ እሴቶችን ለመያዝ የመጠን ናሙናዎችን ናሙናዎች (ናሙናዎች) ይፍጠሩ |
float autoCorr [SAMPLES]; // ምናባዊ እሴቶችን ለመያዝ የመጠን ናሙናዎች ናሙናዎችን ይፍጠሩ |
ተንሳፋፊ ተከማች ኖቴፍሬክ [12] = {130.81 ፣ 138.59 ፣ 146.83 ፣ 155.56 ፣ 164.81 ፣ 174.61 ፣ 185 ፣ 196 ፣ 207.65 ፣ 220 ፣ 233.08 ፣ 246.94}; |
int sumOffSet = 0; |
int offSet [OFFSETSAMPLES]; // የማካካሻ ቬክተር ይፍጠሩ |
int avgOffSet; // የማካካሻ ቬክተር ይፍጠሩ |
int i ፣ k ፣ periodEnd ፣ periodBegin ፣ ክፍለ ጊዜ ፣ አስተካካይ ፣ ማስታወሻ ቦታ ፣ octaveRange; |
ተንሳፋፊ maxValue ፣ minValue; |
ረጅም ድምር; |
intresh th = 0; |
int numOfCycles = 0; |
ተንሳፋፊ ምልክት ድግግሞሽ ፣ የምልክት ድግግሞሽ 2 ፣ የምልክት ድግግሞሽ 3 ፣ የምልክት ፍሪኩዌንሲ ፣ ጠቅላላ ፣ |
ባይት state_machine = 0; |
int samplesPerPeriod = 0; |
ባዶነት ማዋቀር () |
{ |
Serial.begin (115200); // 115200 Baud ተመን ለ Serial Monitor |
} |
ባዶነት loop () |
{ |
//***************************************************************** |
// የመረበሽ ክፍል |
//***************************************************************** |
Serial.println ("Calabrating. እባክዎን በማሳወቂያ ጊዜ ምንም ማስታወሻ አይጫወቱ።"); |
ለ (i = 0; i <OFFSETSAMPLES; i ++) |
{ |
offSet = analogRead (0); // እሴቱን ከአናሎግ ፒን 0 (A0) ያነባል ፣ ይለካዋል እና እንደ እውነተኛ ቃል ያስቀምጡት። |
//Serial.println(offSet gaad)); // ምንም ድምፅ በማይጫወትበት ጊዜ የድምፅ ማወቂያ ሞጁሉን በግማሽ ወይም በ 512 ለማስተካከል ይህንን ይጠቀሙ። |
sumOffSet = sumOffSet + offSet ; |
} |
samplesPerPeriod = 0; |
maxValue = 0; |
//***************************************************************** |
// ግብዓት ከ A0 ለመቀበል ይዘጋጁ |
//***************************************************************** |
avgOffSet = ዙር (sumOffSet / OFFSETSAMPLES); |
Serial.println ("ወደ ታች መቁጠር"); |
መዘግየት (1000); // ለ 1 ሰከንዶች ያቁሙ |
Serial.println ("3"); |
መዘግየት (1000); // ለ 1 ሰከንዶች ያቁሙ |
Serial.println ("2"); |
መዘግየት (1000); // ለአፍታ አቁም |
Serial.println ("1"); |
መዘግየት (1000); // ለ 1 ሰከንዶች ያቁሙ |
Serial.println ("ማስታወሻዎን ያጫውቱ!"); |
መዘግየት (250); // ለምላሽ ጊዜ ለ 1/4 ሰከንድ ለአፍታ ያቁሙ |
//***************************************************************** |
// ናሙና ናሙናዎችን ከ A0 ናሙና ናሙና ጊዜ ጋር ይሰብስቡ |
//***************************************************************** |
samplingPeriod = 1.0 / SAMPLING_FREQUENCY; // ክፍለ ጊዜ በማይክሮ ሰከንዶች ውስጥ |
ለ (i = 0; i <SAMPLES; i ++) |
{ |
ማይክሮ ሰከንዶች = ማይክሮስ (); // የአርዱዲኖ ቦርድ የአሁኑን ስክሪፕት ማካሄድ ከጀመረ ጀምሮ የማይክሮ ሰከንዶችን ቁጥር ይመልሳል። |
X = analogRead (0); // እሴቱን ከአናሎግ ፒን 0 (A0) ያነባል ፣ ይለካዋል እና እንደ እውነተኛ ቃል ያስቀምጡት። |
/ *በሰከንዶች ውስጥ አስፈላጊ ከሆነ በናሙናዎች መካከል የመጠባበቂያ ጊዜ ይቀራል */ |
ሳለ (ማይክሮስ () <(microSeconds + (samplingPeriod * 1000000)))) |
{ |
// ምንም አታድርጉ ዝም ብላችሁ ጠብቁ |
} |
} |
//***************************************************************** |
// የራስ -ማስተካከያ ተግባር |
//***************************************************************** |
ለ (i = 0; i <SAMPLES; i ++) // i = መዘግየት |
{ |
ድምር = 0; |
ለ (k = 0; k <SAMPLES - i; k ++) // የዘገየ ምልክት ካለው ምልክት ጋር ይዛመዱ |
{ |
ድምር = ድምር + (((X [k]) - avgOffSet) * ((X [k + i]) - avgOffSet)); // X [k] ምልክት ሲሆን X [k+i] የዘገየው ስሪት ነው |
} |
autoCorr = ድምር / ናሙናዎች; |
// የመጀመሪያው ፒክ ግኝት ግዛት ማሽን |
ከሆነ (state_machine == 0 && i == 0) |
{ |
thresh = autoCorr * 0.5; |
state_machine = 1; |
} |
ሌላ ከሆነ (state_machine == 1 && i> 0 && thresh 0) // state_machine = 1 ፣ የመጀመሪያውን ዑደት ለመጠቀም 1 ጊዜ ያግኙ |
{ |
maxValue = autoCorr ; |
} |
ሌላ ከሆነ (state_machine == 1 && i> 0 && thresh <autoCorr [i-1] && maxValue == autoCorr [i-1] && (autoCorr -autoCorr [i-1]) <= 0) |
{ |
periodBegin = i-1; |
state_machine = 2; |
numOfCycles = 1; |
samplesPerPeriod = (periodBegin - 0); |
ጊዜ = ናሙናዎችPerPeriod; |
አስተካካይ = TUNER+(50.04 * exp (-0.102 * samplesPerPeriod)); |
signalFrequency = ((SAMPLING_FREQUENCY) / (samplesPerPeriod))-አስማሚ; // f = fs/N |
} |
ሌላ ከሆነ (state_machine == 2 && i> 0 && thresh 0) // state_machine = 2 ፣ ለ 1 ኛ እና 2 ኛ ዑደት 2 ጊዜዎችን ያግኙ |
{ |
maxValue = autoCorr ; |
} |
ሌላ ከሆነ (state_machine == 2 && i> 0 && thresh <autoCorr [i-1] && maxValue == autoCorr [i-1] && (autoCorr -autoCorr [i-1]) <= 0) |
{ |
periodEnd = i-1; |
state_machine = 3; |
numOfCycles = 2; |
samplesPerPeriod = (periodEnd - 0); |
signalFrequency2 = ((numOfCycles*SAMPLING_FREQUENCY) / (samplesPerPeriod))-አስተካካይ; // f = (2*fs)/(2*N) |
maxValue = 0; |
} |
ሌላ ከሆነ (state_machine == 3 && i> 0 && thresh 0) // state_machine = 3 ፣ ለ 1 ኛ ፣ ለ 2 ኛ እና ለ 3 ኛ ዙር 3 ጊዜዎችን ያግኙ |
{ |
maxValue = autoCorr ; |
} |
ሌላ ከሆነ (state_machine == 3 && i> 0 && thresh <autoCorr [i-1] && maxValue == autoCorr [i-1] && (autoCorr -autoCorr [i-1]) <= 0) |
{ |
periodEnd = i-1; |
state_machine = 4; |
numOfCycles = 3; |
samplesPerPeriod = (periodEnd - 0); |
signalFrequency3 = ((numOfCycles*SAMPLING_FREQUENCY) / (samplesPerPeriod))-አስተካካይ; // f = (3*fs)/(3*N) |
} |
} |
//***************************************************************** |
// የውጤት ትንተና |
//***************************************************************** |
ከሆነ (ናሙናዎችPerPeriod == 0) |
{ |
Serial.println (“እምም….. እርግጠኛ አይደለሁም። እኔን ለማታለል እየሞከሩ ነው?”); |
} |
ሌላ |
{ |
// የክብደት ተግባሩን ያዘጋጁ |
ጠቅላላ = 0; |
ከሆነ (የምልክት ድግግሞሽ! = 0) |
{ |
ጠቅላላ = 1; |
} |
ከሆነ (signalFrequency2! = 0) |
{ |
ጠቅላላ = ጠቅላላ + 2; |
} |
ከሆነ (signalFrequency3! = 0) |
{ |
ጠቅላላ = ጠቅላላ + 3; |
} |
// የክብደት ተግባሩን በመጠቀም ድግግሞሹን ያስሉ |
signalFrequencyGuess = ((1/ጠቅላላ) * signalFrequency) + ((2/ጠቅላላ) * signalFrequency2) + ((3/ጠቅላላ) * signalFrequency3); // ክብደት ያለው ድግግሞሽ ያግኙ |
Serial.print ("የተጫወቱት ማስታወሻ በግምት ነው"); |
Serial.print (signalFrequencyGuess); // የድግግሞሽ ግምትን ያትሙ። |
Serial.println ("Hz."); |
// በግምት ላይ በመመስረት የኦክታቭ ክልል ያግኙ |
octaveRange = 3; |
ሳለ (! (signalFrequencyGuess> = የተከማቸ ኖቴፍሬክ [0] -7 && signalFrequencyGuess <= storageNoteFreq [11] +7)) |
{ |
ለ (i = 0; i <12; i ++) |
{ |
storageNoteFreq = 2 * የተከማቸ ማስታወሻ ፍሬክ ; |
} |
octaveRange ++; |
} |
// በጣም ቅርብ የሆነውን ማስታወሻ ያግኙ |
minValue = 10000000; |
noteLocation = 0; |
ለ (i = 0; i <12; i ++) |
{ |
ከሆነ (minValue> abs (signalFrequencyGuess-storageNoteFreq )) |
{ |
minValue = abs (signalFrequencyGuess-storageNoteFreq ); |
noteLocation = እኔ; |
} |
} |
// ማስታወሻውን ያትሙ |
Serial.print ("የተጫወትክ ይመስለኛል"); |
ከሆነ (ማስታወሻ ቦታ == 0) |
{ |
Serial.print ("C"); |
} |
ሌላ ከሆነ (noteLocation == 1) |
{ |
Serial.print ("C#"); |
} |
ሌላ ከሆነ (noteLocation == 2) |
{ |
Serial.print ("D"); |
} |
ሌላ ከሆነ (noteLocation == 3) |
{ |
Serial.print ("D#"); |
} |
ሌላ ከሆነ (noteLocation == 4) |
{ |
Serial.print ("E"); |
} |
ሌላ ከሆነ (noteLocation == 5) |
{ |
Serial.print ("F"); |
} |
ሌላ ከሆነ (noteLocation == 6) |
{ |
Serial.print ("F#"); |
} |
ሌላ ከሆነ (noteLocation == 7) |
{ |
Serial.print ("G"); |
} |
ሌላ ከሆነ (noteLocation == 8) |
{ |
Serial.print ("G#"); |
} |
ሌላ ከሆነ (noteLocation == 9) |
{ |
Serial.print ("A"); |
} |
ሌላ ከሆነ (noteLocation == 10) |
{ |
Serial.print ("A#"); |
} |
ሌላ ከሆነ (noteLocation == 11) |
{ |
Serial.print ("B"); |
} |
Serial.println (octaveRange); |
} |
//***************************************************************** |
// እዚህ አቁም። እንደገና ለማስጀመር በ Arduino ላይ የዳግም አስጀምር ቁልፍን ይምቱ |
//***************************************************************** |
ሳለ (1); |
} |
GitHub በ hosted የተስተናገደ rawgistfile1.txt ን ይመልከቱ
ደረጃ 3: የሙዚቃ ማስታወሻ መፈለጊያውን ያዋቅሩ
በአርዱዲኖ አይዲኢ ውስጥ በተፃፈው ወይም በተጫነው ኮድ አርዱዲኖ ኡኖን ከፒሲ ጋር ያገናኙ። ኮዱን ያጠናቅሩ እና ወደ አርዱinoኖ ይስቀሉ። ወረዳውን ከሙዚቃው ምንጭ አጠገብ ያድርጉት። ማሳሰቢያ - በመግቢያ ቪዲዮው ውስጥ ከፒሲ ድምጽ ማጉያዎች ጋር እንደ ሙዚቃ ምንጭ ሆኖ በጡባዊ ላይ የተጫነ መተግበሪያን እጠቀማለሁ። በአርዲኖ ቦርድ ላይ የዳግም አስጀምር ቁልፍን ይምቱ እና ከዚያ በሙዚቃው ምንጭ ላይ ማስታወሻ ያጫውቱ። ከጥቂት ሰከንዶች በኋላ የሙዚቃ ማስታወሻ ፈላጊው የተጫወተውን ማስታወሻ እና ድግግሞሹን ያሳያል።
የሚመከር:
የአየር ሁኔታ ማስታወሻ 7 ደረጃዎች (ከስዕሎች ጋር)
የአየር ሁኔታ ማስታወሻ - ይህ ጥምር የአየር ሁኔታ ጣቢያ እና አስታዋሽ ነው። ሁላችንም በስልካችን ላይ ያለውን የአየር ሁኔታ መፈተሽ እንችላለን ፣ ግን አንዳንድ ጊዜ እና በተለይም አንድ ሰው ከበሩ ለመውጣት ሲሞክር የሚያስፈልገው ሁሉ ለአየር ሁኔታ ሁኔታዎች ፈጣን መንገድ ነው። ይህ የአየር ሁኔታ ጣቢያ ይደግፋል
DIY ስፖት እንደ ባለአራት ሮቦት (የሕንፃ ምዝግብ ማስታወሻ V2) - 9 ደረጃዎች
DIY Spot Like Quadruped Robot (building Log V2): ይህ እንዴት እንደሚገነባ ዝርዝር መመሪያዎች ያሉት የሕንፃ ምዝግብ ማስታወሻ ነው https://www.instructables.com/DIY-Spot-Like-Quadru…robot dog v2.Follow Robolab youtube ለበለጠ መረጃ ጣቢያ። https://www.youtube.com/robolab19 ይህ የእኔ የመጀመሪያ ሮቦት ነው እና እኔ አለኝ
የሙዚቃ አሰባሳቢ-የተቀናጀ ምናባዊ የሙዚቃ መሣሪያ በብሎክ-ታይኪ የንክኪ ዳሳሽ 4 ደረጃዎች
የሙዚቃ አቀናባሪ-የተቀናጀ ምናባዊ የሙዚቃ መሣሪያ በብሎክ-ታይፕ ዳሳሽ ዳሳሽ-የሙዚቃ መሣሪያ መጫወት መማር የሚፈልጉ ብዙ ሰዎች አሉ። በሚያሳዝን ሁኔታ ፣ አንዳንዶቹ በመሣሪያዎች ውድ ዋጋ ምክንያት አይጀምሩትም። በእሱ ላይ በመመስረት የመነሻውን በጀት ለመቀነስ የተቀናጀ ምናባዊ የሙዚቃ መሣሪያ ስርዓት ለመሥራት ወሰንን
ብልጭ ድርግም የሚል የሙዚቃ ማስታወሻ 5 ደረጃዎች
ብልጭ ድርግም የሚል የሙዚቃ ማስታወሻ - ቁሳቁሶች -4 የ LED መብራቶች (ቱርኩዝ ፣ ሰማያዊ) የ CNC ማሽን ሽቦ SolidWorks 3 -ል አታሚ ብረት እና ብየዳ 2 200 Ohm resistors የሙቅ ሙጫ 9 ቮልት ባትሪ እና ፈጣን አገናኝ ድሪል ይህ ፕሮጀክት በጣም ቀላል እና በጣም ረጅም ጊዜ ሊወስድ አይገባም
በእጅ የሚያዝ 6 ማስታወሻ የሙዚቃ ሣጥን / መሣሪያ (ለመሥራት እና ለማሻሻል ቀላል!) 5 ደረጃዎች (ከስዕሎች ጋር)
በእጅ የሚያዝ 6 ማስታወሻ የሙዚቃ ሣጥን / መሣሪያ (ለመሥራት እና ለማሻሻል ቀላል!): እንኳን ደህና መጡ! ዊንተርጋታን የተባለ የስዊድን ባንድ አባል በሆነው ማርቲን ሞሊን አነሳሽነት ፣ በቅርብ ጊዜ የሙዚቃ ሳጥኖችን እና ስለእነሱ ሁሉንም ነገር ወደድኩ። ለሙዚቃ ሳጥኖች ዘፈኖችን የሚሠሩ ሰዎች ዘፈኑን ሳይሆን በቡጢ የመቅዳት የድሮውን መንገድ እየተጠቀሙ ነው