Làm thế nào để trích xuất phần giọng hát từ tín hiệu âm thanh nổi?


15

Tôi hiện đang xử lý tệp MP3 và gặp phải sự cố này. MP3 của tôi được mã hóa âm thanh nổi. Những gì tôi muốn làm là trích xuất phần phát âm để xử lý thêm (bất kỳ chế độ nào của tín hiệu đầu ra, đơn âm hoặc âm thanh nổi đều ổn).

Theo như tôi biết, âm thanh được mã hóa thành các dải tần số phụ khác nhau trong MP3. Tôi nghĩ rằng tôi có thể giới hạn tín hiệu trong phạm vi giọng nói thông qua bộ lọc thông cao / thông thấp với bộ tần số cắt phù hợp. Tuy nhiên, kết quả phải chứa các phần của tín hiệu âm nhạc thuần túy trong trường hợp này. Hoặc sau khi googling, tôi nghĩ rằng tôi có thể tính toán các tín hiệu nền trước (bằng cách đảo ngược một kênh thêm tín hiệu từ kênh khác giả sử phần giọng hát được đặt ở giữa trong âm thanh stereo gọi là hủy pha). Sau khi chuyển đổi, tín hiệu là đơn sắc. Sau đó, tôi nên hợp nhất âm thanh nổi ban đầu thành đơn âm để trích xuất tín hiệu nền.

Cho hiệu quả, cái nào được ưa thích (hoặc bất kỳ giải pháp nào khác :)? Nếu kênh thứ 2, hãy để hai kênh A và B, sẽ (BA) hoặc (AB) được sử dụng khi tính toán nền? Như với việc hợp nhất hai kênh, số học có nghĩa là đủ chính xác? Hoặc tôi có thể giảm mẫu cho mỗi kênh theo hệ số hai và xen kẽ các tín hiệu được ghép xuống dưới dạng kết quả đơn âm?

Trân trọng cảm ơn.

Câu trả lời:


21

Trước hết, làm thế nào dữ liệu được mã hóa trong tệp mp3 không liên quan đến câu hỏi trừ khi bạn nhắm đến việc xử lý miền nén (điều này sẽ khá ngu ngốc). Vì vậy, bạn có thể giả sử thuật toán của bạn sẽ hoạt động với dữ liệu miền thời gian giải nén.

Tổng / sự khác biệt là một mẹo rất, rất cơ bản để triệt tiêu giọng hát (không phải trích xuất). Nó dựa trên giả định rằng các giọng hát được trộn ở trung tâm của trường âm thanh nổi, trong khi các nhạc cụ khác được lát bên. Điều này hiếm khi đúng. LR và RL sẽ phát ra âm thanh giống nhau (tai người không nhạy cảm với sự dịch pha toàn cầu) và sẽ cung cấp cho bạn một bản hòa âm đơn âm mà không có các nhạc cụ trộn ở trung tâm. Vấn đề là, một khi bạn đã phục hồi nền, bạn sẽ làm gì với nó? Cố gắng triệt tiêu nó từ tín hiệu trung tâm (trung bình)? Điều này sẽ không hoạt động, bạn sẽ làm (L + R) / 2 - (L - R), điều này không thú vị lắm ... Bạn có thể thử bất kỳ kết hợp tuyến tính nào của những thứ đó (trung bình và "loại bỏ trung tâm"), không có gì sẽ ra khỏi nó!

Về phương pháp lọc: âm thanh của giọng nói hiếm khi vượt quá 1000 Hz nhưng sóng hài của nó có thể vượt qua điều đó. Loại bỏ tần số cao nhất sẽ làm cho phụ âm (đặc biệt là sss, chhh) khó chịu. Một số giọng nam đi dưới 100 Hz. Mặc dù vậy, bạn có thể cắt bất cứ thứ gì dưới 50 hoặc 60 Hz (bass, kick) một cách an toàn

Một số phát triển gần đây trong phân tách giọng nói đáng để khám phá:

  • Mô hình bộ lọc điều hòa NMF + của Jean Louis Durrieu > mô hình bộ lọc . Mã Python ở đây .
  • Cách tiếp cận khai thác nền của Rafii . Đơn giản để viết mã và hoạt động tốt trên âm nhạc do máy tính tạo ra với các mẫu rất lặp đi lặp lại như Electro, Hip-hop ...
  • Hsu đã tiếp cận dựa trên việc phát hiện, theo dõi và che giấu. "Thuật toán Tandem cho trích xuất cao độ hát và tách giọng từ âm nhạc đi kèm" (không thể tìm thấy bản PDF có thể truy cập).

4

Cảm ơn đã tham khảo! Bạn đã quên đề cập đến công việc của mình về tăng cường trống , cũng có thể được quan tâm cho ứng dụng của Summer_More_More_Tea. Chà, tất cả thực sự phụ thuộc vào những gì bạn muốn làm với nó. Bạn có một "ứng dụng cuối" cụ thể trong tâm trí?

Tôi hoàn toàn đồng ý với các tuyên bố trên của pichenettes. Tuy nhiên, để hoàn thiện, tôi nên nói rằng việc tăng cường giọng hát mà bạn đề cập cũng đã được Matti Ryynänen, trên thế hệ bài hát Karaoke sử dụng để nâng cao kết quả.

Để trả lời câu hỏi của bạn:

Cho hiệu quả, cái nào được ưa thích (hoặc bất kỳ giải pháp nào khác :)?

Như pichenettes đã nói, dường như không phù hợp với nhu cầu của bạn: bộ lọc low-pass / high-pass chắc chắn thất bại vì cấu trúc hài hòa của giọng nói của con người (và nói chung là bất kỳ âm thanh "thú vị" nào - tức là bất cứ thứ gì ngoài sin. ).

Nếu kênh thứ 2, hãy để hai kênh A và B, sẽ (BA) hoặc (AB) được sử dụng khi tính toán nền? Như với việc hợp nhất hai kênh, số học có nghĩa là đủ chính xác?

Một lần nữa, phương pháp thứ hai bạn đề cập sẽ không được thực hiện bởi vì bạn chỉ có thể loại bỏ tín hiệu ở trung tâm, không thể truy xuất nó. Nói cách khác, ngay cả các giọng hát nằm ở "trung tâm", không có phép toán đơn giản nào có được tín hiệu chỉ bằng giọng hát.

Hoặc tôi có thể giảm mẫu cho mỗi kênh theo hệ số hai và xen kẽ các tín hiệu được ghép xuống dưới dạng kết quả đơn âm?

er ... lấy trung bình các kênh để thu được tín hiệu kênh đơn, như được đề xuất ở trên, sẽ có ý nghĩa và sẽ không phá vỡ các đặc tính phổ của tín hiệu của bạn (giả sử tín hiệu âm thanh nổi không bị suy giảm). Vì vậy, bạn có được một tín hiệu đơn âm mà về cơ bản, bạn có cùng một nội dung âm nhạc như trước đây.

Lấy mẫu chính xác từng kênh có nghĩa là trước tiên bạn áp dụng bộ lọc thông thấp (với tần suất cắt lấy mẫu_rate / 4 trong trường hợp của bạn), và sau đó bạn có thể lấy 2 mẫu một cách an toàn. Tuy nhiên, không có nhiều điều để nói về việc xen kẽ các kênh do đó được ghép xuống: trong hầu hết các trường hợp chung, điều này phá vỡ các đặc tính phổ của tín hiệu của bạn. Bạn có thể không muốn điều đó.

Thật vậy, hoạt động của lọc thông thấp theo sau bằng cách đặt thành 0 mỗi 2 mẫu và giữ các đạo trình 0 này, trong miền Fourier, để "phản chiếu" các thành phần tần số thấp được giữ trên các tần số cao. Hãy nhớ rằng bạn có các bài học xử lý tín hiệu về lý thuyết lấy mẫu: nhân với một chuỗi các xung (hoặc dirac) dẫn đến một sự kết hợp với một chuỗi dirac khác trong miền Fourier, nghĩa là, trong trường hợp đó, phổ tần số của tín hiệu được lặp lại (định kỳ) dọc theo trục tần số, với một khoảng thời gian bằng tốc độ lấy mẫu.

Thông thường, khi lấy mẫu xuống, bạn xóa 0 (vì bạn giả sử tỷ lệ lấy mẫu mới). Nhưng ở đây, việc giữ chúng dẫn đến các thành phần tần số cao rất khó chịu. Xen kẽ các tín hiệu này sẽ không sửa điều này.

Vâng, tất cả trong tất cả, câu trả lời ngắn gọn: đừng làm điều đó . :-)

Cuối cùng, tôi cũng có thể đề nghị bạn sử dụng GUI tôi đã phát triển cho hội nghị LVAICA 2012: có một repo git cho nó. Tôi vẫn đang gỡ lỗi và cải thiện nó, vì vậy các bình luận đều được chào đón: D

Mong rằng sẽ giúp!

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.