Конвертирование аудио файлов между Pydub и Librosa - PullRequest
2 голосов
/ 12 ноября 2019

Я пытаюсь открыть AudioFile в Librosa. Обрежьте его, а затем измените его, используя pydub. Это мой код:

sound = AudioSegment.from_file(filePath)
samples = sound.get_array_of_samples()
arr = np.array(samples)
print(type(arr))
print(arr)
# then modify samples...
y, index = librosa.effects.trim(arr)

Проблема в том, что даже если я буду следовать решению, изложенному здесь:
https://github.com/jiaaro/pydub/issues/289

Я не могу использовать обрезку librosa ()функция. Это дает мне эту ошибку:

librosa.util.exceptions.ParameterError: Audio data must be floating-point

Причина этого в том, что Librosa ожидает массив с плавающей запятой (и работает с ними), в то время как Pydub экспортирует массив целых чисел (которыйЯ конвертирую в массив NP). Я не знаю, как преобразовать массив NumPy между 2.

, который я могу экспортировать в файл из Pydub, а затем загрузить его с помощью Librosa - но это кажется очень неэффективным способом ведения дел.

Версии пакета:
Librosa - 0.7.1.
Pydub - 0.23.1

1 Ответ

1 голос
/ 12 ноября 2019

Librosa подтверждает, что arr данные имеют тип int, вам необходимо преобразовать их в float, как показано ниже,

arr = np.array(samples).astype(np.float32)

Код:

import librosa
import numpy as np
import os

from pydub import AudioSegment
from pydub.playback import play

sound = AudioSegment.from_file("test.wav")
samples = sound.get_array_of_samples()
new_sound = sound._spawn(samples)
arr = np.array(samples).astype(np.float32)
print(type(arr))
#print(arr)
# then modify samples...
y, index = librosa.effects.trim(arr)
print(index)
print(y) 

Усеченный выход

 <type 'numpy.ndarray'>
[  0 882]
[ 0.00000000e+00  0.00000000e+00  1.07629056e+08  1.07629056e+08
:
:
1.09489754e+09  1.09489754e+09]
...