2011-11-28 73 views
14

Tôi cần tạo âm thanh sóng sin trong Python và tôi cần có khả năng kiểm soát tần suất, thời lượng và khối lượng tương đối. Bởi 'tạo ra' tôi có nghĩa là tôi muốn nó chơi mặc dù các loa ngay lập tức, không lưu vào một tập tin.Tạo âm thanh sóng sin trong Python

Cách dễ nhất để thực hiện việc này là gì?

+0

nền tảng gì (s) được bạn nhắm mục tiêu? –

+1

Chủ yếu là MacOS X - Tôi nên xác định điều này, xin lỗi! – astrofrog

+0

Câu hỏi này tương tự như http://stackoverflow.com/questions/307305/play-a-sound-with-python và http://stackoverflow.com/questions/260738/play-audio-with-python –

Trả lời

1

Một trong những cách cài đặt phù hợp nhất để giải quyết vấn đề âm thanh trong Python là thư viện đa phương tiện Pygame.

Tôi khuyên bạn nên sử dụng nó - có submodule pygame.sndarray cho phép bạn thao tác các số trong vectơ dữ liệu trở thành đối tượng âm thanh mức cao có thể là playerd trong mô-đun pygame.mixer.

Tài liệu trong trang pygame.org phải đủ để sử dụng mô-đun sndarray.

0

Tôi là bregman lab toolbox bạn có một bộ chức năng thực hiện chính xác những gì bạn muốn. Mô-đun python này có một chút lỗi nhưng bạn có thể điều chỉnh mã này để có các chức năng của riêng bạn

+0

Lỗi 404 - Không tìm thấy trang - https://github.com/bregmanstudio/BregmanToolkit – scls

21
import pyaudio 
import numpy as np 

p = pyaudio.PyAudio() 

volume = 0.5  # range [0.0, 1.0] 
fs = 44100  # sampling rate, Hz, must be integer 
duration = 1.0 # in seconds, may be float 
f = 440.0  # sine frequency, Hz, may be float 

# generate samples, note conversion to float32 array 
samples = (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32) 

# for paFloat32 sample values must be in range [-1.0, 1.0] 
stream = p.open(format=pyaudio.paFloat32, 
       channels=1, 
       rate=fs, 
       output=True) 

# play. May repeat with different volume values (if done interactively) 
stream.write(volume*samples) 

stream.stop_stream() 
stream.close() 

p.terminate() 
+0

Tôi nhận này: Tệp "C: \ Python27 \ lib \ site-packages \ numpy \ core \ __ init__.py", dòng 6, trong từ. import multiarray ImportError: Tải DLL không thành công:% 1 không phải là một ứng dụng Win32 hợp lệ. – chwi

+0

Tôi tìm thấy @yahweh đóng góp để được các trường hợp. Sẽ rất hữu ích khi đưa vào mẫu mã. – chris

0

Hôm nay cho Python 3.5+ cách tốt nhất là cài đặt các gói do nhà phát triển đề xuất.

http://people.csail.mit.edu/hubert/pyaudio/

Đối với Debian làm

sudo apt-get install python3-all-dev portaudio19-dev 

trước khi cố gắng cài đặt pyaudio

1

ivan-onys đưa ra một câu trả lời tuyệt vời, nhưng có một chút Bên cạnh đó: kịch bản này sẽ sản xuất Âm thanh ngắn hơn 4 lần so với dự kiến ​​vì phương pháp ghi Pyaudio cần dữ liệu chuỗi của float32, nhưng khi bạn chuyển mảng numpy sang phương thức này, nó chuyển đổi toàn bộ mảng thành thực thể thành chuỗi, do đó bạn phải chuyển đổi dữ liệu trong mảng NumPy đến chuỗi byte mình như thế này:

samples = (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes() 

và bạn phải thay đổi dòng này cũng như:

stream.write(samples) 
Các vấn đề liên quan