audio terminologia - Riproduci un suono con Python





informatica glossario (9)


Dopo che il comando play () ha aggiunto un ritardo di circa 10 secondi, funzionerà

import pygame

import time

pygame.init()

pygame.mixer.music.load("test.wav")

pygame.mixer.music.play()

time.sleep(10)

Questo riproduce anche i file .mp3.

Questa domanda ha già una risposta qui:

Qual è il modo più semplice per riprodurre un file audio (.wav) in Python? Per semplicità intendo sia la maggior parte indipendente dalla piattaforma che richiede la minore dipendenza. pygame è certamente un'opzione, ma sembra eccessivo per il solo suono.




Mi piace pygame e il comando seguente dovrebbe funzionare:

pygame.init()
pygame.mixer.Sound('sound.wav').play()

ma non su nessuno dei miei computer, e c'è un aiuto limitato sull'argomento. edit: ho capito perché il suono Pygame non funziona per me, non sta caricando la maggior parte dei suoni correttamente, l'attributo 'length' è ~ 0,0002 quando li carico. magari caricarli usando qualcosa di diverso da mygame lo faranno morking più in generale.

con pyglet sto ricevendo un errore di risorsa non trovato Usando l'esempio sopra, wigh entrambi i percorsi relativi e completi ai file.

utilizzando pyglet.media.load() invece di pyglet.resource.media() mi consente di caricare i file.

ma sound.play() riproduce solo la prima frazione di secondo del file, a meno che non esegua pyglet.app.run() che blocca tutto il resto ...




Questo sembra ridicolo e inverosimile, ma puoi sempre usare Windows (o qualsiasi sistema operativo che preferisci) per gestire il suono per te!

import os
os.system("start C:/thepathyouwant/file")

Semplice, senza estensioni, un po 'lento e junky, ma funzionante.




Per Windows, è possibile utilizzare winsound. È integrato

import winsound

winsound.PlaySound('sound.wav', winsound.SND_FILENAME)

Dovresti essere in grado di usare ossaudiodev per linux:

from wave import open as waveOpen
from ossaudiodev import open as ossOpen
s = waveOpen('tada.wav','rb')
(nc,sw,fr,nf,comptype, compname) = s.getparams( )
dsp = ossOpen('/dev/dsp','w')
try:
  from ossaudiodev import AFMT_S16_NE
except ImportError:
  from sys import byteorder
  if byteorder == "little":
    AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
  else:
    AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
dsp.setparameters(AFMT_S16_NE, nc, fr)
data = s.readframes(nf)
s.close()
dsp.write(data)
dsp.close()

(Credito per ossaudiodev: Bill Dandreta http://mail.python.org/pipermail/python-list/2004-October/288905.html )




Ho appena rilasciato un semplice wrapper python su sox che riprodurrà un suono con Python. È molto facile da installare in quanto occorrono Python 2.6 o versioni successive, sox (binari facili da ottenere per la maggior parte delle architetture) e il wrapper ( https://github.com/standarddeviant/sound4python ). Se non si dispone di sox, andare qui: http://sourceforge.net/projects/sox/files/sox/

Suoneresti l'audio con:

from sound4python import sound
import random
a = []
for idx in xrange(1*16000):
    a.append(random.randint(-16384,16384))
sound(a)

Tieni presente che le uniche parti effettivamente coinvolte nella riproduzione audio sono proprio queste:

from sound4python import sound
...
sound(a)    



Per gli utenti Linux, se è necessaria una manipolazione dei dati pcm di basso livello, provare il modulo alsaaudio . Esiste anche un esempio di playwav.py all'interno del pacchetto.







L'esempio sonoro di pyMedia fa proprio questo . Questo dovrebbe essere tutto ciò di cui hai bisogno.

import time, wave, pymedia.audio.sound as sound
f= wave.open( 'YOUR FILE NAME', 'rb' )
sampleRate= f.getframerate()
channels= f.getnchannels()
format= sound.AFMT_S16_LE
snd= sound.Output( sampleRate, channels, format )
s= f.readframes( 300000 )
snd.play( s )



@classmethod: può essere usato per creare un accesso globale condiviso a tutte le istanze create da quella classe ..... come aggiornare un record da più utenti .... Ho trovato particolarmente utile quando si creano anche singleton .. )

Metodo @static: non ha nulla a che fare con la classe o l'istanza associata a ... ma per la leggibilità è possibile utilizzare il metodo statico





python audio platform-independent