2011-11-27 44 views
6

Tôi đã lập trình một chương trình nhận dạng giọng nói và tôi gặp vấn đề với mic nghe tôi, qua máy tính đang phát nhạc. Tôi cần phần mềm có thể lọc ra âm thanh rời khỏi loa từ âm thanh vào micrô.Hủy tiếng ồn hoạt động

Có phần mềm hoặc thành phần nào (đối với Delphi) có thể giải quyết được sự cố của tôi không?

+0

Bạn sẽ cần chụp hồ sơ nhiễu trong một loại màn hình fft (ví dụ: nó sẽ xác định rằng băng tần 36, 67, 123, ..., cần phải được giảm x db) tạo bộ lọc fft với cấu hình này và áp dụng nó vào tín hiệu của bạn. Tôi donwvoted vì đây là một chút off- topic. Bạn yêu cầu một phần mềm hoặc một thành phần không có công việc sơ bộ. Và có lẽ nó phù hợp hơn trong trang web QA 'Xử lý tín hiệu'? – az01

+0

Như một mẹo, để hủy bỏ tiếng ồn, bạn có thể chơi nó trên đầu trang của chính nó với giai đoạn đảo ngược. –

+0

Tôi đã tìm kiếm một lúc và tất cả những gì tôi thấy là không có ý nghĩa! Thì đây. Đây là trường hợp thực tế! Tôi có thể hỏi, làm thế nào nó làm việc cho bạn? – Fardin

Trả lời

7

Bạn cần phải nắm bắt:

  1. sản lượng máy tính
  2. mic. đầu vào

Sau đó, bạn cần tìm hai thông số, tùy thuộc vào micrô của bạn. vị trí và hệ thống âm thanh chậm trễ. Hai tham số này là n-delay và k-amplify.

Stream1[t+n]*k=Stream2[t] 

Nơi t = thời gian. Khi bạn tìm thấy thông số này thì luồng kết quả của bạn, chỉ micrô speek. đầu vào sẽ được

Stream2[t]-Stream1[t+n]*k=MusicReductionStream[t] 
+0

Thực sự thích giải pháp gọn gàng này. 'N' trong phương trình này phụ thuộc vào kích thước bộ đệm của âm thanh ra, tức là độ trễ của đầu ra. – Alex

+0

Bạn có thể loại bỏ sự cần thiết phải biết 'n' ở đây bằng cách tạo bộ đệm của riêng bạn với số lượng' x' số lượng khung mẫu, trước khi gửi đến chính bộ đệm âm thanh. Điều này sẽ là tốt, mặc dù nó có thể làm cho thời gian chờ không thể chấp nhận cho người dùng cuối. – Alex

+4

Thao tác này sẽ không hoạt động tốt vì phản ứng xung của hệ thống không thể là một lần nhấn chậm. Âm thanh sẽ lan ra trong thời gian do phản xạ trong phòng, phản ứng pha loa, và vv. – hotpaw2

6

Tôi nghĩ bạn muốn làm những gì noise canceling microphones làm. Các hệ thống này sử dụng ít nhất một micrô phụ để tính toán sự khác biệt giữa "tiếng ồn xung quanh" và tiếng ồn được nhắm trực tiếp vào micrô (bài phát biểu mà nó phải đăng ký). Tôi không nghĩ rằng bạn có thể có được hiệu quả tương tự với giải pháp chỉ dành cho phần mềm.

Bước đầu tiên sẽ rõ ràng là để biến âm nhạc xuống :-)

+1

-1: của bạn là một bình luận, không phải là một câu trả lời. Yêu cầu là một giải pháp phần mềm để loại bỏ âm thanh được tạo ra bởi máy tính từ âm thanh mà nó nhận được. – Argalatyr

+0

@Argalatyr Nhưng đây là điểm hợp lệ, việc hủy bỏ tiếng ồn cực kỳ khó thực hiện mà không cần thêm thông tin, mà micrô khử tiếng ồn có. – Harriv

+0

@Argalatyr Tôi thấy quan điểm của bạn, và tôi do dự một chút thời gian giữa một câu trả lời và một bình luận. Tuy nhiên, thực tế là vấn đề là rất khó giải quyết một cách chính xác trong phần mềm kết hợp với sự đơn giản đáng kinh ngạc của giải pháp phần cứng (một mike thứ hai, hoặc một tiếng ồn kệ hủy bỏ một chi phí không nhiều) khiến tôi quyết định xây dựng nó như một câu trả lời cho câu hỏi. Nhưng tôi đồng ý nó hơi mơ hồ .. – fvu

1

Tôi nghĩ rằng Speex pre-vi xử lý có một tính năng echo-hủy. Bạn sẽ cần phải cung cấp dữ liệu âm thanh bạn đã ghi và âm thanh bạn muốn hủy và âm thanh đó sẽ cố gắng xóa dữ liệu đó.

Vấn đề chính là tìm ra âm thanh máy tính của bạn phát. Không chắc chắn nếu có một API tốt cho điều đó.

Nó cũng có tính năng giảm tiếng ồn và phát hiện hoạt động bằng giọng nói. Bạn có thể biên dịch nó như một dll, và sau đó viết một tiêu đề delphi.

5

Kiểm tra các thư viện AsioVST.

  • 100% mã nguồn mở Delphi đang
  • miễn phí
  • Rất hoàn chỉnh
  • hoạt động (hỗ trợ cho xe2/x64 đang được thêm vào ví dụ)

Dưới Examples\Plugins\Crosstalk Cancellation\ bạn sẽ tìm thấy mã nguồn cho plugin có thể làm những gì bạn đang tìm kiếm.

Screenshot

Sự kỳ diệu xảy ra trong DAV_DspCrosstalkCancellation.pas.

1

Bạn cần ước tính phản ứng xung của loa và phòng, v.v., có thể thay đổi với vị trí micrô và loa chính xác và kích thước và nội dung của phòng, v.v ... cũng như biết/ước tính độ trễ hệ thống .

Nếu người hoặc micrô có thể di chuyển được, phản ứng xung và độ trễ sẽ cần phải được ước tính lại liên tục.

Khi bạn đã ước tính phản ứng xung, bạn có thể xoay nó với tín hiệu đầu ra và thử trừ các phiên bản kết quả bị trì hoãn khỏi đầu vào micrô cho đến khi bạn có thể vô hiệu các phần im lặng của đầu vào lời nói. Sự tương quan chéo có thể hữu ích cho việc ước lượng độ trễ.

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