감정적 인 내용을 제거하기 위해 말을 매개 변수로 분해


12

R 또는 Matlab에서 제안을 수락하게되어 기쁘지만 아래에 제시된 코드는 R 전용입니다.

아래 첨부 된 오디오 파일은 두 사람 사이의 짧은 대화입니다. 저의 목표는 감정적 인 내용을 인식 할 수 없도록 말을 왜곡하는 것입니다. 어려움은이 왜곡이 1에서 5까지 말할 수있는 매개 변수 공간이 필요하다는 것입니다. 여기서 1은 '높은 인식 가능한 감정'이고 5는 '인식 할 수없는 감정'입니다. R을 사용하여 달성 할 수 있다고 생각한 세 가지 방법이 있습니다.

여기 에서 '행복한'오디오 웨이브를 다운로드 하십시오 .

여기 에서 '화가 나는'오디오 ​​웨이브를 다운로드 하십시오 .

첫 번째 방법은 소음을 도입하여 전반적인 명료성을 낮추는 것이 었습니다. 이 솔루션은 아래에 제시되어 있습니다 (그의 제안에 대해 @ 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

결과는 어떻습니까? 쉰 목소리, 시끄러운 크래킹 사이에 있지만 로봇이 많지 않아야합니다. 대화가 이해하기 쉽게 확장 될 수 있다면 좋을 것입니다. 나는 모두 주관적이지만 그에 대해 걱정하지 마십시오. 거친 제안과 느슨한 해석은 매우 환영합니다.

참고 문헌 :


간단한 접근법 중 하나는 (노이즈 + 1.0)으로 음성을 변조하여 곱하는 것입니다. 그러나 또 다른 질문 : 당신은 무엇을하려고합니까? 음성을 이해할 수 없게 만들 때 당신의 주요 목표는 무엇입니까?

1
단순히 noisy <- audio + k*white_noise다양한 k 값을 사용하여 원하는 것을 수행하지 않는 이유는 무엇입니까? 물론 "지능형"은 매우 주관적이라는 것을 명심하십시오. 아, 그리고 단일 무작위 값 파일 white_noise간의 잘못된 상관 관계로 인한 우연한 영향을 피하기 위해 수십 가지의 다른 샘플을 원할 것입니다 . audionoise

궁극적으로 청각 정보의 신뢰도를 파라 메트릭 방식으로 낮추어 조작 된 오디오 클립의 레벨에 따라 정확도 판단이 달라질 수 있습니다. 정확한 판단은 대화가 행복하든 화를 입든 감정에 대한 것입니다. 문제는 긴 발화의 감정적 내용을 조작하는 것이 매우 어렵다는 것입니다 (위의 클립이 첨부 된 것처럼). 사람들은 단 하나의 모음 만 사용하지만 문장 전체가 아닙니다. 그래서 질문을 일반화하기로 결정하고 전체 오디오 정보 스펙트럼을 파라 메트릭 방식으로 분해하는 방법을 알아 냈습니다.

@CarlWitthoft 솔루션은 노이즈의 진폭 만 조정합니다. 앞서 말했듯이 노이즈와 신호 를 혼합하는 것이 필요합니다 . +1 다른 화이트 노이즈 샘플이 필요하다는 제안-실제로 지적한 바와 같이 차이가 날 수 있습니다.

음 ... 나는 여기에 무지를 주장합니다. 두 개의 오디오 스트림을 "믹싱"하는 수학적 정의는 무엇입니까? 프로그래머블 필터의 존재를 제외하고 시간 샘플링 된 진폭의 두 벡터로 할 수있는 모든 것을 추가하면된다는 것을 순진하게 가정했습니다.

답변:


11

나는 당신의 원래 질문을 읽었고 당신이 무엇을 얻고 있는지 확실하지 않았지만 지금은 훨씬 더 명확합니다. 당신이 가지고있는 문제는 배경 소음이 너무 높더라도 기존의 시도가 제한된 성공을 거두었더라도 뇌가 말하기와 감정을 선택하는 데 매우 능숙하다는 것입니다.

나는 당신이 원하는 것을 얻는 열쇠는 감정적 내용을 명확하게 전달하는 것과 분리되어 있기 때문에 감정적 내용을 전달하는 메커니즘을 이해하는 것입니다. 나는 이것에 대해 약간의 경험을 얻었고 (사실 학위 학위 논문은 비슷한 주제에 관한 것입니다) 그래서 나는 몇 가지 아이디어를 시도하고 제안 할 것입니다.

두 가지 샘플을 매우 감정적 인 말의 예라고 생각한 다음 "감정이없는"예를 생각해보십시오. 내가 지금 생각할 수있는 가장 좋은 것은 컴퓨터에서 생성 된 "Stephen Hawking"유형의 음성입니다. 따라서 내가 원하는 것을 올바르게 이해하면 그 차이점을 이해하고 컴퓨터에서 감정이없는 목소리처럼 점차 샘플을 왜곡하는 방법을 알아내는 것입니다.

많은 감정적 인 내용이 연설의 억양과 리듬에 포함되어 있기 때문에 원하는 것을 얻는 두 가지 주요 메커니즘은 피치 및 시간 왜곡을 통해 이루어진다 고 말하고 싶습니다. 따라서 시도해 볼만한 몇 가지 제안이 있습니다.

  1. 피치를 구부리고 억양을 줄이는 피치 왜곡 유형 효과. 이것은 Antares Autotune이 완전한 모노톤이 될 때까지 점점 더 일정한 값으로 피치를 점차 구부리는 방식과 동일한 방식으로 수행 할 수 있습니다.

  2. 음성의 일부 부분의 길이를 변경하는 시간 스트레치 효과-음성의 리듬을 깨뜨리는 일정한 음성 음소.

자, 만약 당신이이 방법들 중 하나에 접근하기로 결정했다면, 나는 솔직 할 것입니다-DSP에서 구현하는 것이 간단하지 않으며 단지 몇 줄의 코드가 아닐 것입니다. 신호 처리를 이해하려면 약간의 작업을 수행해야합니다. Pro-Tools / Logic / Cubase와 Antares Autotune의 사본을 가진 사람을 알고 있다면 비슷한 코드를 작성하기 전에 원하는 효과가 있는지 확인하는 것이 좋습니다.

나는 그것이 당신에게 약간의 아이디어를 제공하고 조금 도움이되기를 바랍니다. 내가 더 이상 말한 것을 설명해야한다면 알려주세요.


귀하의 제안에 감사드립니다 @Redeye. 시간 스트레치는 불행히도 옵션이 아닙니다. 비디오 정보를 표시하는 조건이 있기 때문에 수정 된 음성을 원래 음성과 같은 길이로 유지해야합니다. 피치 왜곡은 흥미로운 접근법입니다.이 방법을 더 잘 설명하기 위해 출판 된 참고 문헌을 알고 있습니까?
Geek On Acid

1
원하는 것을하기 위해 음성을 이동시키는 피치는 두 단계로 구성됩니다. 먼저 현재의 기본 주파수 프로파일을 설정하기위한 음성을 분석 한 다음, 피치를 이동시킵니다. 분석은 매우 간단하며 효과적인 몇 가지 방법이 있습니다. 피치 시프 팅은 더 복잡합니다. 출판 된 참고 문헌에 대해 AES 저널을 검색해 보겠습니다 (JAES Volume 47 Issue 11 pp. 928-936; 1999 년 11 월은 유용 할 것 같습니다). 내가 전에 말했듯이, 당신은 여기에서 매우 복잡한 처리를 시작하고 있으며 Autotune으로 먼저 시도해 볼 가치가 있습니다.
Redeye

2
Redeye는 좋은 제안을 제공하지만 피치 시프 팅 스피치의 경우 위상 보코더 나 주파수 영역 접근 방식은 권장하지 않습니다. 음성과 같은 모노 포닉 위상 고정 악기.
schnarf

4

음악 제작 소프트웨어를 구하여 원하는 효과를 얻을 수 있습니다. 그래야만 프로그래밍 방식으로이 문제를 해결할 수 있습니다. 명령 줄에서 음악 소프트웨어를 호출 할 수 있으면 R 또는 MATLAB에서 호출 할 수 있습니다.


논의되지 않은 또 다른 가능성은 음성 대 텍스트 소프트웨어를 사용하여 문자열을 만든 다음 텍스트 대 음성 소프트웨어를 사용하여 감정을 완전히 제거하여 해당 문자열을 로봇 음성으로 바꾸는 것입니다. 참조 /programming/491578/how-do-i-convert-speech-to-text/programming/637616/open-source-text-to-speech-library .

이 작업을 안정적으로 수행하려면 스피커를 인식하기 위해 첫 번째 소프트웨어를 훈련시켜야합니다.


원본 파일을 필터링해야 텍스트 음성 변환은 불행히도 실제로는 옵션이 아니지만 정상적인 음성과 합성 음성 사이의 모핑 패러다임에 대해 생각할 수도 있습니다.
Geek On Acid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.