Voglio creare "cardiofrequenzimetro" effetto da una matrice 2D in NumPy e vogliono il tono per riflettere i valori nella matrice.Come generare audio da una matrice numpy?
risposta
È possibile utilizzare write
function da scipy.io.wavfile
per creare un file wav che è possibile riprodurre in qualsiasi momento. Si noti che la matrice deve essere interi, quindi se avete galleggianti, si potrebbe desiderare di scalare in modo appropriato:
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)
Se si desidera Python a giocare in realtà audio, quindi this page fornisce una panoramica di alcuni dei pacchetti/moduli .
Inoltre, si potrebbe provare scikits.audiolab. È dotato di file IO e della capacità di riprodurre array. Le matrici non devono essere numeri interi. Per mimare l'esempio di 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)
Non sono sicuro dei particolari di come si potrebbe produrre l'audio dalla matrice, ma ho trovato mpg321 per essere un grande lettore audio da riga di comando, e potrebbe potenzialmente funzionare per voi.
Lo uso come lettore preferito per Anki, che è scritto in python e contiene librerie che potrebbero essere un ottimo punto di partenza per l'interfacciamento del codice/array con l'audio.
Partenza:
PyGame ha il modulo pygame.sndarray
in grado di riprodurre i dati NumPy come audio. Le altre risposte sono probabilmente migliori, dato che PyGame può essere difficile da far funzionare. Poi di nuovo, SciPy e NumPy vengono con le proprie difficoltà, quindi forse non è un grande passo per aggiungere PyGame nel mix.
Per le persone che vengono qui nel 2016 scikits.audiolab non sembra in realtà più lavorare. Sono stato in grado di ottenere una soluzione utilizzando SoundDevice.
import numpy as np
import sounddevice as sd
fs = 44100
data = np.random.uniform(-1, 1, fs)
sd.play(data, fs)
In realtà ho provato e scikits.audiolab ha funzionato sulla mia Ubuntu 16.04 + python 2.7 (anaconda 4.1.1). Ho solo bisogno di 'sudo apt-get install libsndfile1-dev'. E d'altra parte, sounddevice non funziona per me: non si gioca nulla quando sostituisco scikits.audiolab con sd. – ftfish
non ho fortuna con python3, anche con libsndfile1-dev installato, migliore fortuna con sounddevice – JulienFr
Grazie, funziona perfettamente! 'sd.play (data, fs, blocking = True)' per fare in modo che il programma attenda fino a quando il suono non viene riprodotto. –
ho avuto qualche problema con scikit.audiolabs
, così ho cercato un altro opzioni per questo compito. Sono venuto con sounddevice, che sembra molto più up-to-date. Non ho controllato se funziona con Python 3.
Un modo semplice per eseguire quello che vuoi è questo:
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)
Se si utilizza Jupyter, l'opzione migliore è:
from IPython.display import Audio
Audio(numpy.sin(numpy.linspace(0, 3000, 20000)), rate=20000)
- 1. Calcolando la curtosi da una matrice numpy?
- 2. Come creare una matrice di record numpy?
- 3. Ordina una matrice NumPy come un tavolo
- 4. Reshape una matrice in NumPy
- 5. Come sottrarre una matrice da una matrice?
- 6. Costruire un pitone insieme da una matrice NumPy
- 7. Python: creazione di un istogramma 2D da una matrice numpy
- 8. pitone - NumPy - eliminando più righe e colonne da una matrice
- 9. Come si rimuove una matrice numpy da un elenco di array numpy?
- 10. indicizzazione una matrice da un altro in NumPy
- 11. gruppo da massima o minima in una matrice NumPy
- 12. modo ottimale da aggiungere a matrice NumPy
- 13. come generare effetto audio surround in HTML5
- 14. Generazione di una matrice densa da una matrice sparsa in NumPy pitone
- 15. modo pythonic per eliminare elementi da una matrice numpy
- 16. Ridimensionamento e si estende una matrice NumPy
- 17. ricampionare matrice NumPy
- 18. avvolgere una matrice numpy in python
- 19. come creare una matrice di similarità in python numpy?
- 20. Inversione matrice senza Numpy
- 21. Applicazione funzione su matrice/riga matrice numpy
- 22. Modo Pythonic per creare una matrice numpy da un elenco di array numpy
- 23. Python: come immagazzinare una matrice multidimensionale numpy in PyTables?
- 24. Come posso convertire una matrice numpy per (e visualizzare) un'immagine?
- 25. Come si esegue l'aritmetica dell'array condizionale su una matrice numpy?
- 26. F # generare una sequenza/matrice di date
- 27. Converti matrice 1D in matrice numpy
- 28. come generare una matrice di regressione lineare come cor()
- 29. pitone matrice NumPy sostituzione
- 30. Come estrarre una linea arbitraria di valori da una matrice numpy?
domanda - i dati/np.max (np.abs (dati)) - ho ragione che questa è la normalizzazione a 1/-1 prima di scalare, in modo tale che se il massimo è di 0,8, sarebbe essere scalata in su? –
Sì (non è richiesto però). – huon
Grazie. Non dovrebbe essere * 32768? È un 16 bit firmato. –