que quieren crear "pulsómetro" efecto de una matriz 2D en numpy y quieren el tono para reflejar los valores de la matriz.¿Cómo generar audio desde una matriz numpy?
Respuesta
Puede usar el write
function desde scipy.io.wavfile
para crear un archivo wav que luego puede reproducir como lo desee. Tenga en cuenta que la matriz debe ser números enteros, por lo que si usted tiene flotadores, es posible que desee escalar de manera apropiada:
import numpy as np
from scipy.io.wavfile import write
data = np.random.uniform(-1,1,44100) # 44100 random samples between -1 and 1
scaled = np.int16(data/np.max(np.abs(data)) * 32767)
write('test.wav', 44100, scaled)
Si desea Python jugar realmente de audio, entonces this page proporciona una visión general de algunos de los paquetes/módulos .
Además, usted podría intentar scikits.audiolab. Presenta el archivo IO y la capacidad de 'reproducir' matrices. Las matrices no tienen que ser enteros. Para imitar el ejemplo de dbaupp:
import numpy as np
import scikits.audiolab
data = np.random.uniform(-1,1,44100)
# write array to file:
scikits.audiolab.wavwrite(data, 'test.wav', fs=44100, enc='pcm16')
# play the array:
scikits.audiolab.play(data, fs=44100)
No está seguro de los detalles de cómo se producirá el audio de la matriz, pero he encontrado mpg321 a ser una gran línea de comandos reproductor de audio, y potencialmente podría funcionar para usted.
Lo uso como mi reproductor de elección para Anki, que está escrito en python y tiene bibliotecas que podrían ser un excelente punto de partida para conectar sus códigos/matrices con audio.
Salida:
PyGame tiene el módulo pygame.sndarray
que puede reproducir datos numpy como audio. Las otras respuestas son probablemente mejores, ya que PyGame puede ser difícil de poner en funcionamiento. Por otra parte, scipy y numpy vienen con sus propias dificultades, así que quizás no es un gran paso para añadir PyGame en la mezcla.
Para las personas que vienen aquí en 2016 scikits.audiolab no parece realmente trabajar más. Pude obtener una solución usando el dispositivo de sonido.
import numpy as np
import sounddevice as sd
fs = 44100
data = np.random.uniform(-1, 1, fs)
sd.play(data, fs)
Lo intenté y scikits.audiolab funcionó en mi Ubuntu 16.04 + python 2.7 (anaconda 4.1.1). Solo necesitaba 'sudo apt-get install libsndfile1-dev'. Y, por otro lado, el dispositivo de sonido no funciona para mí: no se reproduce nada cuando reemplace scikits.audiolab con sd. – ftfish
no hubo suerte con python3, incluso con libsndfile1-dev instalado, mejor suerte con sounddevice – JulienFr
¡Gracias, funciona a la perfección! 'sd.play (data, fs, blocking = True)' para que el programa espere hasta que se reproduzca el sonido. –
he tenido algunos problemas con el uso scikit.audiolabs
, así que buscó otro opciones para esta tarea. Se me ocurrió sounddevice, que parece mucho más arriba-hasta la fecha. No he comprobado si funciona con Python 3.
Una manera sencilla de llevar a cabo lo que quiere es la siguiente:
import numpy as np
import sounddevice as sd
sd.default.samplerate = 44100
time = 2.0
frequency = 440
# Generate time of samples between 0 and two seconds
samples = np.arange(44100 * time)/44100.0
# Recall that a sinusoidal wave of frequency f has formula w(t) = A*sin(2*pi*f*t)
wave = 10000 * np.sin(2 * np.pi * frequency * samples)
# Convert it to wav format (16 bits)
wav_wave = np.array(wave, dtype=np.int16)
sd.play(wav_wave, blocking=True)
Si está utilizando Jupyter, la mejor opción es:
from IPython.display import Audio
Audio(numpy.sin(numpy.linspace(0, 3000, 20000)), rate=20000)
- 1. ¿Cómo seleccionar los elementos por filas desde una matriz NumPy?
- 2. Cómo analizar una matriz numpy?
- 3. ¿Cómo crear una matriz de registro numpy?
- 4. Cómo imprimir una matriz Numpy sin corchetes?
- 5. ¿Cómo "insertar" una pequeña matriz numpy en un bloque predefinido de una matriz numpy grande?
- 6. Contruir matriz 3D en numpy desde la matriz 2d existente
- 7. interactuando sobre una matriz numpy
- 8. ¿Ver en una matriz numpy?
- 9. ¿Cómo creo una matriz/matriz vacía en NumPy?
- 10. Numpy: ordenar una matriz multidimensional por una matriz multidimensional
- 11. Ordenar una matriz numpy como una mesa
- 12. Convertir una matriz numpy 2D en una matriz estructurada
- 13. ¿Cómo creo una matriz numpy a partir de una cadena?
- 14. Generar matriz desde una lista separada por comas - PHP
- 15. Suma una fila de una matriz NumPy
- 16. Eliminar una columna para una matriz numpy
- 17. Cómo generar una clase desde una interfaz
- 18. ¿Sumar de manera eficiente una matriz numpy pequeña, transmitida a través de una matriz numpy descomunal?
- 19. Convertir una matriz 1D en una matriz 2D en numpy
- 20. Cómo generar una matriz de combinaciones
- 21. ¿Cómo dividir una matriz según una condición en numpy?
- 22. ¿Cómo convierto una matriz numpy a (y visualizo) una imagen?
- 23. creación de matriz numpy con una secuencia
- 24. numpy: aplicar argsort a una matriz
- 25. Numpy matriz multidimensional rebanar
- 26. matriz numpy inmutable?
- 27. Flatten OpenCV/Numpy matriz
- 28. Numpy matriz simétrica 'inteligente'
- 29. Autocorrelación de una matriz multidimensional en numpy
- 30. Encontrar valores faltantes en una matriz numpy
pregunta - el/np.max de datos (np.abs (datos)) - ¿verdad que esta es la normalización a 1/-1 antes de escalar, de manera que si el máximo es de 0,8, sería escalar hacia arriba? –
Sí (aunque no es obligatorio). – huon
Gracias. ¿No debería ser eso * 32768? Es un signo de 16 bits. –