2011-12-11 36 views
7

Tôi tra cứu một số mã, có vẻ như mọi thứ đang tạo ra một số sóng chức năng toán học, nhưng tôi muốn một giai điệu đơn, hoặc một làn sóng tùy chỉnh được thực hiện với các tông đơn tùy chỉnh.Làm cách nào để phát một âm thanh hoặc sóng tùy chỉnh với Delphi?

Tôi đọc How can I generate continuous tones of varying frequencies?

Đó là gần câu trả lời của tôi. Giả sử tôi sẽ sử dụng waveOutWrite như trong liên kết ở trên, tôi dường như không thể tìm ra cách amp/freq được tính cho mỗi Mẫu trong HWAVEOUT.

Trong đoạn mã từ liên kết này được thực hiện như thế này: Samples[i] := round(vol*sin(omega*t));

Giả sử tôi muốn có một 15kHz freq giai điệu duy nhất với một số amp (không quan trọng mà), làm thế nào một mẫu [1] được tính?

Trả lời

9

Một liên tục (trong thời gian) sóng sin có thể được định nghĩa là A*sin(2*PI*f*t), nơi A là một số biên độ, PI là, tốt, 3.14 ..., f là tần số giai điệu trong Hertz và t là thời gian trong vài giây.

Bây giờ, kể từ khi bạn không có thời gian liên tục, kể từ thời gian của bạn là rời rạc, bạn thay thế dt*i ở vị trí của t và nhận A*sin(2*PI*f*dt*i), nơi dt là thời gian giữa mẫu hoặc 1/sample ratei là số mẫu. Bạn có thể đánh vần nó là A*sin(2*PI*(f/Fs)*i). Lưu ý rằng khi bạn chọn một tỷ lệ mẫu nhất định Fs (trong mẫu/giây hoặc đơn giản là Hz), âm cao nhất không bao giờ có thể lớn hơn Fs/2 Hz.

+0

Cảm ơn bạn rất nhiều! – MitziMeow

Các vấn đề liên quan