2009-08-10 58 views
7

Tôi đã tìm kiếm trên mạng nhưng không tìm thấy điều gì thú vị. Có lẽ tôi đang làm điều gì sai.Khung tổng hợp âm thanh trong C/C++/Objective-C?

Tôi đang tìm API tổng hợp âm thanh được viết trên C, C++ hoặc thậm chí Objective-C, có thể tổng hợp các loại sóng khác nhau, hiệu ứng là tùy chọn.

Trả lời

9

Dưới đây là một thư viện hoàn chỉnh/bộ công cụ cho FM (Frequency Modulation) tổng hợp:

link1 link2

Nếu bạn có thời gian rảnh rỗi ... tạo tổng hợp âm thanh đơn giản từ đầu thực sự là một nỗ lực vui vẻ. Nếu bạn tạo một bộ đệm nhỏ của 256 mẫu 16 bit đại diện cho một sin. một răng cưa, khối hoặc xung, bạn có thể sao chép chúng vào một bộ đệm âm thanh trực tiếp (ví dụ: bộ đệm nhỏ (nói 16kb)) liên tục lặp lại. Bằng cách ở phía trước của playposition, và liên tục làm đầy bộ đệm với các giá trị mới, bạn có thể tạo soundoutput. Bạn có thể sử dụng các bộ đệm nhỏ để kết hợp chúng theo những cách thú vị (đơn giản là chỉ để thêm chúng lại với nhau (tổng hợp phụ gia)).

Tần số của âm báo có thể được điều khiển bằng cách sử dụng bước lấy mẫu lớn hơn hoặc nhỏ hơn thông qua các bộ đệm nhỏ. Biên độ có thể được điều chỉnh bằng cách mở rộng các mẫu trước khi đưa chúng vào bộ đệm đầu ra.

Thử nghiệm thú vị tuyệt vời với điều này!

Nếu bạn đã bước này đóng đinh, bạn có thể thêm các hiệu ứng phức tạp hơn như bộ lọc (thông thấp, cao vượt qua, vv) và các hiệu ứng (âm vang, vang, vv)

R

-1

Bạn đã nhìn CSound? Đó là một nền tảng tạo âm thanh cực kỳ linh hoạt và có thể xử lý mọi thứ từ việc tạo dạng sóng đơn giản đến tổng hợp FM và tất cả các loại bộ lọc. Nó cũng cung cấp hỗ trợ MIDI, và bạn có thể mở rộng nó bằng cách viết opcodes tùy chỉnh. Có một số full C API và một số API C++.

2

Viết thuật toán tổng hợp âm thanh trong C/obj-C là khá khó khăn trong quan điểm của tôi. Tôi khuyên bạn nên viết các thuật toán xử lý tín hiệu của mình bằng cách sử dụng PureData và sau đó sử dụng ZenGarden hoặc libpd để nhúng và giải thích các bản vá lỗi pd trong ứng dụng của bạn.

4

Bạn đã xem bộ công cụ tổng hợp (STK) chưa? Đó là trong C + + (Tôi không nghĩ ObjC là ngôn ngữ phù hợp để tổng hợp âm thanh, trong thực tế các đơn vị âm thanh, cách riêng của Apple để làm công cụ âm thanh, bao gồm máy phát/bộ lọc/hiệu ứng ... là trong C++).

STK sẽ chạy trên Mac OS X và iOS không có vấn đề (CoreAudio được hỗ trợ), nhưng cũng sẽ chạy trên Linux và Windows (âm thanh trực tiếp và ASIO), sử dụng RtAudio. Nó thực sự độc đáo được thực hiện và nhẹ, những kẻ đã dành rất nhiều thời gian suy nghĩ về nó và nó chắc chắn sẽ cung cấp cho bạn một khởi đầu lớn. Nó có thể xử lý tải các định dạng tập tin âm thanh khác nhau + midi (và hy vọng OSC sớm ...).

Ngoài ra còn có Create và CLAM rất lớn, bao gồm các thành phần GUI và nhiều thứ khác mà bạn có thể hoặc không muốn. Nếu bạn chỉ quan tâm đến việc tổng hợp âm thanh tôi thực sự khuyên bạn nên STK.

+0

Có cách nào để tạo công cụ có điều này có dấu tick() hoạt động trên dữ liệu/mẫu wav thô không? – paulm

+1

@paulm Tôi nghĩ rằng đây là một câu hỏi SO đầy đủ, STK có một trình đọc tệp wav https://ccrma.stanford.edu/software/stk/classstk_1_1FileRead.html – jbat100

+0

cảm ơn, có vẻ như nó chỉ có thể là một trường hợp phổ biến Khung STK từ dữ liệu âm thanh thô :) – paulm

4

PortAudio cũng là một API C tuyệt vời mà chúng tôi đã sử dụng học kỳ cuối cùng trong khóa học lập trình âm thanh. Nó cung cấp một cuộc gọi lại âm thanh ... bạn còn cần gì hơn nữa !?

Tôi chưa thử kết hợp nó với bất kỳ thứ gì trong Mục tiêu-C, nhưng sẽ báo cáo lại khi tôi làm.

1

Một ++ thư viện C là nsound:

http://nsound.sourceforge.net

Người ta có thể tạo ra bất kỳ loại tín hiệu điều chế bằng cách sử dụng lớp Generator hoặc bằng cách sử dụng lớp Sine cung cấp. Mỗi bước thời gian có thể có tần số tức thời riêng và bù pha.

Bạn cũng có thể thử nghiệm với mô-đun Python để tạo mẫu nhanh cho thuật toán của mình, sau đó triển khai trong C++. Nó có thể tạo ra các ô khá matplotlib từ Python và thậm chí từ C++!

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