Resample (upsample) wav без интерполяции (sox)?

Итак, я начинаю этот эксперимент так: откройте Audacity, затем установите Project Rate (Hz) на 8000, затем Generate/Silence... - и в появившемся диалоговом окне измените формат времени на сэмплы и установите длину на 10 образцы. Затем, когда полученная тишина из 10 сэмплов будет вставлена, используйте Инструмент рисования (F3), чтобы назначить произвольное значение семплам — это будет выглядеть примерно так:

дерзость-01

Затем Файл/Экспорт/Экспорт в формате 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 кГц - однако без интерполяции (то есть сэмплы просто повторяются: учитывая, что в этом случае 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?

... но когда я импортирую test_out.wav в Audacity, я вижу это:

дерзость-02

... Итак, файл с передискретизацией явно был интерполирован.

Просто для справки: файл с передискретизацией без интерполяции будет выглядеть примерно так (я пытался рисовать вручную с помощью инструмента «Рисование», так что это не совсем точно, но для иллюстрации должно хватить):

audacity-03-non-interp

Можно ли как-то уговорить sox сделать ресемплинг без интерполяции? В качестве альтернативы, есть ли другой инструмент, который позволил бы мне передискретизировать .wavs без интерполяции?


Для полноты картины вот шестнадцатеричный дамп 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 (см. в двоичный файл с помощью команды Linux )


person sdbbs    schedule 20.10.2020    source источник