2016-04-07 2 views
0

Ceci est ma deuxième question jamais publiée ici, alors s'il vous plaît laissez-moi savoir si j'ai fait quelque chose de mal.Y a-t-il un logiciel qui peut brouiller/brouiller une partie d'un fichier audio automatiquement?

Je suis confronté à un problème intéressant aujourd'hui. Je travaille pour un centre d'appels et l'un des clients de mon entreprise vérifie les informations pour les besoins de rassembler les numéros de compte bancaire des clients et veut que nos agents de service client pour entrer les numéros de compte bancaire dans le site Web externe des clients.

Ces numéros de compte bancaire ne seront sauvegardés nulle part dans nos bases de données locales, mais l'audio dans lequel nos CSR rassemblent les numéros de compte bancaire sera enregistré dans notre système. Le texte brut ne sera pas disponible mais les fichiers sonores le seront. Ma question est s'il y a un moyen de brouiller automatiquement une certaine partie d'un enregistrement automatiquement en utilisant un programme? Je sais que c'est un coup sérieux dans le noir. Je vous remercie.

+1

Salut Justin, ce site est surtout sur des questions de programmation, votre celui-ci est pas vraiment sur la programmation puisque vous n'avez encore écrit aucun programme. Vous pourriez probablement poser cette question dans un autre endroit, comme si cela pouvait convenir à Quora. Pour répondre à votre question, oui, c'est une tâche assez banale de couper un morceau d'enregistrement, vous n'avez pas besoin de le brouiller, vous pouvez en faire un silence complet. –

+0

Merci Nikolay. Je vais poster cette question ailleurs pour plus de détails. J'apprécie la réponse. Avoir un bon! –

+0

Je travaille sur quelque chose de similaire et a fourni une réponse à la question OP. Veuillez cocher la réponse –

Répondre

1

Bien que votre question ne pose pas de problème de programmation spécifique, j'essaierai d'y répondre puisque je travaille sur quelque chose de similaire.

Peut-on automatiquement brouiller une partie d'un enregistrement automatiquement en utilisant un programme?
Nous pouvons certainement. Cela dépendra du degré de complexité que vous voudriez atteindre.

Bien qu'il existe une méthode complexe, d'un point de vue de concept très basique, nous aurons besoin de prendre le fichier audio enregistré et le processus dans les étapes suivantes.

  1. mots Split dans le fichier audio: Cela besoin d'une reconnaissance
    de silence entre les mots.
  2. Passez chaque mot à travers un système de reconnaissance vocale
  3. Trouvez une méthode de brouillage. Voulez-vous faire taire, jumble, remplissez-le avec white noise ou encode.
  4. reconnu Comparer mot contre le mot que vous voulez scramble, s'il y a un match scramble basé sur la méthode choisie
  5. Combiner (concatenate) tous les mots dans le bon ordre et stocker il.

J'ai mis ensemble un prototype de base qui fera ci-dessus sauf (4). Le programme utilise fortement pydub, qui fournit des moyens plus faciles de manipuler l'audio. Un tutoriel sur ce peut être trouvé here.

Le programme essentiellement,

1) Je téléchargé open source fichier wav préenregistrés from this site pour les numéros 0 à 10 et les concaténer en utilisant pydub.
Le programme découpe le fichier audio en plusieurs parties d'une seconde. J'ai utilisé audacity pour séparer chaque mot afin qu'ils tiennent dans une seconde fenêtre. Dans la vraie vie, ce ne sera pas le cas.

2) Il passe ensuite le mot à travers google speech recognition engine et montre le mot reconnu. Comme vous le verrez, le mot six n'est pas reconnu correctement. Vous aurez besoin d'un robuste speech recognition engine à cette fin.

3) Le programme offre trois méthodes scramble différentes.

  • a) inverse le mot
  • b) Remplacer mot équivalent white noise
  • c) Remplacer mot silence

4) Il choisir ensuite trois mots 9, 4 et 2 et appliquer ci-dessus scramble et remplacer le fichier de mots correspondant

5) Il concatène ensuite tous les mots avec des mots brouillés dans le bon ordre et créer un fichier de sortie.

Note: Je n'ai pas eu assez de temps pour ajouter la comparaison entre mot à brouiller et mot reconnu. Informez-moi s'il y a des questions.

**** Code de démonstration: ****

""" Declarations """ 
import speech_recognition as sr 
from pydub import AudioSegment 
from pydub.silence import split_on_silence 
from pydub.generators import WhiteNoise 
from pydub.playback import play 



""" Function for Speech Recognition """ 
def processAudio(WAV_FILE): 
    r = sr.Recognizer() 
    with sr.WavFile(WAV_FILE) as source: 
     audio = r.record(source) # read the entire WAV file 

    # recognize speech using Google Speech Recognition 
    try: 
     print("recognizedWord=" + r.recognize_google(audio)) 
    except sr.UnknownValueError: 
     print("Could not understand audio") 
    except sr.RequestError as e: 
     print("Could not request results from GSR; {0}".format(e)) 

""" Function to scramble word based upon choice """ 
def scramble_audio(aWord, option): 
    scramble_file = export_path + "slice" + str(aWord) +".wav" 
    scramble_audioseg = AudioSegment.from_wav(scramble_file)  
    aWord_length = scramble_audioseg.__len__() #Get length of word segment to scramble 

    if option == "reverse":  #Reverse word to scramble 
     scrambled_word = scramble_audioseg.reverse()   

    elif option == "whiteNoise": #Replace word to scramble with white noise  
     wn = WhiteNoise()   #Instantiate White Noise Object   
     aWord_length = scramble_audioseg.__len__()    #Get length of word segment 
     scrambled_word = wn.to_audio_segment(duration=aWord_length) #Create audio_segment 

    elif option == "silence":    #Replace word to scramble with silence 
     scrambled_word = AudioSegment.silent(duration=aWord_length) 

    print ("Scrambling and Exporting %s" % scramble_file) 
    scrambled_word.export(scramble_file, format="wav") #Export merged audio file 


if __name__ == "__main__": 

    export_path = ".//splitAudio//" 
    in_audio_file = "0-10.wav" 
    out_audio_file = export_path + "scrambledAudio.wav" 

    #Read main audio file to be processed. Assuming in the same folder as this script 
    sound = AudioSegment.from_wav(in_audio_file) 

    sec2_splice = 1 #Splice threshold in sec 

    audio_length = len(sound) # Total Audio Length In millisec 

    q, r = divmod(audio_length, sec2_splice) #Get quotient and remainder 

    #Get total segments and rounds to next greater integer 
    total_segments= (q + int(bool(r)))/1000 #Converting to sec 

    #Iterate through slices every one second and export 
    print ("") 
    n=0 
    while n <= total_segments: 
     print ("Making slice from %d to %d (sec)" % (n , sec2_splice))  
     temp_object = sound[ (n * 1000) : (sec2_splice * 1000)] #Slicing is done in millisec 
     myaudio_file = export_path + "slice" + str(n) +".wav" 
     temp_object.export(myaudio_file , format="wav") 
     print ("Trying to recognize %d " %n) 
     processAudio(myaudio_file) 
     n = sec2_splice 
     sec2_splice += 1  


    #Scramble desired audio slice 
    print ("") 
    scramble_word = 9 
    scramble_audio(scramble_word, "reverse") 

    scramble_word = 4 
    scramble_audio(scramble_word, "whiteNoise") 

    scramble_word = 2 
    scramble_audio(scramble_word, "silence") 
    #Combine modified audio 

    final_audio = AudioSegment.empty() #Create empty AudioSegment 
    print ("") 
    i = 0 
    while i <= total_segments: 
     temp_audio_file = export_path + "slice" + str(i) +".wav" 
     temp_audio_seg = AudioSegment.from_wav(temp_audio_file) 
     print ("Combining %s" % temp_audio_file) 
     final_audio = final_audio.append(temp_audio_seg, crossfade=0) 
     i += 1 

    print ("Exporting final audio %s" % out_audio_file) 
    final_audio.export(out_audio_file , format="wav") 

Sortie:

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> ================================ RESTART ================================ 
>>> 

Making slice from 0 to 1 (sec) 
Trying to recognize 0 
recognizedWord=0 
Making slice from 1 to 2 (sec) 
Trying to recognize 1 
recognizedWord=1 
Making slice from 2 to 3 (sec) 
Trying to recognize 2 
Could not understand audio 
Making slice from 3 to 4 (sec) 
Trying to recognize 3 
recognizedWord=3 
Making slice from 4 to 5 (sec) 
Trying to recognize 4 
recognizedWord=4 
Making slice from 5 to 6 (sec) 
Trying to recognize 5 
recognizedWord=5 
Making slice from 6 to 7 (sec) 
Trying to recognize 6 
recognizedWord=sex 
Making slice from 7 to 8 (sec) 
Trying to recognize 7 
recognizedWord=7 
Making slice from 8 to 9 (sec) 
Trying to recognize 8 
recognizedWord=8 
Making slice from 9 to 10 (sec) 
Trying to recognize 9 
recognizedWord=9 
Making slice from 10 to 11 (sec) 
Trying to recognize 10 
recognizedWord=10 

Scrambling and Exporting .//splitAudio//slice9.wav 
Scrambling and Exporting .//splitAudio//slice4.wav 
Scrambling and Exporting .//splitAudio//slice2.wav 

Combining .//splitAudio//slice0.wav 
Combining .//splitAudio//slice1.wav 
Combining .//splitAudio//slice2.wav 
Combining .//splitAudio//slice3.wav 
Combining .//splitAudio//slice4.wav 
Combining .//splitAudio//slice5.wav 
Combining .//splitAudio//slice6.wav 
Combining .//splitAudio//slice7.wav 
Combining .//splitAudio//slice8.wav 
Combining .//splitAudio//slice9.wav 
Combining .//splitAudio//slice10.wav 
Exporting final audio .//splitAudio//scrambledAudio.wav 
>>> 
+0

Wow, merci de l'avoir posté. Je transmettrai ceci à quelqu'un de mon équipe de développement qui est plus apte à regarder cela que moi. J'apprécie la réponse! –

+0

Hi- Est-ce que cela répond à votre question? Si oui, acceptez la réponse [cochez la case près du vote] ou faites-moi savoir si vous avez besoin d'éclaircissements. –