Degradieren Sie die Sprache parametrisch, um emotionalen Inhalt zu entfernen

  • Ich akzeptiere gerne Vorschläge in R oder Matlab, aber der unten abgebildete Code ist R-only.

    Die unten angefügte Audiodatei ist ein kurzes Gespräch zwischen zwei Personen. Mein Ziel ist es, ihre Sprache zu verzerren, so dass der emotionale Inhalt nicht mehr erkennbar wird. Die Schwierigkeit ist, dass ich für diese Verzerrung etwas parametrischen Raum brauche, sagen wir von 1 bis 5, wobei 1 "stark erkennbare Emotion" und 5 "nicht erkennbare Emotion" ist. Es gibt drei Möglichkeiten, auf die ich mit R zurückgreifen kann.

    Laden Sie "glückliche" Audio-Wellen von hier .

    Laden Sie 'angry' Audio-Wave von hier .

    Der erste Ansatz bestand darin, die allgemeine Verständlichkeit durch Lärm zu verringern. Diese Lösung wird im Folgenden vorgestellt (danke @ carl-witthoft für seine Vorschläge). Dies verringert sowohl die Verständlichkeit als auch den emotionalen Inhalt der Sprache, ist aber sehr "schmutzig" - es ist schwierig, den Parameterraum zu bestimmen, da der einzige Aspekt, den Sie dort steuern können, eine Amplitude (Lautstärke) des Rauschens ist.

     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)
     

    Degradieren Sie die Sprache parametrisch, um emotionalen Inhalt zu entfernen

    Der zweite Ansatz wäre irgendwie das Rauschen einstellen, um die Sprache nur in den bestimmten Frequenzbändern zu verzerren. Ich dachte, ich könnte das tun, indem ich die Amplitudenhüllkurve aus der ursprünglichen Audiowelle extrahiere, Rauschen aus dieser Hüllkurve generieren und das Rauschen dann erneut auf die Audiowelle anwenden würde. Der folgende Code zeigt, wie das geht. Es macht etwas anderes als das Rauschen selbst, lässt das Geräusch knacken, aber es geht zurück an den gleichen Punkt - dass ich hier nur die Amplitude des Rauschens ändern kann.

     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)
     

    Degradieren Sie die Sprache parametrisch, um emotionalen Inhalt zu entfernen

    Der endgültige Ansatz könnte sein Der Schlüssel zum Lösen dieses Problems, aber es ist ziemlich schwierig. ich fand

    17 January 2012
    Bill
1 answer
  • Ich habe Ihre ursprüngliche Frage gelesen und war mir nicht ganz sicher, worauf Sie hinaus wollten, aber es ist jetzt viel klarer. Das Problem, das Sie haben, ist, dass das Gehirn extrem gut darin ist, Sprache und Emotionen herauszupicken, selbst wenn das Hintergrundgeräusch sehr hoch ist. Dies bedeutet, dass Ihre bisherigen Versuche nur begrenzt erfolgreich waren.

    Ich glaube, der Schlüssel zum Erreichen des gewünschten Ergebnisses liegt darin, die Mechanismen zu verstehen, die den emotionalen Inhalt vermitteln, da diese meist von denen getrennt sind, die die Verständlichkeit vermitteln. Ich habe einige Erfahrungen damit gemacht (in der Tat hatte meine Diplomarbeit zu einem ähnlichen Thema stattgefunden), also versuche ich, einige Ideen anzubieten.

    Betrachten Sie Ihre beiden Beispiele als Beispiele von sehr emotionaler Sprache, dann betrachten Sie, was wäre ein "emotionsloses" Beispiel. Das Beste, woran ich im Moment denken kann, ist die computergenerierte "Stephen Hawking" -Stimme. Wenn ich also richtig verstehe, was Sie tun möchten, müssen Sie die Unterschiede zwischen ihnen verstehen und herausfinden, wie Sie Ihre Samples verzerren können, um allmählich wie eine computergenerierte, emotionslose Stimme zu werden.

    I ' Ich sage, dass die zwei Hauptmechanismen, um zu bekommen, was Sie wollen, die Tonhöhe und die Zeitverzerrung sind, da ein Großteil des emotionalen Inhalts in der Intonation und im Rhythmus der Sprache enthalten ist. Ein Vorschlag für ein paar Dinge, die vielleicht einen Versuch wert wären:

    1. Ein Effekt der Tonhöhenverzerrung, der die Tonhöhe verbiegt und die Intonation reduziert . Dies kann auf dieselbe Weise erfolgen wie Antares Autotune, wo Sie die Tonhöhe schrittweise immer mehr in Richtung eines konstanten Werts biegen, bis es vollständig monoton ist.

    2. Ein Zeit- Dehnungseffekt, der die Länge einiger Teile der Sprache ändert - vielleicht die konstant stimmhaften Phoneme, die den Rhythmus der Sprache aufbrechen würden.

    < Nun, wenn Sie sich für eine dieser Methoden entschieden haben, dann bin ich ehrlich - sie sind nicht so einfach in DSP zu implementieren und es geht nicht
    23 January 2012
    tomjedrz