Red de conocimiento informático - Conocimiento del nombre de dominio - ¡Urgente! ! ! ! ¿Cómo hacer una grabadora de audio simple a través de Python, grabar su propio sonido usando muestreo de 8k, codificación de cuantificación de 16 bits y observar sus valores?

¡Urgente! ! ! ! ¿Cómo hacer una grabadora de audio simple a través de Python, grabar su propio sonido usando muestreo de 8k, codificación de cuantificación de 16 bits y observar sus valores?

#Puedo ayudarte a escribir un código que pueda grabar y formar un archivo wav, pero si quieres analizar la forma de onda del archivo de grabación, puedes encontrar otra # herramienta, como cooledit, que también es muy conveniente.

desde?sys?import?byteorder

desde?array?import?array

desde?struct?import?pack

importar ?pyaudio

importar?wave

UMBRAL?=?500

CHUNK_SIZE?=?1024

FORMATO?=?pyaudio.paInt16

RATE?=?44100

def?is_silent(snd_data):

"Si es inferior al umbral 'silencioso', devuelve 'Verdadero'"

return?normalize(snd_data):

"Volumen de salida promedio"

MAXIMUM=16384

times=float(MAXIMUM)/ max(abs (i)?para?i?in?snd_data)

r?=?array('h')

para?i?in?snd_data:

r.append(int(i*times))

return?r

def?trim(snd_data):

"Recortar el inicio y final del punto en blanco"

def?_trim(snd_data):

snd_started?False

r=? array('h')

para?i?in?snd_data:

if?not?snd_started?and?abs(i)gt UMBRAL:

snd_started?=?True

r.append(i)

elif?snd_started:

r.append(i)

return?r

#?Trim?to?left?

snd_data?=?_trim(snd_data)

#?_trim(snd_data)

snd_data.reverse()

¿retorno?Inicio y final (coma flotante) de 'snd_data' de longitud 'segundos'"

"Agregar silencio en 'snd_data'. (Número de punto flotante)"

r?=?array('h',? [0?for?i?in?xrange(int(segundos*RATE))])

r.extend(snd_data)

r.extend([0?for?i?in?xrange(int(segundos*RATE))])

retorno?r

def?record():

"""

¿Registro? y devuelve los datos como una matriz corta firmada.

Normaliza el audio, recorta el silencio al principio y al final y aumenta 0,5 segundos.

.5 segundos de sonido en blanco para garantizar que dispositivos como VLC puedan reproducir estos sonidos sin que se corten. PyAudio()

transmisión?=? p.open(format=FORMAT,?channels=1,?rate=RATE,

input=True,?output=True,

p>

frames_per_buffer=CHUNK_SIZE)

num_silent?=?0

snd_started=?

#?little?endian,? firmado?short

snd_data?=?array('h',?).stream.read(CHUNK_SIZE))

if?byteorder?==?' p>

snd_data.byteswap()

r.extend(snd_data)

silent?=?is_silent(snd_data)

if?silent?and ?snd_started:

p>

num_silent? =?1

elif?not?silent?and?not?snd_started:

snd_started?=? Verdadero

si? snd_started?and?num_silent?gt;?30:

romper

sample_width?=?p.get_sample_size(FORMATO)

stream.stop_stream ()

stream.close()

p.terminate()

r?=?normalize(r )

r? =?trim(r)

r?=?add_silence(r,?0.5)

Devuelve sample_width, r

def?record_to_file(path):

"Graba desde el micrófono y envía los datos resultantes a 'path'"

sample_width, data?=?record()

datos?=?pack( ' lt;'? ?('h'*len(datos)),?*datos)

wf?=?wave.open(ruta,?' wb ')

wf .setnnchanels(1)

wf.setampwidth(sample_width)

wf.setframerate(RATE)

wf. writeframes(data)

wf. close()

if?__main__':

print("Por favor, diga algo en el micrófono")

record_to_file('demo.wav ')

print("Completo: el resultado se ha escrito en demo.wav")

Si __main__?