Ich habe ein kleines Skript, mit dem Sie Ihr Signal mit einer Stille voranzustellen, um die Zieldauer in Sekunden zu erhalten. Es verwendet die scipy-Funktion zum Lesen der wav-Datei.
#!/usr/bin/env python
from __future__ import print_function, division
import scipy.io.wavfile as wavf
import numpy as np
from sys import argv
def pad_audio(data, fs, T):
# Calculate target number of samples
N_tar = int(fs * T)
# Calculate number of zero samples to append
shape = data.shape
# Create the target shape
N_pad = N_tar - shape[0]
print("Padding with %s seconds of silence" % str(N_pad/fs))
shape = (N_pad,) + shape[1:]
# Stack only if there is something to append
if shape[0] > 0:
if len(shape) > 1:
return np.vstack((np.zeros(shape),
data))
else:
return np.hstack((np.zeros(shape),
data))
else:
return data
if __name__ == "__main__":
if len(argv) != 4:
print("Wrong arguments.")
print("Use: %s in.wav out.wav target_time_s" % argv[0])
else:
in_wav = argv[1]
out_wav = argv[2]
T = float(argv[3])
# Read the wav file
fs, in_data = wavf.read(in_wav)
# Prepend with zeros
out_data = pad_audio(in_data, fs, T)
# Save the output file
wavf.write(out_wav, fs, out_data)
Ich hätte gedacht, es wäre besser, die Stille auf das Ende zu stellen, sonst muss der Hörer eine unbekannte Schweigeminute ertragen, bevor er vom eigentlichen Sound überrascht wird. Wie auch immer, Sie könnten versuchen, dies zu tun, indem Sie eine WAV-Datei erstellen/abspielen, die genügend Samples mit der von Ihnen verwendeten Sample-Rate für (10-L) Sekunden enthält, wobei L die Dauer der eigentlichen Audiodatei ist. Was hast du probiert? PS: Es gibt ein Python-Standard-Bibliothekspaket mit dem Namen _wave_, an dem Sie vielleicht interessiert sind. Ich habe es gefunden, indem ich nach: python wav audio gesucht habe. Hast du versucht zu suchen? – barny