簡體   English   中英

用於web / javascript的自動音頻精靈生成器?

[英]Automatic audio sprite generator for web/javascript?

音頻精靈 (在一個音頻文件中連接的幾個音頻咬合)在網絡上的音頻的javascript控制中變得越來越普遍。 但是,創建和實現音頻精靈需要花費大量“愚蠢”的工作。 是否有工具或方法可以自動執行而不是“手動”?

例如,給定一個包含音頻文件的文件夾,我想要一個生成的工具

  1. 包含所有內容的音頻文件,最好用一點沉默分隔。
  2. 音頻文件中每個聲音的開始和偏移時間(以毫秒為單位)。 最好,它會輸出javascript精靈代碼本身!

看看這個優秀的Node.js解決方案:

https://github.com/tonistiigi/audiosprite

對我來說很棒!

這個python腳本是為網絡生成音頻精靈和適當的javascript代碼的簡單方法。

特征

  • 不需要安裝特殊模塊。
  • 將音頻文件連接到精靈,用沉默填充
  • 生成javascript精靈信息(時間)

要求:

  1. 僅適用於.wav作為輸入和輸出。 之后轉換為其他文件格式。
  2. 所有音頻文件應具有相同的屬性(采樣率,通道等)

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])

**輸出**我運行了一些我有的音頻文件(朗讀信件)並得到以下輸出:

精靈變量:

{'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]}

...轉換為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},

感謝靈感來自: 如何使用python制作wav文件以及如何使用python加入wavefiles (tom10的答案)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM