2009-03-31 33 views
10

Tôi tự hỏi thư viện âm thanh được khuyến nghị sử dụng là gì?Phân tích âm thanh thời gian thực trong Linux

Tôi đang cố gắng tạo một chương trình nhỏ sẽ hỗ trợ các công cụ điều chỉnh. (Piano, Guitar, v.v.). Tôi đã đọc về ALSA & thư viện âm thanh của Marsyas.

Tôi nghĩ ý tưởng là lấy mẫu dữ liệu từ micrô, phân tích theo khối 5-10ms (từ những gì tôi đã đọc). Sau đó, thực hiện một FFT để tìm ra tần số nào chứa đỉnh lớn nhất.

Trả lời

4

Marsyas sẽ là một lựa chọn tuyệt vời để làm điều này, nó được xây dựng cho chính xác loại nhiệm vụ này.

Để điều chỉnh nhạc cụ, những gì bạn cần làm là có thuật toán ước tính tần số cơ bản (F0) của âm thanh. Có một số thuật toán để làm điều này, một trong những mới nhất và tốt nhất là thuật toán YIN, được phát triển bởi Alain de Cheveigne. Gần đây tôi đã thêm thuật toán YIN vào Marsyas và việc sử dụng nó đã chết đơn giản.

Dưới đây là các mã cơ bản mà bạn sẽ sử dụng trong Marsyas:

 
    MarSystemManager mng; 

    // A series to contain everything 
    MarSystem* net = mng.create("Series", "series"); 

    // Process the data from the SoundFileSource with AubioYin 
    net->addMarSystem(mng.create("SoundFileSource", "src")); 
    net->addMarSystem(mng.create("ShiftInput", "si")); 
    net->addMarSystem(mng.create("AubioYin", "yin")); 

    net->updctrl("SoundFileSource/src/mrs_string/filename",inAudioFileName); 

    while (net->getctrl("SoundFileSource/src/mrs_bool/notEmpty")->to<mrs_bool>()) { 
    net->tick(); 
    realvec r = net->getctrl("mrs_realvec/processedData")->to<mrs_realvec>(); 
    cout << r(0,0) << endl; 
    } 

Mã này đầu tiên tạo ra một đối tượng Loạt chúng tôi sẽ bổ sung thêm các thành phần để. Trong một Series, mỗi thành phần nhận được đầu ra của hệ thống MarSystem trước đó. Sau đó chúng tôi thêm một SoundFileSource, bạn có thể nạp vào tệp .wav hoặc .mp3 vào. Sau đó chúng ta thêm đối tượng ShiftInput xuất ra các khối âm thanh chồng lên nhau, trong đó sau đó được đưa vào đối tượng AubioYin, ước tính tần số cơ bản của đoạn âm thanh đó.

Sau đó chúng tôi thông báo cho SoundFileSource rằng chúng tôi muốn đọc tệp trongAudioFileName.

Câu lệnh while sau đó lặp lại cho đến khi SoundFileSource hết dữ liệu. Bên trong vòng lặp , chúng tôi lấy dữ liệu mà mạng đã xử lý và xuất phần tử (0,0), là ước tính tần số cơ bản .

Điều này thậm chí còn dễ dàng hơn khi bạn sử dụng các ràng buộc Python cho Marsyas.

2

ALSA là loại chuẩn mặc định cho Linux hiện nay nhờ trình điều khiển hạt nhân được bao gồm trong hạt nhân và OSS bị khấu hao. Tuy nhiên, có những lựa chọn thay thế cho không gian người dùng ALSA, như jack, có vẻ như nhằm vào các ứng dụng kiểu chuyên nghiệp có độ trễ thấp. API của nó dường như có một API đẹp hơn, mặc dù tôi đã không sử dụng nó, việc tiếp xúc ngắn với API ALSA sẽ khiến tôi nghĩ rằng hầu như mọi thứ sẽ tốt hơn.

5

Điều này guide sẽ giúp ích. Không sử dụng ALSA cho ứng dụng của bạn. Sử dụng API cấp cao hơn. Nếu bạn quyết định bạn muốn sử dụng JACK, http://jackaudio.org/applications có ba bộ chỉnh cụ bạn có thể sử dụng làm mã mẫu.

0

Audacity bao gồm tính năng cốt truyện tần số và có bộ lọc FFT tích hợp.

3

http://clam-project.org/ CLAM là một khung phần mềm chính thức để phát triển nghiên cứu và ứng dụng trong Miền âm thanh và âm nhạc. Nó cung cấp một mô hình khái niệm cũng như các công cụ để phân tích, tổng hợp và xử lý tín hiệu âm thanh.

Họ có API tuyệt vời, giao diện đẹp và một vài ứng dụng hoàn chỉnh nơi bạn có thể xem mọi thứ.

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