Tôi đang làm việc trên bộ tổng hợp mạnh mẽ trong python. Tôi đã sử dụng các hàm tùy chỉnh để ghi trực tiếp vào tệp .wav. Có được xây dựng trong các chức năng có thể được sử dụng cho mục đích này. Bạn sẽ cần sửa đổi tiêu đề .wav để phản ánh tốc độ lấy mẫu, số bit trên mỗi mẫu, số kênh và thời lượng tổng hợp.
Đây là phiên bản đầu tiên của trình tạo sóng sin xuất ra danh sách các giá trị sau khi áp dụng dấu gạch chéo trở nên thích hợp để ghi vào tham số dữ liệu của tệp sóng. [edit] Một hàm chuyển đổi sẽ cần phải chuyển đổi danh sách thành các giá trị hex nhỏ cuối cùng trước khi áp dụng dấu ngắt. Xem liên kết định dạng tệp âm thanh WAVE PCM bên dưới để biết chi tiết về đặc tả .wav. [/ sửa]
def sin_basic(freq, time=1, amp=1, phase=0, samplerate=44100, bitspersample=16):
bytelist = []
import math
TwoPiDivSamplerate = 2*math.pi/samplerate
increment = TwoPiDivSamplerate * freq
incadd = phase*increment
for i in range(int(samplerate*time)):
if incadd > (2**(bitspersample - 1) - 1):
incadd = (2**(bitspersample - 1) - 1) - (incadd - (2**(bitspersample - 1) - 1))
elif incadd < -(2**(bitspersample - 1) - 1):
incadd = -(2**(bitspersample - 1) - 1) + (-(2**(bitspersample - 1) - 1) - incadd)
bytelist.append(int(round(amp*(2**(bitspersample - 1) - 1)*math.sin(incadd))))
incadd += increment
return bytelist
Một phiên bản mới hơn có thể sử dụng dạng sóng để điều chỉnh tần số, biên độ và pha của các thông số dạng sóng. Các định dạng dữ liệu làm cho nó tầm thường để pha trộn và nối các sóng với nhau. Nếu điều này có vẻ như hẻm của bạn, hãy xem WAVE PCM soundfile format.
@hochl Vâng, thật mỉa mai khi đây là kết quả đầu tiên của Google được trả về sau một ngày tìm kiếm với các từ khóa khác nhau ... –
Tôi sẽ xem [Pyo] (http://ajaxsoundstudio.com/pyodoc/index .html). [Đây] (http://ajaxsoundstudio.com/pyodoc/examples/02-controls/04-building-lfo.html) một ví dụ điển hình tốt. – mobeets