- Audio Decomposition एक ओपन सोर्स प्रोग्राम है, जिसका लक्ष्य संगीत को sheet music में बदलने के लिए ऑडियो को उसके घटक नोट्स और वाद्ययंत्रों में बाँटना है
- वाद्ययंत्र सैंपल University of Iowa Electronic Music Studios instrument database से taken किए जाते हैं, और तुलना के मानक के रूप में हर waveform का Fourier transform और envelope सहेजा जाता है
- संगीत फ़ाइल को 0.1 सेकंड के अंतराल पर विश्लेषित करके spectrogram बनाया जाता है, और सहेजे गए वाद्ययंत्र-विशिष्ट Fourier transform को मिलाकर उस हिस्से में हर वाद्ययंत्र की परिमाण का अनुमान लगाया जाता है
- envelope विश्लेषण में attack·sustain·release हिस्सों और static/dynamic decay को अलग किया जाता है, फिर फ़िल्टर किए गए note band में हर वाद्ययंत्र की cost निकाली जाती है
- नतीजे को ऑडियो दोबारा बनाने के बजाय matplotlib scatter plot के रूप में sheet music जैसी शैली में दिखाया जाता है, जिससे समस्या सुलझाना और sparse data दिखाना आसान हो जाता है
sheet music में बदलने के लिए ऑडियो decomposition
- Audio Decomposition की शुरुआत एक ऐसे प्रोग्राम को बनाने के लक्ष्य से हुई जो संगीत को sheet music में बदल सके
- व्यक्तिगत रूप से संगीत को sheet music में उतारने की इच्छा थी, और यह भी लगा कि open source में सरल audio source separation algorithms की कमी है, यही इसकी प्रेरणा बनी
- demo वीडियो YouTube पर उपलब्ध हैं
- GitHub repository है mbird1258/Audio-Decomposition
- वाद्ययंत्र सैंपल University of Iowa Electronic Music Studios instrument database से लिए गए हैं
- हर फ़ाइल के लिए पूरे waveform का Fourier transform और envelope निकालकर सहेजा जाता है
0.1 सेकंड इकाई Fourier transform
- यह मानकर कि वाद्ययंत्र की ध्वनि को मुख्य रूप से Fourier transform और envelope से पहचाना जा सकता है, इन्हीं दो जानकारियों से यह अनुमान लगाया जाता है कि कौन-सा वाद्ययंत्र कौन-सा note बजा रहा है
- संगीत फ़ाइल पर हर 0.1 सेकंड में Fourier transform किया जाता है और इसे spectrogram के रूप में प्रोसेस किया जाता है
- हर 0.1 सेकंड के हिस्से के Fourier transform को पुनर्निर्मित करने के लिए सहेजे गए वाद्ययंत्र-विशिष्ट Fourier transform जोड़े जाते हैं
- हर वाद्ययंत्र की परिमाण MSE cost function के frequency-wise partial derivative से बने matrix को हल करके निकाली जाती है
- matrix की हर row cello, piano जैसे अलग-अलग वाद्ययंत्रों के partial derivative से मेल खाती है
- उदाहरण के तौर पर 5Hz के Fourier transform value जैसे frequency-wise मानों के लिए cost निकाली जाती है
envelope और ध्वनि के हिस्सों का विभाजन
- envelope waveform की upper bound है, और क्योंकि मौजूदा functions कई बार noise या कुछ विशेष waveforms पर ठीक से काम नहीं करते, इसलिए एक अलग तरीका इस्तेमाल किया जाता है
- गणना में waveform को chunks में बाँटकर हर chunk का maximum लिया जाता है
- इसके बाद उन जगहों को ढूँढा जाता है जहाँ envelope मूल waveform से नीचे है, और परिणाम को बेहतर बनाने के लिए नए points जोड़े जाते हैं
- envelope को attack, sustain, release में बाँटा जाता है
- attack: ध्वनि की शुरुआती आवाज़
- sustain: वह हिस्सा जहाँ ध्वनि बनी रहती है
- release: वह हिस्सा जहाँ ध्वनि रुकती है
- वाद्ययंत्र सैंपल में पहले non-zero value को attack की शुरुआत माना जाता है
- attack और sustain की सीमा उस पहले बिंदु को माना जाता है जहाँ function पहली बार नीचे की ओर concave हो जाता है या घटने लगता है
- sustain और release की सीमा अंत से पीछे की ओर देखते हुए उस पहले बिंदु से तय की जाती है जहाँ function बढ़ता है या नीचे की ओर concave होता है
- release का अंत भी अंत से पीछे देखते हुए पहले non-zero बिंदु से तय किया जाता है
decay के प्रकार और वाद्ययंत्र matching
- waveform के मुख्य रूपों को अलग करने के लिए static decay और dynamic decay पर विचार किया जाता है
- piano जैसे कुछ वाद्ययंत्र आम तौर पर exponential decay वाले static decay का पालन करते हैं
- violin जैसे कुछ वाद्ययंत्र sustain के दौरान भी ध्वनि-स्तर बढ़ा या घटा सकते हैं
- वाद्ययंत्र सैंपल में कुछ फ़ाइलें ऐसी होती हैं जो ध्वनि के स्वाभाविक रूप से खत्म होने तक चलती रहती हैं, और कुछ ऐसी जो जल्दी release कर दी जाती हैं
- decay static है या dynamic, यह decay coefficient के 1 से बड़ा होने या decay curve से बहुत अधिक विचलन के आधार पर तय किया जाता है
- envelope में release है या नहीं, यानी वह AS है या ASR, यह sustain और release की औसत परिवर्तन दर की तुलना करके तय किया जाता है
- अगर release की परिवर्तन दर कम हो, तो माना जाता है कि release नहीं है
- संगीत फ़ाइल प्रोसेसिंग में हर note frequency पर band-pass filter लगाया जाता है
- फ़िल्टर किए गए waveform पर हर वाद्ययंत्र के लिए normalized attack और release की cross-correlation निकालकर ध्वनि की शुरुआत और अंत ढूँढे जाते हैं
- इसके बाद वाद्ययंत्र waveform और फ़िल्टर किए गए ऑडियो के बीच MSE निकालकर उस समय बिंदु पर वाद्ययंत्र cost के रूप में इस्तेमाल किया जाता है
- अंतिम परिमाण Fourier transform चरण की परिमाण और envelope चरण के
1 / 비용को गुणा करके निकाली जाती है
scatter plot आधारित परिणाम प्रदर्शन
- परिणाम matplotlib के scatter plot का उपयोग करके
-आकार के points से sheet music की तरह दिखाया जाता है - मूल रूप से गणना की गई परिमाण से ऑडियो को दोबारा बनाने की कोशिश की गई थी, लेकिन उसमें कई समस्याएँ थीं, बहुत समय लगता था, और debugging भी कठिन थी
- matplotlib के imshow को भी आज़माया गया, लेकिन जहाँ अधिकांश मान 0 हों, वहाँ यह बहुत अक्षम साबित हुआ
- क्योंकि स्क्रीन को खिसकाने या zoom in/out करने पर, स्क्रीन पर दिखाई दे या न दे, सभी points को फिर से draw करना पड़ता था
- नतीजतन, इसका उपयोग sheet music पुनर्निर्माण को बेहतर बनाने में किया जा सकता है, खासकर जब सही pitch या chord ढूँढना मुश्किल हो
- उदाहरण के तौर पर YouTube video के आधार पर Noteflight score को पुनर्निर्मित करने में इसका उपयोग किया गया
- execution time भी इतना लंबा नहीं है कि उसे अव्यावहारिक कहा जाए
1 टिप्पणियां
Hacker News की राय
शीर्षक थोड़ा उलझाने वाला है। open-source separation लिखने पर यह source separation जैसा पढ़ा जाता है, लेकिन असल में यह वह नहीं है; यह एक pitch detection algorithm है, और फिर पहचानी गई pitch किस instrument से आई है, उसे classify करने का तरीका है
काफी शानदार है, लेकिन अगर आपको सच में बहुत accurate result चाहिए, तो output को सुधारने में manual तरीके से करने से भी ज्यादा समय लग सकता है
उस उम्र में बनाए गए result के हिसाब से यह कमाल है
जब musicians किसी single audio file से mixing से पहले के original tracks के करीब की चीज़, यानी stems, recover करना चाहते हैं, तो मुझे लगता है कि दूसरा शब्द ज्यादा सुनने को मिलता है
लेख में इसका सीधे उल्लेख नहीं देखा, लेकिन जिनकी रुचि हो उनके लिए automatic music transcription, यानी audio को MIDI में बदलना, deep learning और music information retrieval का काफी बड़ा subfield है
multitrack music transcription में भी कई सफल models रहे हैं, और Google का MT3 project है: https://research.google/pubs/mt3-multi-task-multitrack-music...
piano transcription के मामले में, अब बहुत low-quality audio पर भी accuracy लगभग perfect के करीब पहुँच गई है: https://github.com/EleutherAI/aria-amt
संदर्भ के लिए, ऊपर वाले repository का author मैं ही हूँ
audio-MIDI transcribers pitch और start time तो अच्छी तरह पकड़ लेते हैं, लेकिन duration और velocity कहीं कम stable होते हैं
इसे आसान बनाने के लिए मैंने उनके Colab को runtime में port किया था, लेकिन MIDI output काफी अजीब था
simple stems डालने पर भी कुछ tracks में MIDI output और audio ठीक से match नहीं करते थे और timing issues की वजह से unusable स्तर तक पहुँच जाते थे, जबकि कुछ दूसरे audio पर यह ठीक-ठाक काम करता था
अगर audio separation या stem separation में रुचि है, तो RipX देखने लायक है: https://hitnmix.com/ripx-daw-pro/
separated tracks को MIDI files के रूप में export भी कर सकते हैं। अभी कुछ problems हैं, लेकिन काफी अच्छा काम करता है
stem separation अब music software में standard feature बनता जा रहा है और लगभग हर DAW इसे देता है
मेरे काम के लिए moises इस्तेमाल करना आसान लगा: https://moises.ai/
यह पूरे song की transposition या time stretching support करता है, और stem separation तथा per-track mute/volume control के लिए simple interface देता है। यह tempo और chords को automatically detect करता है
मैं इससे जुड़ा नहीं हूँ; बस एक satisfied user हूँ जो songs सीखने और practice करने के लिए इसे लगभग रोज इस्तेमाल करता है। मैं आम तौर पर bass part को बढ़ाकर बाकी सबको 10% से कम volume पर कर देता हूँ ताकि bass साफ सुनाई दे, और इससे पता चलता है कि paid options समेत online tabs/sheet music कितनी बार गलत होती हैं। part सीख लेने के बाद bass को mute कर देता हूँ और original track के साथ bassist की तरह बजाता हूँ
0: https://www.stemroller.com/
Ableton Live - नहीं
Bitwig - नहीं
Cubase - नहीं
FL - है
Logic - है
Pro Tools - नहीं
Reason - नहीं
Reaper - नहीं
Studio One - है
Polymath MP3 से individual instrument tracks को separate और extract करने में effective है, और बहुत अच्छी तरह काम करता है
सच में शानदार है, लेकिन real instrument physics होती है जिसे simple Fourier transform templates से पकड़ा नहीं जा सकेगा। उदाहरण के लिए trumpet में same pitch होने पर भी धीरे बजाने और जोर से बजाने पर overtone spectrum काफी बदल सकता है
trumpet मजबूत overtones वाली rich harmonic series बनाता है, इसलिए Fourier transform में fundamental frequency के integer multiples पर प्रमुख peaks दिखते हैं। flute जैसे instruments ज्यादा pure tone देते हैं, लेकिन brass instruments में आम तौर पर higher overtones ज्यादा strong होते हैं, इसलिए लेख में दिए matrix equation के partial derivatives भी ज्यादा complex हो जाएंगे
यह script bandpass filtering और attack/release envelope के cross-correlation से notes की timing identify करता है। brass instruments playing intensity के अनुसार overtone composition में बड़े बदलाव वाला nonlinear behavior दिखा सकते हैं, इसलिए pp और ff में brightness बदलने पर यह algorithm उसे कैसे handle करेगा, मुझे ठीक से नहीं पता। accuracy बढ़ाने के लिए मैं instrument-specific intensity-dependent Fourier templates जोड़ने पर विचार करूँगा/करूँगी
जब instrument typical sound नहीं निकालता, या band को इस तरह perform/mix नहीं किया गया कि instruments के बीच separation maximize हो, तो ये सभी models अच्छा काम नहीं करते। उदाहरण के लिए distorted overtones वाली electric guitar vocal जैसी ही note बजा रही हो, drummer cymbals पर सिर्फ sharp noise पैदा कर रहा हो, और bassist अपने instrument से kick drum जैसी percussive sound की नकल कर रहा हो
इस तरह की experimental music में source separation का result पूरी तरह unpredictable हो जाता है, और यह musical rebalancing के लिए उपयोगी भी हो सकता है और नहीं भी
यह Joshua Bird के भाई का बनाया हुआ काम लगता है। Joshua Bird ने भी पहले HN पर आए कुछ प्रभावशाली projects किए थे: https://www.youtube.com/@joshuabird333
करीब 15 साल पहले Audiosurf खेलने की याद आ गई। समय कितनी तेजी से निकलता है
https://en.wikipedia.org/wiki/Audiosurf
पता नहीं मैंने गलत देखा है या नहीं, लेकिन YouTube demos में से कोई भी source separation दिखाता हुआ नहीं लग रहा
जोड़ना चाहूंगा कि audio research में source separation का मतलब audio को अलग-अलग clips में अलग करना होता है
मैं Ultrastar Deluxe का पुराना fan हूं। यह Singstar का open source clone है, एक karaoke game जिसमें लोग गाने के साथ गाकर compete करते हैं
यह गाए गए notes को पहचानकर उस गाने की vocal timing mapping file से compare करता है, और melody के जितना बेहतर match करके गाते हैं, score उतना ज्यादा मिलता है। lyrics बिल्कुल सही गाना जरूरी नहीं होता
fans द्वारा बनाई गई song mappings की कई libraries हैं, लेकिन वे हमेशा कम पड़ती हैं, और English·Spanish के अलावा दूसरी भाषाओं में mapped songs बहुत कम हैं। सब कुछ manually map करना काफी time-consuming है, और मैं खुद भी लगभग सुर में नहीं गा पाता, इसलिए और मुश्किल है
मैं लंबे समय से सोचता रहा हूं कि इस process को आसान तरीके से automate करने वाला software क्या हो सकता है, और यह tool original song से vocal timing और notes निकालने के लिए बहुत अच्छा लगता है
मेरी bucket list में है कि कभी अपनी मातृभाषा में Singstar playlist बनाऊं और दोस्तों के साथ singing party करूं। अगर इसी तरह के tools के सुझाव हों तो जानना चाहूंगा
text file में timestamps के साथ vocals और pitch की जरूरत लगती है, और AI उसके generation को automate करने के level के करीब पहुंच रहा है
और पढ़ने के लिए अभी मिला link छोड़ रहा हूं: https://www.reddit.com/r/karaoke/comments/x61kzy/modern_equi...
मुझे लगता है कुछ videos में audio नहीं है