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.
- mots Split dans le fichier audio: Cela besoin d'une reconnaissance
de silence entre les mots.
- Passez chaque mot à travers un système de reconnaissance vocale
- Trouvez une méthode de brouillage. Voulez-vous faire taire,
jumble
, remplissez-le avec white noise
ou encode
.
- reconnu Comparer mot contre le mot que vous voulez
scramble
, s'il y a un match scramble
basé sur la méthode choisie
- 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
>>>
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. –
Merci Nikolay. Je vais poster cette question ailleurs pour plus de détails. J'apprécie la réponse. Avoir un bon! –
Je travaille sur quelque chose de similaire et a fourni une réponse à la question OP. Veuillez cocher la réponse –