भावनात्मक सामग्री को हटाने के लिए भाषण को आंशिक रूप से नीचा दिखाना


12

मुझे आर या मैटलैब में सुझाव स्वीकार करने में खुशी हो रही है, लेकिन मैं नीचे प्रस्तुत कोड आर-ही है।

नीचे दी गई ऑडियो फ़ाइल दो लोगों के बीच बातचीत का एक छोटा टुकड़ा है। मेरा लक्ष्य उनके भाषण को विकृत करना है ताकि भावनात्मक सामग्री को पहचान न सके। कठिनाई यह है कि मुझे इस विकृति के लिए कुछ पैरामीट्रिक स्थान की आवश्यकता है जो 1 से 5 तक कहता है, जहां 1 'अत्यधिक पहचान योग्य भावना' है और 5 'गैर-पहचानने योग्य भावना' है। वहाँ तीन तरीके हैं जो मुझे लगा कि मैं आर के साथ इसे प्राप्त करने के लिए उपयोग कर सकता हूं।

यहां से 'खुश' ऑडियो तरंग डाउनलोड करें

यहां से 'गुस्सा' ऑडियो तरंग डाउनलोड करें

पहला दृष्टिकोण शोर को शुरू करके समग्र बुद्धिमत्ता को कम करना था। यह समाधान नीचे प्रस्तुत किया गया है (उसके सुझावों के लिए @ carl-witthoft का धन्यवाद)। यह भाषण की समझदारी और भावनात्मक सामग्री दोनों को कम कर देगा, लेकिन यह बहुत 'गंदा' दृष्टिकोण है - पैरामीट्रिक स्थान प्राप्त करने के लिए इसे सही करना कठिन है, क्योंकि आप जिस एकमात्र पहलू को नियंत्रित कर सकते हैं वह शोर का एक आयाम (वॉल्यूम) है।

require(seewave)
require(tuneR)
require(signal)
h <- readWave("happy.wav")
h <- cutw(h.norm,f=44100,from=0,to=2)#cut down to 2 sec
n <- noisew(d=2,f=44100)#create 2-second white noise
h.n <- h + n #combine audio wave with noise
oscillo(h.n,f=44100)#visualize wave with noise(black)
par(new=T)
oscillo(h,f=44100,colwave=2)#visualize original wave(red)

यहाँ छवि विवरण दर्ज करें

दूसरा दृष्टिकोण किसी भी तरह शोर को समायोजित करना होगा, केवल विशिष्ट आवृत्ति बैंड में भाषण को विकृत करना। मुझे लगा कि मैं मूल ऑडियो तरंग से आयाम लिफाफा निकालकर कर सकता हूं, इस लिफाफे से शोर उत्पन्न कर सकता हूं और फिर शोर को ऑडियो तरंग पर लागू कर सकता हूं। नीचे दिए गए कोड से पता चलता है कि यह कैसे करना है। यह शोर से अलग कुछ करता है, ध्वनि को कर्कश बनाता है, लेकिन यह उसी बिंदु पर वापस जाता है - कि मैं केवल यहां शोर के आयाम को बदलने में सक्षम हूं।

n.env <- setenv(n, h,f=44100)#set envelope of noise 'n'
h.n.env <- h + n.env #combine audio wave with 'envelope noise'
par(mfrow=c(1,2))
spectro(h,f=44100,flim=c(0,10),scale=F)#spectrogram of normal wave (left)
spectro(h.n.env,f=44100,flim=c(0,10),scale=F,flab="")#spectrogram of wave with 'envelope noise' (right)

यहाँ छवि विवरण दर्ज करें

अंतिम दृष्टिकोण इसे हल करने की कुंजी हो सकता है, लेकिन यह काफी मुश्किल है। शैनन एट अल द्वारा विज्ञान में प्रकाशित रिपोर्ट पेपर में मुझे यह विधि मिली (1996) । वे वर्णक्रमीय कमी के काफी पेचीदा पैटर्न का इस्तेमाल करते थे, जिससे कुछ ऐसा प्राप्त होता था जो शायद काफी रोबोट लगता है। लेकिन एक ही समय में, वर्णन से, मुझे लगता है कि वे समाधान पा सकते हैं जो मेरी समस्या का जवाब दे सकता है। पाठ और नोट संख्या 7 में दूसरे पैराग्राफ में महत्वपूर्ण जानकारी सन्दर्भ और नोट्स में है- पूरी विधि वहाँ वर्णित है। अब तक इसे दोहराने के मेरे प्रयास असफल रहे हैं, लेकिन नीचे दिया गया कोड मैं खोजने में कामयाब रहा, साथ में मेरी व्याख्या कि प्रक्रिया कैसे होनी चाहिए। मुझे लगता है कि लगभग सभी पहेलियाँ हैं, लेकिन मैं किसी भी तरह पूरी तस्वीर अभी तक प्राप्त नहीं कर सकता।

###signal was passed through preemphasis filter to whiten the spectrum 
#low-pass below 1200Hz, -6 dB per octave
h.f <- ffilter(h,to=1200)#low-pass filter up to 1200 Hz (but -6dB?)

###then signal was split into frequency bands (third-order elliptical IIR filters)
#adjacent filters overlapped at the point at which the output from each filter 
#was 15dB down from the level in the pass-band
#I have just a bunch of options I've found in 'signal'
ellip()#generate an Elliptic or Cauer filter
decimate()#downsample a signal by a factor, using an FIR or IIR filter
FilterOfOrder()#IIR filter specifications, including order, frequency cutoff, type...
cutspec()#This function can be used to cut a specific part of a frequency spectrum

###amplitude envelope was extracted from each band by half-wave rectification 
#and low-pass  filtering
###low-pass filters (elliptical IIR filters) with cut-off frequencies of:
#16, 50, 160 and 500 Hz (-6 dB per octave) were used to extract the envelope

###envelope signal was then used to modulate white noise, which was then 
#spectrally limited by the same bandpass filter used for the original signal

तो परिणाम कैसा होना चाहिए? यह कर्कशता के बीच कुछ होना चाहिए, एक शोर खुर, लेकिन इतना रोबोट नहीं। यह अच्छा होगा अगर बातचीत कुछ समझदारी से आगे बढ़े। मुझे पता है - यह सब थोड़ा व्यक्तिपरक है, लेकिन इसके बारे में चिंता न करें - जंगली सुझाव और ढीली व्याख्याएं बहुत स्वागत योग्य हैं।

संदर्भ:

  • शैनन, आरवी, ज़ेंग, एफजी, कामथ, वी।, वायगोंस्की, जे।, और एकेलिड, एम। (1995)। मुख्य रूप से लौकिक संकेतों के साथ भाषण मान्यता। विज्ञान , 270 (5234), 303. http://www.cogsci.msu.edu/DSS/2007-2008/Shannon/temporal_cues.pdf से डाउनलोड करें

एक सरल दृष्टिकोण को संशोधित करना होगा, इसलिए आवाज को (शोर + 1.0) के साथ गुणा करें। लेकिन एक और सवाल: आप क्या करने की कोशिश कर रहे हैं? आवाज़ों को अचिंत्य बनाते समय आपका अधिक लक्ष्य क्या है?

1
क्यों noisy <- audio + k*white_noiseकश्मीर के मूल्यों की एक किस्म के लिए बस नहीं कर रहा है तुम क्या चाहते हो? ध्यान में रखते हुए, निश्चित रूप से, कि "समझदारी" अत्यधिक व्यक्तिपरक है। ओह, और आप शायद और एक ही यादृच्छिक मूल्य फ़ाइल के white_noiseबीच झूठी सहसंबंध के कारण किसी भी संयोग प्रभाव से बचने के लिए कुछ दर्जन अलग-अलग नमूने चाहते हैं । audionoise

अंततः मैं श्रवण जानकारी की विश्वसनीयता को कम करना चाहता हूं, ताकि हेरफेर किए गए ऑडियो क्लिप के विभिन्न स्तरों के लिए सटीकता के निर्णय अलग-अलग होंगे। सटीकता निर्णय भावना के लिए होगा - चाहे बातचीत खुश हो या नाराज। समस्या यह है कि एक लंबे भाषण उच्चारण (जैसे मेरी क्लिप ऊपर संलग्न) की भावनात्मक सामग्री में हेरफेर करना बेहद मुश्किल है। लोग इसे एक ही स्वर के साथ करते हैं, लेकिन पूरे वाक्य नहीं। इसलिए मैंने प्रश्न को सामान्य बनाने का निर्णय लिया, और ऑडियो जानकारी के पूरे स्पेक्ट्रम को पैरामीट्रिक रूप से नीचा दिखाने के तरीके का पता लगाया।

@CarlWitthoft आपका समाधान केवल शोर के आयाम को समायोजित करता है, और जैसा कि मैंने कहा - मुझे कुछ ऐसा चाहिए जो सिग्नल के साथ शोर को मिलाता है । +1 आपको सुझाव है कि मुझे सफेद शोर के अलग-अलग नमूनों की आवश्यकता है - जैसा कि आपने बताया कि वास्तव में इससे फर्क पड़ सकता है।

अच्छा ... मैं यहाँ अज्ञानता की दलील देता हूँ: दो ऑडियो स्ट्रीम "मिक्सिंग" की गणितीय परिभाषा क्या है? मैं भोलेपन से यह मान रहा था कि, एक प्रोग्रामेबल फिल्टर के अस्तित्व को छोड़कर, आप सभी समय के दो वैक्टर के साथ कर सकते हैं-नमूना आयाम उन्हें जोड़ रहा है।

जवाबों:


11

मैंने आपके मूल प्रश्न को पढ़ा और यह निश्चित नहीं था कि आप क्या कर रहे थे, लेकिन यह अब बहुत स्पष्ट है। आपके पास समस्या यह है कि मस्तिष्क भाषण और भावना को बाहर निकालने में बहुत अच्छा है, तब भी जब पृष्ठभूमि शोर बहुत अधिक है जो कि आपके मौजूदा प्रयास केवल सीमित सफलता के हैं।

मुझे लगता है कि आप जो चाहते हैं वह पाने के लिए महत्वपूर्ण है कि वे तंत्र को समझें जो भावनात्मक सामग्री को व्यक्त करते हैं क्योंकि वे ज्यादातर उन लोगों से अलग होते हैं जो समझदारी को व्यक्त करते हैं। मुझे इसके आस-पास कुछ अनुभव मिला है (वास्तव में मेरी डिग्री शोध प्रबंध एक समान विषय पर था) इसलिए मैं कुछ विचारों की कोशिश करूंगा।

बहुत भावनात्मक भाषण के उदाहरणों के रूप में अपने दो नमूनों पर विचार करें, फिर विचार करें कि "भावनाहीन" उदाहरण क्या होगा। सबसे अच्छा मैं अभी सोच सकता हूं कि कंप्यूटर "स्टीफन हॉकिंग" प्रकार की आवाज है। इसलिए, अगर मैं सही समझता हूं कि आप क्या करना चाहते हैं, तो उनके बीच के अंतरों को समझें और यह पता लगाएं कि धीरे-धीरे अपने नमूनों को कैसे विकृत किया जाए, जैसे कि कंप्यूटर उत्पन्न भावहीन आवाज।

मैं कहूंगा कि आप जो चाहते हैं उसे पाने के लिए दो मुख्य तंत्र पिच और समय विकृति के माध्यम से हैं क्योंकि बहुत सारी भावनात्मक सामग्री भाषण के स्वर और ताल में निहित है। तो, कुछ चीजों का एक सुझाव जो कोशिश करने लायक हो सकता है:

  1. एक पिच विरूपण प्रकार का प्रभाव जो पिच को मोड़ता है और इंटोनेशन को कम करता है। यह उसी तरह से किया जा सकता है जब Antares ऑटोट्यून काम करता है जहां आप धीरे-धीरे पिच को एक निरंतर मान की ओर झुकते हैं जब तक कि यह एक पूर्ण मोनोटोन न हो।

  2. एक समय-खिंचाव प्रभाव जो भाषण के कुछ हिस्सों की लंबाई को बदल देता है - शायद निरंतर आवाज़ वाले स्वर जो भाषण की लय को तोड़ देगा।

अब, अगर आपने इनमें से किसी भी तरीके को अपनाने का फैसला किया है, तो मैं ईमानदार रहूँगा - वे डीएसपी में लागू करने के लिए सीधे नहीं हैं और यह कोड की कुछ पंक्तियाँ नहीं हैं। सिग्नल प्रोसेसिंग को समझने के लिए आपको कुछ काम करने की आवश्यकता है। यदि आप किसी को प्रो-टूल्स / लॉजिक / क्यूबसे और एंट्रेस ऑटोट्यून की एक कॉपी के साथ जानते हैं, तो शायद यह देखने की कोशिश करने लायक होगा कि क्या आपके पास कुछ इसी तरह का कोड करने की कोशिश करने से पहले इसका प्रभाव पड़ेगा।

मुझे उम्मीद है कि आपको कुछ विचार मिलेंगे और थोड़ी मदद मिलेगी। अगर आपको मेरी कोई भी बात समझाने की जरूरत है, तो मुझे बताएं।


आपके सुझावों के लिए धन्यवाद @Redeye समय-खिंचाव दुर्भाग्य से एक विकल्प नहीं है, क्योंकि एक ऐसी स्थिति होगी जिसमें मैं उन्हें वीडियो जानकारी के साथ प्रस्तुत करता हूं, इसलिए मुझे संशोधित भाषण को मूल एक ही लंबाई रखने की आवश्यकता है। पिच विरूपण एक दिलचस्प दृष्टिकोण है - क्या आप इस विधि को बेहतर तरीके से समझाने के लिए कोई प्रकाशित संदर्भ जानते हैं?
गीक ऑन एसिड

1
पिच को आप जो चाहते हैं उसे करने के लिए भाषण को स्थानांतरित करना - वर्तमान मौलिक आवृत्ति प्रोफ़ाइल को स्थापित करने के लिए पहले भाषण का विश्लेषण, फिर दूसरी पाली पिच। विश्लेषण काफी सीधा है और कई तरीके हैं जो प्रभावी हैं। पिच शिफ्टिंग अधिक जटिल है - मैं प्रकाशित संदर्भों के लिए एईएस पत्रिका की खोज करने की कोशिश करूंगा (जेएईएस वॉल्यूम 47 अंक 11 पीपी 928-936; नवंबर 1999 ऐसा लगता है कि यह उपयोगी हो सकता है)। जैसा कि मैंने पहले कहा था, आप यहां कुछ बहुत जटिल प्रसंस्करण में शामिल हो रहे हैं और यह निश्चित रूप से पहले ऑटोट्यून के साथ प्रयास करने लायक होगा।
Redeye

2
Redeye के पास अच्छे सुझाव हैं, लेकिन मैं सिर्फ इस बात पर ध्यान दूंगा कि पिच शिफ्टिंग स्पीच के लिए, मैं फेज़ वोडर या किसी फ़्रीक्वेंसी डोमेन अप्रोच की सिफारिश नहीं करूँगा - PSOLA (पिच-सिंक्रोनस ओवरलैप ऐड) जाने का एक अच्छा तरीका है क्योंकि यह एक के लिए बेहतर ध्वनि देगा आवाज की तरह monophonic चरण बंद साधन।
1

4

मेरा सुझाव है कि आप कुछ संगीत उत्पादन सॉफ्टवेयर प्राप्त करें और उस के साथ खेलें जो आप चाहते हैं कि प्रभाव प्राप्त करें। इसके बाद ही आपको प्रोग्राम को हल करने के बारे में चिंता करनी चाहिए। (यदि आपके संगीत सॉफ़्टवेयर को कमांड लाइन से बुलाया जा सकता है, तो आप इसे आर या MATLAB से कॉल कर सकते हैं)।


एक अन्य संभावना जिस पर चर्चा नहीं की गई है, वह स्ट्रिंग बनाने के लिए टेक्स्ट सॉफ़्टवेयर के लिए भाषण का उपयोग करके भावनाओं को पूरी तरह से बाहर करना है, फिर उस स्ट्रिंग को रोबोट आवाज़ में बदलने के लिए टेक्स्ट टू स्पीच सॉफ़्टवेयर। देखें /programming/491578/how-do-i-convert-speech-to-text और /programming/637616/open-source-text-to-speech-library

मज़बूती से इस काम को करने के लिए आपको संभवतः स्पीकर को पहचानने के लिए सॉफ्टवेयर के पहले टुकड़े को प्रशिक्षित करना होगा।


मुझे मूल फाइलों को फ़िल्टर करने की आवश्यकता है इसलिए टेक्स्ट-टू-स्पीच वास्तव में दुर्भाग्य से एक विकल्प नहीं है, हालांकि मैं सामान्य भाषण और सिंथेटिक भाषण के बीच कुछ मॉर्फिंग प्रतिमान के बारे में सोच सकता हूं।
Geek On Acid
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.