Làm cách nào để phát hiện tiếng huýt sáo, tiếng bật và các âm thanh khác trong đầu vào âm thanh trực tiếp?


9

Tôi đã đọc nhiều câu hỏi về SO, và thẳng thắn, mỗi câu hỏi không mô tả bất kỳ cách cụ thể nào để nói về nó. Một số người nói "làm FFT" và một số người nói "không giao nhau", v.v. Nhưng tôi chỉ hiểu được rằng đầu vào âm thanh kỹ thuật số bao gồm một loạt các biên độ cho một tần số cụ thể và tốt .. Không thực sự biết nhiều ngoài nó

Bây giờ tôi đã biết định lý Nyquist, tần số, biên độ, chuỗi Fourier, v.v., và đó là từ 2-3 năm trước khi tôi làm điều đó trong chương trình đại học của tôi trong một học kỳ. Nhưng hồi đó, chúng tôi thực sự không dạy cách sử dụng Fourier trong thế giới thực nhiều và tôi không bận tâm đến việc tìm hiểu thêm về chủ đề này ngoài việc học chỉ đủ để vượt qua chủ đề. Nhưng bây giờ tôi sẽ phải sử dụng tất cả những thứ đó.

Dưới đây là ảnh chụp nhanh những âm thanh tôi đang cố gắng phát hiện:

đồ thị độc đáo của snaps ngón tay và bật / tắt công tắc đèn

Rõ ràng các âm thanh có đồ thị độc đáo. Tôi chỉ muốn hiểu làm thế nào để trích xuất các đặc điểm độc đáo đặc biệt của chúng cho các đường nhọn độc đáo của chúng trong biểu đồ. Giống như những gì biên độ, tần số, vv Và trong bao nhiêu thời gian - mặc dù đó là tầm thường tôi đoán.

Tôi muốn một bước đơn giản, danh sách hướng dẫn không mơ hồ - Tôi có thể google thuật ngữ tôi sẽ không hiểu.

Có lẽ như thế này? -

  1. Nhận dữ liệu âm thanh đầu vào

  2. Phổ đồ

  3. Nhận biểu đồ phổ cho âm thanh bạn muốn phát hiện trong môi trường ồn ào

  4. Nghiên cứu biểu đồ đó - vẽ các đặc điểm độc đáo của âm thanh đó

  5. Tạo một số loại chức năng có thể phát hiện các đặc điểm cụ thể đó trong nguồn cấp âm thanh trực tiếp, sử dụng các đặc điểm của âm thanh được tìm thấy trong (4)

  6. Nếu một trận đấu được tìm thấy, tốt - công việc đã hoàn thành.

  7. Ba Lan thuật toán để loại bỏ các tiêu cực sai.

Nơi tôi bối rối là - làm thế nào để tôi đi khoảng 3,4,5. Đặc biệt là 3 và 4. Vì tôi đang tạo một phần mềm trong đó người dùng có thể ghi lại bất kỳ âm thanh nào dưới dạng đầu vào cử chỉ để sử dụng sau này, tôi muốn hệ thống của mình có thể ghi lại bất kỳ âm thanh nào và khớp với âm thanh trực tiếp thức ăn để phát hiện cử chỉ âm thanh đó. Giống như nói, ho, hoặc búng ngón tay, hoặc huýt sáo, hoặc vỗ tay. Hoặc nói phụ âm - hoặc hoặc hoặc . Chỉ cần về bất kỳ âm thanh.MộtBXZ

Tôi đã nghĩ đến việc làm cho người dùng ghi lại âm thanh mà họ muốn lưu trữ như một cử chỉ trong một môi trường khá. Và người dùng sẽ tạo ra âm thanh chỉ ở giữa phần đệm thời gian yên tĩnh ; 3 giây ở đầu và cuối ghi âm.

Vì vậy, trong 3 giây đầu tiên, hệ thống của tôi sẽ thiết lập rằng đầu vào hiện tại là âm thanh nền yên tĩnh bình thường. Và sau đó, một sự thay đổi đột ngột trong biểu đồ sẽ là đầu vào âm thanh bắt đầu. Và khi điều đó dừng lại, quá trình ghi sẽ tiếp tục trong 3 giây nữa, phần đệm thời gian yên tĩnh kéo dài . Điều này sẽ được thực hiện bằng tay bởi người dùng. Sau đó, nó sẽ tự động lưu trữ các đặc điểm của chỉ phần đó trong đó sự thay đổi đột ngột trong biểu đồ kéo dài - ở đâu đó giữa thời gian đệm.

Và do đó, các đặc điểm của phần đó sẽ được lưu dưới dạng dữ liệu cử chỉ của âm thanh đó, được sử dụng để phát hiện âm thanh cụ thể đó trong nguồn cấp âm thanh trực tiếp sau này.

Vấn đề là, tôi đang nghĩ tất cả những điều này bằng tiếng Anh. Tôi cần phải suy nghĩ trong toán học và vật lý, để có thể thực hiện nó một cách hiệu quả trong mã của tôi. Tôi thật sự không biết phải viết gì và viết nó ở đâu trong mã của mình - ngay cả với rất nhiều thư viện và câu hỏi về SO theo ý của tôi.

Và xin lỗi nếu điều này là dài.


1
Vì tò mò, đó có phải là quang phổ được thực hiện trên điện thoại hoặc máy tính bảng không? Nếu vậy, bạn có thể cho biết tên của ứng dụng. Trông thật tuyệt. Liên quan đến câu hỏi của bạn sau đó tôi nghĩ rằng ứng dụng của bạn tương tự như chủ đề / nhiệm vụ thực hiện nhận dạng từ bị cô lập. Bạn có thể có thể nhận được rất nhiều ý tưởng và cảm hứng từ việc googling đó. Phần khó là không nhận ra các cử chỉ trong một cử chỉ nhỏ tương đối hạn chế, phần khó là để lọc ra những thứ không phải là cử chỉ.
niaren

Đây là ứng dụng: play.google.com/store/apps/ ( Và cảm ơn vì quan điểm của bạn. Nhưng tôi muốn bạn chỉ cho tôi cách phát hiện không phải từ, mà là âm thanh (ít nhất là bây giờ), như huýt sáo, pop, vỗ tay, v.v. Tôi đang làm việc trong Python.
bad_keypoint

1
Thật không may loại điều này vẫn là một lĩnh vực nghiên cứu. Tôi không biết bất cứ ai giải quyết vấn đề cụ thể này.
Bjorn Roche

Câu trả lời:


2

Mặc dù tôi đồng ý với một trong những ý kiến ​​rằng sử dụng các kỹ thuật nhận dạng giọng nói có thể là một khởi đầu tốt, nhưng những âm thanh này khác nhau và tôi không biết có ai đã thực hiện bất kỳ nghiên cứu nào để phân loại chúng (bài báo được trích dẫn bởi Nathan chỉ để phân biệt giữa lời nói và tiếng ồn), vì vậy trừ khi có ai đó trình bày điều gì đó mâu thuẫn với điều đó, bạn sẽ phải phát minh ra kỹ thuật của riêng mình, và điều đó sẽ mất rất nhiều học hỏi và rất nhiều công việc. Điều tốt nhất tôi có thể làm là giúp bạn bắt đầu.

Trước hết, đừng hy vọng ai có thể tạo ra một số công thức ma thuật. Không có phương trình để có được từ âm thanh đến âm thanh là gì. Con người và máy tính phải học bằng cách kết hợp dữ liệu để đưa ra những phỏng đoán có giáo dục về âm thanh là gì. Lý do mọi người nói trong câu trả lời của họ "sử dụng FFT" hoặc "sử dụng giao nhau bằng 0" là vì đây là một số khối xây dựng DSP cơ bản được sử dụng trong nhận dạng giọng nói và các thuật toán liên quan. Nhưng tỷ lệ vượt FFT và zero thường chỉ là những bước đầu tiên trong việc tạo ra một tập hợp các tham số mô tả âm thanh. Các tham số này sau đó được phân tích thống kê (không thông qua một số chức năng ma thuật) để xác định loại nào chúng có khả năng nhất thuộc về. Lưu ý rằng tôi đã nói "rất có thể": ngay cả phát hiện lời nói tốt nhất (và bộ não con người!

Vì vậy, một số thông số bạn có thể tìm kiếm bao gồm:

  • tỷ lệ vượt không
  • tần số trung tâm
  • phong bì (đây thực sự là một tập hợp các tham số, bao gồm, ví dụ như thời gian tấn công)
  • phong bì
  • cân bằng hài hòa chẵn / lẻ
  • giọng nói
  • sân cơ bản

Khi bạn có một bộ thông số mà bạn nghĩ sẽ cho phép bạn phân biệt âm thanh của mình, bạn sẽ cần sử dụng một số phương pháp thống kê để phân loại chúng. Mô hình Markov ẩn thường được sử dụng trong lời nói. Bạn cũng có thể xem xét hồi quy logistic, K-nghĩa và tôi chắc chắn có những lựa chọn khác, nhưng tôi nghĩ HMM đã được thử và đúng.


Câu trả lời của bạn là tốt, nhưng về cơ bản, tôi đang yêu cầu sắp xếp âm thanh phù hợp với âm thanh của chính người dùng với âm thanh mà anh ấy tạo ra sau này để sử dụng phần mềm của tôi. Giống như, công cụ tương tự. Giả sử người dùng tạo các loại âm thanh A, B và C. khác nhau và các đặc điểm của các âm thanh này được lưu trữ lần lượt là C_A, C_B và C_C.
bad_keypoint

Kỹ thuật này vẫn giống nhau: 1. tìm ra thông số nào bạn sẽ đo, 2. đo chúng, 3. sử dụng số liệu thống kê để tìm hiểu điều gì làm cho mỗi âm thanh khác nhau, 4. sử dụng dữ liệu đó để phân loại.
Bjorn Roche

Vì vậy, đó là những gì tôi nghĩ. nhưng tôi đoán tôi sẽ phải xem những thông số nào từ danh sách dài tốt mà bạn cung cấp mà tôi phải đánh dấu để phát ra âm thanh xa.
bad_keypoint

1
Thành thật mà nói, tôi rất bi quan về việc có thể phân biệt những thứ như một ngón tay và công tắc đèn trong nhiều môi trường khác nhau mà không có nhiều dữ liệu mẫu và có thể nhiều thông số hơn tôi đã đưa ra, nhưng tôi hy vọng tôi đã sai. Vui lòng báo cáo lại kết quả của bạn ngay cả khi phải mất một thời gian.
Bjorn Roche

Ngoài ra, một số người trong danh sách gửi thư nhạc-dsp ( music.columbia.edu/cmc/music-dsp ) có thể có các đề xuất khác.
Bjorn Roche

0

Tôi đã sử dụng bài báo này về việc kết thúc dựa trên entropy khi tôi cố gắng bỏ qua các loại âm thanh này trong các cuộc gọi điện thoại, được sử dụng để nhận dạng giọng nói máy tính, nếu âm thanh bạn đang cố gắng ghi lại là lời nói thì entropy có thể hoạt động rất tốt, đối với âm nhạc, nó có thể không hữu ích


0

Tôi nghĩ các đề xuất của Bjorn là rất tốt, nhưng tôi muốn cung cấp một số thông tin bổ sung. Từ mô tả của bạn, điều này nghe có vẻ giống như một vấn đề nhận dạng âm sắc. Có một số nghiên cứu trong lĩnh vực này trong bối cảnh âm nhạc máy tính (xác định các nhạc cụ khác nhau là một điều hữu ích để có thể làm và cho biết sự khác biệt giữa tiếng tách và tiếng vỗ tay là do âm sắc của âm thanh). William Brentđã thực hiện một số nghiên cứu trong lĩnh vực này (tìm kiếm âm sắc trên trang của mình) và tạo ra một số phần mềm để sử dụng trong Dữ liệu thuần túy. Trong mỗi tình huống bạn đang tìm kiếm các sự kiện cụ thể, do đó, thực hiện một số phân đoạn tự động bằng cách phát hiện khởi phát sẽ là một ý tưởng tốt. Vì bạn đã thực hiện STFT, việc xác định khởi phát sẽ không yêu cầu quá nhiều công việc bổ sung (xem xét phát hiện khởi phát Spectral Flux). Một phác thảo hệ thống có thể là như vậy:

Đào tạo

  • Xác định các tính năng phù hợp (ví dụ: tốc độ cắt ngang bằng 0, trọng tâm quang phổ, MFCC)
  • Phát hiện khởi phát
  • Tính toán các tính năng này trên âm thanh đầu vào (bản ghi cử chỉ của bạn)
  • Giữ một cơ sở dữ liệu tính toán. Bạn sẽ cần xác định xem đây là tình huống huấn luyện có giám sát hay không giám sát. Ví dụ: người dùng có xác định trước rằng một snap là "âm 1" và tiếng vỗ tay là "âm 2" hay hệ thống của bạn cố gắng phân cụm chúng sau khi đào tạo.

Phân loại

  • Phát hiện khởi phát trong thời gian thực và tính năng tính năng trên âm thanh đến
  • Sử dụng thước đo khoảng cách (khoảng cách euclide hoặc khoảng cách Lp khác) để thực hiện phân loại lân cận gần nhất hoặc phân loại lân cận K gần nhất để xác định âm thanh "gần nhất" từ cơ sở dữ liệu của bạn

Bài viết này về nhận dạng âm sắc gõ có thể được sử dụng. Nó phác thảo các định nghĩa cho các tính năng tiềm năng để tính toán cho âm thanh đến và phương pháp phân loại của tác giả. Điều này sẽ hoạt động khá tốt đối với âm thanh gõ, nhưng có thể không hoạt động tốt đối với những thứ như lời nói (nhiều âm tiết), trong trường hợp đó, phương pháp HMM sẽ phù hợp hơn. Tương tự, độ chính xác của phát hiện khởi phát của bạn sẽ thay đổi tùy thuộc vào loại âm thanh bạn đang tìm kiếm.

Nếu bạn đặc biệt quan tâm đến tiếng kêu so với công tắc đèn, thì hãy dành thời gian để tìm ra tính năng nào có thể phân biệt chính xác giữa hai âm thanh.


Tôi sẽ phát hiện khởi phát bằng cách phát hiện những thay đổi đột ngột trong dữ liệu âm thanh đến. Cần làm việc. Tôi đang phát hiện bắt đầu và kết thúc các cử chỉ sẽ được lưu trữ.
bad_keypoint

Vâng, điều đó chủ yếu nên làm việc. Lý do duy nhất tôi đề xuất Spectral Flux là bởi vì bạn sẽ tham gia STFT bằng mọi cách. Nếu bạn đang mong đợi một môi trường khá yên tĩnh, thì một ngưỡng biên độ cơ bản sẽ hoạt động đủ tốt.
vĩ đại
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.