Tôi muốn tạo hiệu ứng "theo dõi nhịp tim" từ một mảng 2D thành khối và muốn âm phản ánh giá trị trong mảng.Làm thế nào để tạo ra âm thanh từ một mảng numpy?
Trả lời
Bạn có thể sử dụng write
function từ scipy.io.wavfile
để tạo tệp wav mà sau đó bạn có thể phát theo ý muốn. Lưu ý rằng mảng phải là số nguyên, vì vậy nếu bạn có phao, bạn có thể muốn mở rộng quy mô chúng một cách thích hợp:
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)
Nếu bạn muốn Python thực sự chơi âm thanh, sau đó this page cung cấp một cái nhìn tổng quan của một số gói/modules .
Ngoài ra, bạn có thể thử scikits.audiolab. Nó có tính năng IO tập tin và khả năng 'chơi' mảng. Mảng không phải là số nguyên. Để mimick dụ dbaupp của:
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)
Không chắc chắn về các nội về cách bạn sẽ tạo ra những âm thanh từ mảng, nhưng tôi đã tìm thấy mpg321 là một máy nghe nhạc âm thanh dòng lệnh vĩ đại, và có khả năng có thể làm việc cho bạn.
Tôi sử dụng nó làm người chơi lựa chọn cho Anki, được viết bằng python và có thư viện có thể là nơi bắt đầu tuyệt vời để giao tiếp mã/mảng của bạn với âm thanh.
Check-out:
Pygame có module pygame.sndarray
mà có thể chơi dữ liệu NumPy như âm thanh. Các câu trả lời khác có lẽ là tốt hơn, vì PyGame có thể khó khăn để có được và chạy. Sau đó, một lần nữa, scipy và gumpy đi kèm với những khó khăn riêng của họ, vì vậy có lẽ nó không phải là một bước tiến lớn để thêm PyGame vào hỗn hợp.
Đối với những người đến đây vào năm 2016 scikits.audiolab không thực sự dường như có tác dụng nữa. Tôi đã có thể nhận được một giải pháp bằng cách sử dụng sounddevice.
import numpy as np
import sounddevice as sd
fs = 44100
data = np.random.uniform(-1, 1, fs)
sd.play(data, fs)
Tôi thực sự đã thử và scikits.audiolab làm việc trên Ubuntu 16.04 + python 2.7 của tôi (anaconda 4.1.1). Tôi chỉ cần 'sudo apt-get install libsndfile1-dev'. Và mặt khác, sounddevice không làm việc cho tôi: không có gì được chơi khi tôi thay thế scikits.audiolab bằng sd. – ftfish
không có may mắn với python3, ngay cả với libsndfile1-dev được cài đặt, may mắn hơn với sounddevice – JulienFr
Cảm ơn, hoạt động hoàn hảo! 'sd.play (dữ liệu, fs, chặn = True)' để làm cho chương trình chờ cho đến khi âm thanh được phát. –
Tôi gặp một số sự cố khi sử dụng scikit.audiolabs
, vì vậy tôi đã tìm kiếm một tùy chọn khác cho tác vụ này. Tôi đã đưa ra sounddevice, có vẻ như cập nhật hơn rất nhiều. Tôi đã không kiểm tra nếu nó hoạt động với Python 3.
Một cách đơn giản để thực hiện những gì bạn muốn đây là:
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)
Nếu bạn đang sử dụng Jupyter, lựa chọn tốt nhất là:
from IPython.display import Audio
Audio(numpy.sin(numpy.linspace(0, 3000, 20000)), rate=20000)
- 1. Làm thế nào để tạo ra một tần số âm thanh đặc biệt?
- 2. Làm thế nào để tạo mảng 0x0 Numpy?
- 3. Làm thế nào để tạo ra một mảng toàn cầu?
- 4. Làm thế nào để gán một mảng numpy 1D cho mảng numpy 2D?
- 5. Làm thế nào để tổng hợp âm thanh?
- 6. Numpy: Tạo một mảng phức tạp từ 2 mảng thực?
- 7. Làm thế nào để tạo ra âm thanh bíp sử dụng ký tự thoát "\ a"?
- 8. Làm thế nào để tạo ra một tùy chỉnh NumPy dtype sử dụng cython
- 9. Làm thế nào để lấy mảng dữ liệu âm thanh nổi từ AudioQueueRef trong iOS?
- 10. Làm thế nào để xây dựng một mảng numpy từ một máy phát điện?
- 11. Làm thế nào tôi có thể tạo ra âm thanh thời gian thực từ nhạc được tạo bằng Music21?
- 12. Cách Pythonic để tạo một mảng numpy từ danh sách các mảng có nhiều mảng
- 13. Tôi làm cách nào để tạo một mảng numpy từ chuỗi?
- 14. Làm thế nào để chuyển đổi một mảng các chuỗi thành một mảng float trong numpy?
- 15. Cách tạo âm thanh từ đầu C#
- 16. Làm thế nào để nhân mảng 2D numpy với mảng 1D numpy?
- 17. Nối một mảng NumPy vào một mảng NumPy
- 18. Làm thế nào để chuyển đổi một mảng numpy sang (và hiển thị) một hình ảnh?
- 19. Cách tốt nhất để tạo một mảng NumPy từ một từ điển?
- 20. Nhận mảng byte âm thanh với API âm thanh HTML5?
- 21. Làm thế nào để tạo một mảng bản ghi sumpy?
- 22. Android: Trình nghe để ghi lại âm thanh nếu bất kỳ âm thanh nào xảy ra
- 23. Làm thế nào để sử dụng mảng NumPy với ctypes?
- 24. Làm thế nào để in toàn bộ mảng NumPy?
- 25. Âm thanh tạo Java
- 26. Làm thế nào để phát âm thanh trong JavaScript
- 27. Làm cách nào để có được mức âm thanh hiện tại của thiết bị đầu ra âm thanh hiện tại?
- 28. Làm thế nào để tạo ra một âm mưu suy mịn 3d trong Matlab
- 29. trích xuất âm thanh từ một fla
- 30. Python tạo một mảng phụ nhỏ hơn từ mảng 2D NumPy lớn hơn?
Câu hỏi - dữ liệu/np.max (np.abs (dữ liệu)) - Tôi có đúng là điều này là bình thường hóa với tỷ lệ 1/-1 trước khi mở rộng quy mô, chẳng hạn nếu giá trị tối đa là 0,8, nó sẽ được tăng tỷ lệ? –
Có (mặc dù không bắt buộc). – huon
Cảm ơn. Không nên là * 32768? Nó là một 16 bit đã ký. –