2015-07-28 17 views
5

Şu anda bir NumPy dizisinden WAV dosyası oluşturmak için NumPy kullanıyorum. Numofy dizisini gerçekte sabit disk sürücüsüne yazılmadan önce oynatmanın mümkün olup olmadığını merak ediyorum. PyAudio kullanarak bulduğum tüm örnekler önce NumPy dizisini bir WAV dosyasına yazmaya dayanıyor, ancak NumPy dizisini ses çıkışına harcayan bir önizleme işlevine sahip olmak isterim.Python: PyAudio ile gerçek zamanlı ses akışı (veya başka bir şey)?

Platformlar arası da olmalı. Python 3 kullanıyorum (Anaconda dağıtımı).

+0

olması mümkündür. Python Turing tamamlandı. – erip

+2

Herhangi bir işaretçi bunun nasıl başarılacağını o zaman? Ben bir Python acemiyim, eğer açık değilse. Nazik ol lütfen. –

cevap

4

:

Ben durumda aşağıdaki örneği ekliyorum

bağlantı Hiç ölü (Bu kodu yazmadım notu) gidiyor! Yardım için teşekkürler!

Şimdi çok basit görünüyor, ama Python'u çok iyi bilmediğinizde cehennem gibi görünüyor.

1

examples'da görebileceğiniz gibi, pyaudio yalnızca WAV dosyasındaki verileri okur ve bunu akışa yazar.

Öncelikle bir WAV dosyası yazmak gerekmez, sadece doğru formatta doğru bir veri akışına ihtiyacınız var. Bu çalıştı

"""PyAudio Example: Play a WAVE file.""" 

import pyaudio 
import wave 
import sys 

CHUNK = 1024 

if len(sys.argv) < 2: 
    print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0]) 
    sys.exit(-1) 

wf = wave.open(sys.argv[1], 'rb') 

p = pyaudio.PyAudio() 

stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), 
       channels=wf.getnchannels(), 
       rate=wf.getframerate(), 
       output=True) 

data = wf.readframes(CHUNK) 

while data != '': 
    stream.write(data) 
    data = wf.readframes(CHUNK) 

stream.stop_stream() 
stream.close() 

p.terminate() 
+0

Sooo, temel olarak, numpy dizilerinin WAV'a dönüşümünü nasıl yaptığımı kontrol etmeliyim, daha sonra, bir dosyaya yazmanın tersine, akıştaki nokta dışında aynı şeyi yapar mı? Teşekkürler btw, ama bu örnekte geçen ayın saatlerine baktım, bu soru herhangi bir cevap almadı ve bana nasıl bir çözüm getirileceğine dair bir çözüm gelmedi ... –

+1

@ MarioKrušelj Sadece ölçeklendir ve/veya veriyi dönüştür 16 bit imzalı tam sayılara ('' numpy.int16'' dtype''). Daha sonra bir bayt dizesi haline getirmek için dizi yöntemini "tobytes" kullanın ... –

+0

TEŞEKKÜR EDERİZ! Çalışırsa haber veririm. –

İlgili konular