- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用下面显示的以下函数来清理和缩减音频采样。我陷入了这个我缺乏理解的错误。有人愿意解释一下并希望帮助我解决这个问题吗?
我可以看到它与 wavio 功能有关,并且无法读取文件。
代码如下:
def envelope(y, rate, threshold):
mask = []
y = pd.Series(y).apply(np.abs)
y_mean = y.rolling(window=int(rate/20),
min_periods=1,
center=True).max()
for mean in y_mean:
if mean > threshold:
mask.append(True)
else:
mask.append(False)
return mask, y_mean
def downsample_mono(path, sr):
obj = wavio.read(path)
wav = obj.data.astype(np.float32, order='F')
rate = obj.rate
try:
tmp = wav.shape[1]
wav = to_mono(wav.T)
except:
pass
wav = resample(wav, rate, sr)
wav = wav.astype(np.int16)
return sr, wav
def save_sample(sample, rate, target_dir, fn, ix):
fn = fn.split('.wav')[0]
dst_path = os.path.join(target_dir.split('.')[0], fn+'_{}.wav'.format(str(ix)))
if os.path.exists(dst_path):
return
wavfile.write(dst_path, rate, sample)
def check_dir(path):
if os.path.exists(path) is False:
os.mkdir(path)
def split_wavs(args):
src_root = args.src_root
dst_root = args.dst_root
dt = args.delta_time
wav_paths = glob('{}/**'.format(src_root), recursive=True)
wav_paths = [x for x in wav_paths if '.wav' in x]
dirs = os.listdir(src_root)
check_dir(dst_root)
classes = os.listdir(src_root)
for _cls in classes:
target_dir = os.path.join(dst_root, _cls)
check_dir(target_dir)
src_dir = os.path.join(src_root, _cls)
for fn in tqdm(os.listdir(src_dir)):
src_fn = os.path.join(src_dir, fn)
rate, wav = downsample_mono(src_fn, args.sr)
mask, y_mean = envelope(wav, rate, threshold=args.threshold)
wav = wav[mask]
delta_sample = int(dt*rate)
# cleaned audio is less than a single sample
# pad with zeros to delta_sample size
if wav.shape[0] < delta_sample:
sample = np.zeros(shape=(delta_sample,), dtype=np.int16)
sample[:wav.shape[0]] = wav
save_sample(sample, rate, target_dir, fn, 0)
# step through audio and save every delta_sample
# discard the ending audio if it is too short
else:
trunc = wav.shape[0] % delta_sample
for cnt, i in enumerate(np.arange(0, wav.shape[0]-trunc, delta_sample)):
start = int(i)
stop = int(i + delta_sample)
sample = wav[start:stop]
save_sample(sample, rate, target_dir, fn, cnt)
def test_threshold(args):
src_root = args.src_root
wav_paths = glob('{}/**'.format(src_root), recursive=True)
wav_path = [x for x in wav_paths if args.fn in x]
if len(wav_path) != 1:
print('audio file not found for sub-string: {}'.format(args.fn))
return
rate, wav = downsample_mono(wav_path[0], args.sr)
mask, env = envelope(wav, rate, threshold=args.threshold)
plt.style.use('ggplot')
plt.title('Signal Envelope, Threshold = {}'.format(str(args.threshold)))
plt.plot(wav[np.logical_not(mask)], color='r', label='remove')
plt.plot(wav[mask], color='c', label='keep')
plt.plot(env, color='m', label='envelope')
plt.grid(False)
plt.legend(loc='best')
plt.show()
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Cleaning audio data')
parser.add_argument('--src_root', type=str, default='Audio Data/Ordered Files',
help='directory of audio files in total duration')
parser.add_argument('--dst_root', type=str, default='Audio Data/Clean Audio',
help='directory to put audio files split by delta_time')
parser.add_argument('--delta_time', '-dt', type=float, default=2.0,
help='time in seconds to sample audio')
parser.add_argument('--sr', type=int, default=44100,
help='rate to downsample audio')
parser.add_argument('--fn', type=str, default='HBJQWAO',
help='file to plot over time to check magnitude')
parser.add_argument('--threshold', type=str, default=20,
help='threshold magnitude for np.int16 dtype')
args, _ = parser.parse_known_args()
test_threshold(args)
#split_wavs(args)
错误:
Error Traceback (most recent call last)
<ipython-input-16-97e9b68095c0> in <module>()
17 args, _ = parser.parse_known_args()
18
---> 19 test_threshold(args)
20 #split_wavs(args)
6 frames
<ipython-input-14-fe4eeabe5e06> in test_threshold(args)
85 print('audio file not found for sub-string: {}'.format(args.fn))
86 return
---> 87 rate, wav = downsample_mono(wav_path[0], args.sr)
88 mask, env = envelope(wav, rate, threshold=args.threshold)
89 plt.style.use('ggplot')
<ipython-input-14-fe4eeabe5e06> in downsample_mono(path, sr)
14
15 def downsample_mono(path, sr):
---> 16 obj = wavio.read(path)
17 wav = obj.data.astype(np.float32, order='F')
18 rate = obj.rate
/usr/local/lib/python3.6/dist-packages/wavio.py in read(file)
166 with values that have been sign-extended.
167 """
--> 168 wav = _wave.open(file)
169 rate = wav.getframerate()
170 nchannels = wav.getnchannels()
/usr/lib/python3.6/wave.py in open(f, mode)
497 mode = 'rb'
498 if mode in ('r', 'rb'):
--> 499 return Wave_read(f)
500 elif mode in ('w', 'wb'):
501 return Wave_write(f)
/usr/lib/python3.6/wave.py in __init__(self, f)
161 # else, assume it is an open file object already
162 try:
--> 163 self.initfp(f)
164 except:
165 if self._i_opened_the_file:
/usr/lib/python3.6/wave.py in initfp(self, file)
141 chunkname = chunk.getname()
142 if chunkname == b'fmt ':
--> 143 self._read_fmt_chunk(chunk)
144 self._fmt_chunk_read = 1
145 elif chunkname == b'data':
/usr/lib/python3.6/wave.py in _read_fmt_chunk(self, chunk)
258 self._sampwidth = (sampwidth + 7) // 8
259 else:
--> 260 raise Error('unknown format: %r' % (wFormatTag,))
261 self._framesize = self._nchannels * self._sampwidth
262 self._comptype = 'NONE'
Error: unknown format: 3
最佳答案
使用例如检查波头soxi你会发现WAVE不是用int16
格式写的,而是用float
格式写的。我怎么知道呢? This code读取 wFormatTag
标记。在您的情况下,异常返回代码为 3
,即 FLOAT
( reference )。
一种选择是使用 pySoundFile并指定 float
作为数据格式。
import soundfile as sf
data, samplerate = sf.read('file.wav', dtype='float32')
关于python - 错误: unknown format: 3 (When trying to read audio wavfile),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64539762/
我正在尝试使用 scipy.io.wavfile.write() 创建一个 .wav 文件,但结果是一个嘈杂的 wav 文件,我在 iNotebook 上尝试过同样的结果,这里是代码: import
我已将我的问题隔离为最低限度的问题:读入 WAV 文件,然后立即将其写回。尽管输入是音乐,但输出是噪音。这让我很困惑。这是代码: import scipy.io.wavfile as wavfile
我在将 2d numpy 数组写入波形文件(音频)时遇到问题 根据文档,我应该写一个 2d int16 numpy 数组 https://docs.scipy.org/doc/scipy-0.18.1
每当我尝试读取 .wav 文件时,都会出现以下错误。我到处搜索,但没有任何进展。 代码: import scipy as sp import matplotlib.pyplot as plt sr,
scipy.io.wavfile.read 的文档说它返回采样率和数据。但是,如果是 .wav 文件,这里的数据实际上意味着什么? 谁能通俗地告诉我这些数据是如何准备的? 附言。我在某处读到它意味着振
我需要删除一个 wave 文件的前 1024 个字节。我尝试这样做,但我得到了损坏/扭曲的 wavfile: wavFile = fopen(fullFileName, 'r'); % Open fi
我正在尝试从 Python 中的 wav 文件中获取数据并绘制它。当我使用 scipy.io.wavfile.read() 时,我得到一个如下所示的数组: [[ -1.49836736e-02 -1
我试图使用 scipy.io.wavfile.read 获取 wav 文件的数据,但它总是返回此错误消息: ValueError: 意外的文件结尾。 我浏览了本网站上的所有相关问题(我猜)。但他们都没
我有两个相同的数组(按照设计,因为我通过执行 FFT 然后对第一个数组进行逆 FFT 获得了第二个数组)。但是,当我将第一个文件写入 .wav 文件时,我会得到发声文件,而对第二个文件执行相同操作时则
我正在尝试使用 scipy 读取 *.wav 文件。我执行以下操作: import scipy x = scipy.io.wavfile.read('/usr/share/sounds/purple/
找了半天还是没找到解决办法使用scipy.io.wavfile.read()从 stdout 读取字节的 FFmpeg 3.3.6。 这是完美运行的示例代码。但是,它需要将转换后的文件保存到磁盘。 i
第一个返回带有异类声音的WAV文件(原始声音更像是简单的Techno节拍) 第二个仅在使用np.float32进行设置(也带有失真)时才返回WAV文件。 速率,信号= wavfile.read('au
This question already has an answer here: What exactly is the data returned when reading a .wav file
我正在尝试通过以下代码读取 .wav 音频文件 from scipy.io import wavfile file = 'PC1_20090513_050000_0010.wav' rate, aud
我正在尝试在 Python 中处理 wav 文件。我下载了据说可以完成这项工作的 SciPy 库。为了查看它是否有效,我正在尝试读取一个 wav 文件,然后将其再次写入磁盘。由于某种原因,创建的新 w
我有一个关于librosa的load函数和scipy.io.wavfile的read函数的区别的问题。 from scipy.io import wavfile import librosa fs,
我正在尝试将 .wav 文件读入数组,以便我可以绘制数组并进行 FFT。我用 wave 模块打开了文件,现在我很挣扎。我被建议使用 scipy.io.wavfile.read(filename, mm
我正在尝试使用下面显示的以下函数来清理和缩减音频采样。我陷入了这个我缺乏理解的错误。有人愿意解释一下并希望帮助我解决这个问题吗? 我可以看到它与 wavio 功能有关,并且无法读取文件。 代码如下:
我有一个一维数组 y,有 132300 个条目。 print y.ndim 给我 1。 现在,当我使用 write('440saw2000.wav', '44100', 'y') 时,我收到以下错误消
我正在尝试使用 scipy 读取 .wav 文件。我这样做: from scipy.io import wavfile filename = "myWavFile.wav" print "Proces
我是一名优秀的程序员,十分优秀!