问题描述
好,所以我开始这样的实验:打开Audacity,然后将Project Rate(Hz)设置为8000,然后将Generate / Silence ...-生成,并在出现的对话框中,将时间格式更改为“ samples”,然后将长度设置为10个样本。然后,在插入产生的10个样本的静默后,使用绘图工具(F3)为样本分配一些随机值-看起来像这样:
然后将文件/导出/导出另存为WAV-并将其另存为test.wav
。我们可以在命令行上使用mediainfo
进行检查:
$ mediainfo test.wav
General
Complete name : test.wav
Format : Wave
File size : 64.0 Bytes
Overall bit rate mode : Constant
Audio
Format : PCM
Format settings : Little / Signed
Codec ID : 1
Bit rate mode : Constant
Bit rate : 128 kb/s
Channel(s) : 1 channel
Sampling rate : 8 000 Hz
Bit depth : 16 bits
好吧,现在我想将其重新采样到48 KHz-但是,不进行插值(也就是说,仅重复采样:考虑到在这种情况下,48/8 = 6,则意味着上述每个采样都应重复6次,以获得新的重新采样文件)
因此,我尝试使用默认设置为sox
:
$ sox test.wav -r 48000 test_out.wav
C:\Program Files (x86)\sox-14-4-2\sox.exe WARN rate: rate clipped 1 samples; decrease volume?
C:\Program Files (x86)\sox-14-4-2\sox.exe WARN dither: dither clipped 1 samples; decrease volume?
...但是当我在Audacity中导入test_out.wav
时,会看到以下内容:
...因此,重新采样的文件显然已经插值了。
仅作记录,一个非插值的重采样文件将类似于以下内容(我尝试使用“绘图工具”手动进行绘制,因此并不十分精确,但足以用于说明目的):
我可以说服sox
在没有插值的情况下进行重采样吗?另外,有没有其他工具可以让我对.wav
进行重新采样而无需插值?
为完整起见,这是我在此处使用的test.wav
的十六进制转储:
$ hexdump -C test.wav
00000000 52 49 46 46 38 00 00 00 57 41 56 45 66 6d 74 20 |RIFF8...WAVEfmt |
00000010 10 00 00 00 01 00 01 00 40 1f 00 00 80 3e 00 00 |........@....>..|
00000020 02 00 10 00 64 61 74 61 14 00 00 00 00 00 78 29 |....data......x)|
00000030 8b 5f a4 95 e5 c0 80 3b 2a 6c b1 39 3f 19 fc ff |._.....;*l.9?...|
00000040
您可以使用xxd
(请参阅Transform hexadecimal information to binary using a Linux command)将其转换回二进制文件
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)