Как преобразовать файл данных csv 500 Гц в аудиофайл wav?

У меня есть файл csv данных, записанный в центре сбора данных с частотой 500 Гц, и я пытаюсь преобразовать его в формат wav. У меня есть trie для Python, и я просто скармливаю числа (как 16-битные целые числа в пакет wave), и это не сработало. Как мне создать wav-файл из простого потока чисел?

Я пробовал следующий код, который включает нормализацию, и установил dtype равным float32, чтобы он использовал 32-битный формат с плавающей запятой в соответствии с документацией здесь, он просто не генерирует никаких звуков.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import numpy as np
import scipy.io.wavfile
from numpy import *

csv_array = np.loadtxt('trimmed.csv', delimiter=',', dtype=float32)

min = np.amin(csv_array)
max = np.amax(csv_array)
med = (max + min) / 2

def f(x):
    return (x - med) * (1 - (-1)) / (max - min)

f = np.vectorize(f)
wav_array = f(csv_array)

scipy.io.wavfile.write('output.wav', 500, csv_array)

person TPWang    schedule 05.12.2016    source источник


Ответы (1)


Проблема в вашей частоте дискретизации. Попробуйте выполнить повторную выборку данных примерно до 44100 Гц (см. Код ниже). Я не знаю, как повлияет повторная выборка на ваши данные.

import numpy as np
from scipy.io import wavfile
from scipy.signal import resample

data = np.random.uniform(-1, 1, 500)
data_resampled = resample(data, 44100)

wavfile.write('output.wav', 44100, data_resampled)

Попробуйте поиграть с аргументом rate в sipy.io.wavfile.write. По мере снижения скорости частота звука снижается.

person jakub    schedule 05.12.2016
comment
Спасибо за ответ, я попробовал ваш способ, и то, что у меня было, было пустым, и никакого звука вообще. Я разместил код в качестве обновления вопроса, вы не против взглянуть? - person TPWang; 06.12.2016
comment
Смотрите мои правки. Кажется, проблема в вашей частоте дискретизации. - person jakub; 06.12.2016
comment
Ваши правки предназначены для создания случайно сгенерированного звука, хотя мои данные взяты с устройства сбора данных, но я попробую. - person TPWang; 08.12.2016
comment
Я не знал, как выглядит csv_array, поэтому я создал свои собственные данные для примера. Надеюсь, это поможет. - person jakub; 08.12.2016
comment
Также мои правки предназначены не только для генерации случайного звука. Отредактированный ответ показывает вам, как пересчитать ваши данные. - person jakub; 09.12.2016
comment
Я думаю, что ваши решения верны, и моя проблема должна быть слишком низкой для начала. Спасибо! - person TPWang; 15.12.2016
comment
output.wav не может быть прочитан питоном. Как преобразовать данные формы волны вибрации в звуковые файлы - person user3373877; 12.01.2019