Les sprites audio (plusieurs morceaux audio concaténés dans un fichier audio) sont de plus en plus courants dans le contrôle javascript de l'audio sur le Web. Cependant, il faut beaucoup de travail "stupide" pour créer et implémenter un sprite audio. Existe-t-il un outil ou une méthode par laquelle vous pourriez le faire automatiquement au lieu de «manuellement»?
Par exemple, dans un dossier avec des fichiers audio, je souhaite un outil qui génère
Découvrez cette excellente solution Node.js:
https://github.com/tonistiigi/audiosprite
J'ai travaillé génial pour moi!
Ce script python est un moyen incontournable de générer des sprites audio et le code javascript approprié pour le Web.
Caractéristiques
Exigences:
Code Python:
silenceDuration = 0.2 # Seconds of silence between merged files outfile = "soundsSprite.wav" # Output file. Will be saved in the path below. folder = "C:/Users/Jonas/Dropbox/Documents/cnru/programmering/html5 nback/stimuli_mess/audioletters/" # Prepare... import wave, os, glob os.chdir(folder) currentTime = 0 sprite = {} # Open output file output = wave.open(outfile, 'wb') # Loop through files in folder and append to outfile for i, infile in enumerate(glob.glob('*.wav')): # Skip the outfile itself if infile == outfile: continue # Open file and get info w = wave.open(folder + infile, 'rb') soundDuration = w.getnframes() / float(w.getframerate()) # First file: determine general parameters- Create silence. if i == 0: output.setparams(w.getparams()) silenceData = [0] * int(w.getframerate() * 2 * silenceDuration) # N 0's where N are the number of samples corresponding to the duration specified in "silenceDuration" silenceFrames = "".join(wave.struct.pack('h', item) for item in silenceData) # Output sound + silence to file output.writeframes(w.readframes(w.getnframes())) output.writeframes(silenceFrames) w.close() # Create sprite metadata {'mysound.wav': [start_secs, end_secs]}. Then increment current time start = round(currentTime, 3) end = round(currentTime + soundDuration, 3) sprite[infile[:-4]] = [start, end] currentTime += soundDuration + silenceDuration # Yay, the worst is behind us. Close output file output.close() # Output in the required format. Here for jquery.mb.audio for filename, times in sprite.items(): print '%s: {id: "%s", start: %.3f, end: %.3f, loop: false}, ' % (filename, filename, times[0], times[1])
** Sortie ** J'ai couru cela pour un certain nombre de fichiers audio que j'ai eu (les lettres ont été lues à haute voix) et obtenu la sortie suivante:
Sprites variable:
{'AA': [0.449, 0.776], 'E': [3.149, 3.419], 'A': [0.0, 0.249], 'C': [2.113, 2.395], 'B': [1.554, 1.913], 'AE': [0.976, 1.354], 'D': [2.595, 2.949], 'G': [4.132, 4.554], 'F': [3.619, 3.932], 'H': [4.754, 4.972], 'K': [5.957, 6.258], 'J': [5.172, 5.757], 'L': [6.458, 6.719], 'O': [6.919, 7.133], 'Q': [8.488, 8.957], 'P': [7.853, 8.288], 'S': [9.681, 10.057], 'R': [9.157, 9.481], 'U': [10.694, 10.994], 'T': [10.257, 10.494], 'V': [11.194, 11.703], 'Y': [12.601, 12.93], 'X': [11.903, 12.401], 'Z': [13.13, 13.714], 'OE': [7.333, 7.653]}
… qui a été converti en style jquery.mb.audio :
AA: {id: "AA", start: 0.449, end: 0.776, loop: false}, E: {id: "E", start: 3.149, end: 3.419, loop: false}, A: {id: "A", start: 0.000, end: 0.249, loop: false}, C: {id: "C", start: 2.113, end: 2.395, loop: false}, B: {id: "B", start: 1.554, end: 1.913, loop: false}, AE: {id: "AE", start: 0.976, end: 1.354, loop: false}, D: {id: "D", start: 2.595, end: 2.949, loop: false}, G: {id: "G", start: 4.132, end: 4.554, loop: false}, F: {id: "F", start: 3.619, end: 3.932, loop: false}, H: {id: "H", start: 4.754, end: 4.972, loop: false}, K: {id: "K", start: 5.957, end: 6.258, loop: false}, J: {id: "J", start: 5.172, end: 5.757, loop: false}, L: {id: "L", start: 6.458, end: 6.719, loop: false}, O: {id: "O", start: 6.919, end: 7.133, loop: false}, Q: {id: "Q", start: 8.488, end: 8.957, loop: false}, P: {id: "P", start: 7.853, end: 8.288, loop: false}, S: {id: "S", start: 9.681, end: 10.057, loop: false}, R: {id: "R", start: 9.157, end: 9.481, loop: false}, U: {id: "U", start: 10.694, end: 10.994, loop: false}, T: {id: "T", start: 10.257, end: 10.494, loop: false}, V: {id: "V", start: 11.194, end: 11.703, loop: false}, Y: {id: "Y", start: 12.601, end: 12.930, loop: false}, X: {id: "X", start: 11.903, end: 12.401, loop: false}, Z: {id: "Z", start: 13.130, end: 13.714, loop: false}, OE: {id: "OE", start: 7.333, end: 7.653, loop: false},
Grâce à l'inspiration de: comment créer un fichier wav avec python et comment rejoindre les fichiers wave en utilisant python (réponse de Tom10)