wav несовместимое количество сэмплов при использовании avconv

Мне нужно создать ряд последовательных музыкальных сэмплов. Имея 1-секундную длинную волну с частотой дискретизации 44100, я должен получить массив ровно из 44100 выборок. К сожалению, это не так.

Мой подход следующий:

1) Создайте output.wav длиной 1 секунду с частотой дискретизации 44100.

avconv -i input.mp3 -ss 00:01:00 -t 00:00:01 -ar 44100 -ac 1 output.wav

2) Я читаю файл и печатаю количество образцов

meta,song  = scipy.io.wavfile.read(path + "/" +file)
assert meta == 44100
print(len(song))

Для разных вариантов input.mp3 и начальной позиции я получаю разные числа: 43776, 43776, 44928, 43776, 43776, 44928

Мой вопрос, почему это так? и как я могу изменить шаг 1, чтобы получить согласованные выборки данных?


person user2590425    schedule 23.07.2016    source источник


Ответы (1)


avconv не очень точен. Фрагмент песни, который должен длиться одну секунду, на самом деле имеет длину 0,983991 секунды.

Для решения проблемы мы могли бы использовать sox:

sox input.mp3 -r 44100 -c 1 output.wav  --show-progress trim 0 00:01

sox не поддерживает mp3 по умолчанию, поэтому мне пришлось установить

sudo apt-get install libsox-fmt-mp3
person user2590425    schedule 23.07.2016