Tengo un archivo csv de datos, grabado en un centro de adquisición de datos con una frecuencia de 500Hz, y estoy tratando de convertirlo a formato wav. Intenté con Python y simplemente alimenté los números (como enteros de 16 bits al paquete wave), y no funcionó. ¿Cómo debo construir un archivo wav a partir de un simple flujo de números?

Probé el siguiente código, que incluye la normalización, y configuré dtype para que sea float32 para que use el formato de punto flotante de 32 bits de acuerdo con la documentación aquí, simplemente no genera ningún sonido.

#!/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)
0
TPWang 6 dic. 2016 a las 00:31

1 respuesta

La mejor respuesta

El problema está en tu frecuencia de muestreo. Intente volver a muestrear los datos a algo así como 44100 Hz (consulte el código a continuación). No sé qué efectos tendrá el remuestreo en sus datos.

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)

Intente jugar con el argumento rate en sipy.io.wavfile.write. A medida que baja la frecuencia, baja la frecuencia del sonido.

2
jakub 6 dic. 2016 a las 03:14
Gracias por responder, probé a su manera y lo que obtuve fue un espacio en blanco básicamente, y no hay sonido en absoluto, publiqué el código como una actualización de la pregunta, ¿le importaría echar un vistazo?
 – 
TPWang
6 dic. 2016 a las 01:37
Ver mis ediciones. El problema parece estar en su frecuencia de muestreo.
 – 
jakub
6 dic. 2016 a las 03:15
Sin embargo, sus ediciones son para crear un sonido generado aleatoriamente, mis datos provienen de un dispositivo de adquisición de datos, pero lo intentaré.
 – 
TPWang
8 dic. 2016 a las 21:50
No sabía cómo era csv_array, así que hice mis propios datos para el propósito del ejemplo. Espero eso ayude.
 – 
jakub
8 dic. 2016 a las 22:16
Además, mis ediciones no son solo para generar sonido aleatorio. La respuesta editada le muestra cómo volver a muestrear sus datos.
 – 
jakub
9 dic. 2016 a las 02:00