Chơi nhạc chậm trong khi duy trì tần số


10

Phát một đoạn âm thanh nhạc ở tốc độ chậm hơn sẽ làm giảm độ cao (tần số) của nó. Có một công cụ và lý thuyết để làm chậm bài hát đang phát trong khi vẫn giữ tần số như cũ không? Tôi cho rằng người ta có thể thực hiện biến đổi Fourier cửa sổ hoặc biến đổi wavelet. Có vẻ như người ta phải chọn trước kích thước cửa sổ hoặc tự động chọn cơ sở sóng con. Có bất kỳ lý thuyết và ứng dụng cụ thể và chi tiết để làm điều đó?


1
Ngoài câu trả lời được cung cấp dưới đây, vui lòng xem liên kết này để biết thêm thông tin.
A_A

Câu trả lời:


5

Vâng, một số người trong chúng ta có thể làm điều đó, bạn có thể tăng tốc hoặc giảm tốc độ mà không ảnh hưởng đến cao độ, một số người gọi đây là ứng dụng của Time Stretch, có nhiều cách khác nhau để làm điều đó, bạn có thể làm trong miền tần số hoặc miền thời gian, bạn sẽ cần chọn những gì là tốt nhất cho bạn, bạn sẽ tìm thấy một số lợi thế và bất lợi của từng.

Miền thời gian:

Trong Miền thời gian, bạn có thể thử một số kỹ thuật như:

  • TDHS (Sắc thái hài hòa miền thời gian)
  • Sola (Thêm chồng chéo đồng bộ)
  • PSola (Thêm chồng chéo đồng bộ)
  • WSola (Thêm dạng sóng tương tự chồng chéo)

Ưu điểm: Nhanh, một số thuật toán dễ hiểu, chất lượng tốt trong âm thanh đơn âm.

Nhược điểm: Nói chung, bạn sẽ cần một bản nhạc rất hay để ghép đúng vị trí, rất khó để thực hiện :-(, vì vậy nếu bản nhạc của bạn thất bại hoặc không hoạt động trong âm thanh Poliphonic, thuật toán này sẽ gây ra nhiều trục trặc / tạo tác trong âm thanh đầu ra.

Tần số khu vực:

Tất cả thời gian mà tôi biết trong miền tần số được dựa trên các kỹ thuật phát âm pha .

Ưu điểm: Sẽ hoạt động trong âm thanh đa âm hoặc đơn âm.

Nhược điểm: Có thể đau đớn khi hiểu tất cả các phép toán, việc thực hiện hơi khó, không nhanh như mã miền thời gian, đối với giọng nói tôi thích kết quả miền thời gian, một số thủ thuật để cải thiện kết quả của trình phát âm pha tiêu chuẩn không được chia sẻ.

Tôi có thể nói rằng cửa sổ và kích thước hop là một trong những chìa khóa cho chất lượng của bộ phát âm pha, nói chung chúng tôi chọn 4xsự chồng chéo để tổng hợp lại, một cửa sổ kích thước 4096là đủ cho đôi tai của tôi (tất nhiên nếu bạn có sức mạnh xử lý cho các kích thước này) , bộ phát âm pha tiêu chuẩn có thể thêm một số hiệu ứng dội âm, để cố gắng tránh loại vấn đề này bạn có thể cần phải khóa pha.

Đối với datailed hãy xem trong Miller PuckettePortnoff giấy


Cảm ơn về câu trả lời của bạn. Vấn đề với cách tiếp cận ngây thơ nhất là gì: mở rộng tín hiệu thời gian trên toàn bộ dưới dạng một hàm trên toàn bộ khoảng thời gian mà không cần cửa sổ vào chuỗi Fourier và nhân tất cả tần số với một hằng số. Tôi hiểu bất kỳ lỗi cục bộ nào trong miền thời gian sẽ ảnh hưởng đến tất cả các hệ số Fourier. Bên cạnh đó, cạm bẫy của cách tiếp cận phi địa phương ngây thơ này là gì?
Hans

Tôi chưa bao giờ thử bất cứ điều gì như vậy, nó có thể hoạt động, vấn đề rõ ràng là điều này có thể khá tốn kém, Đó chắc chắn không phải là một cách hiệu quả, hãy tưởng tượng rằng bạn có một đoạn âm thanh (1 phút) được lấy mẫu ở 44100Hz, bây giờ làm những gì bạn đang đề xuất, bạn sẽ phải áp dụng fourier tại 44100 * 60 = 2646000các điểm cùng một lúc và xử lý, vì vậy hãy quên mọi nỗ lực xử lý thời gian thực như thế này ,
ederwander

1
Tôi không nghĩ những gì tôi đề xuất trước đây sẽ hoạt động theo nghĩa toán học thuần túy (không tính đến chi phí và độ nhạy lỗi).
Hans

3

Công cụ / lý thuyết mà bạn mô tả thực sự là một lĩnh vực nghiên cứu lớn về công nghệ âm nhạc, được gọi chung là sửa đổi quy mô thời gian âm thanh. Một thành phần lớn của lĩnh vực này là cách bạn có thể ngăn những thay đổi rõ ràng về tần số sau khi kéo dài thời gian. Điều này có thể được tiếp cận với cả phương pháp tần số và miền thời gian, tùy thuộc vào các ràng buộc hoặc mục tiêu của ứng dụng của bạn. Mục nhập wikipedia để sửa đổi quy mô thời gian / cường độ âm thanh là một điểm khởi đầu tốt.

Nếu bạn muốn theo đuổi cách tiếp cận bằng cách sử dụng cơ sở tần số / sóng con, kích thước cửa sổ và lựa chọn cơ sở của bạn sẽ ảnh hưởng đến mức độ bạn có thể định vị tín hiệu. Để sử dụng STFT làm ví dụ, một cửa sổ dài sẽ hoạt động tốt đối với các hình sin đứng yên nhưng phá hủy quá độ của bạn. Một cửa sổ ngắn hơn sẽ cung cấp một phản ứng thoáng qua thích hợp hơn với chi phí nội địa hóa tần số. Hiệu suất của các cơ sở sóng con khác sẽ phụ thuộc vào bản chất của việc chiếu tín hiệu của bạn lên cơ sở.


Cảm ơn bạn rất nhiều cho câu trả lời. Bạn có bất cứ tài liệu tham khảo nào về ứng dụng của wavelet cho vấn đề này không?
Hans

Xin vui lòng xem bình luận của tôi dưới đây câu trả lời của ederwander. Cảm ơn.
Hans

2

Dưới đây là một liên kết đến một chức năng hướng dẫn đơn giản và có giá trị trong C ++ (smbPitchShift.cpp) của Stephan M. Bernsee, có thể làm chậm hoặc tăng tốc độ âm nhạc mà không thay đổi cường độ của nó.

Ông đã phát hành mã này theo Giấy phép Mở rộng (WOL). Trong ứng dụng của mình, tôi có thể điều chỉnh chức năng của anh ấy để làm chậm nhạc trong thời gian thực - đó là trong khi phát tệp mp3 và đồng thời thực hiện phát hiện cao độ theo tín hiệu mp3 đó cùng một lúc.

Tôi cũng đã bao gồm một liên kết đến trang web của Bernsee, trong đó có các mô tả chi tiết của anh ấy về việc kéo dài thời gian và chuyển dịch tín hiệu âm thanh, chẳng hạn như âm nhạc.

https://github.com/AndyA/BatPhone/blob/master/pitchshift.c

http://bloss.zynaptiq.com/bernsee/time-pitch-overview/


Mã ban đầu không áp dụng time stretch, mã gốc áp dụng Pitch Shift, trong trường hợp này để áp dụng sửa đổi quy mô thời gian bạn sẽ cần kết hợp Pitch Shifit + Resample (interpolation), mã của Bernsee hoạt động tốt bằng cách sử dụng cửa sổ kích thước 4096bạn sẽ có thể điều chỉnh một quãng tám (trên hoặc dưới) , điều đó có nghĩa là theo đó bạn sẽ chỉ có thể tạo thang đo thời gian với chất lượng tốt bằng cách sử dụng các yếu tố trong khoảng 2.0x-0.5x, một bộ phát âm pha được xây dựng tốt có thể đạt được kết quả tốt hơn khi sử dụng cùng kích thước cửa sổ và bạn sẽ có thể ngoại suy các giá trị này các yếu tố với chất lượng tốt hơn
ederwander

Rất tiếc, bây giờ tôi nhớ rằng tôi phải áp dụng Lấy mẫu lại để hoàn thành việc kéo dài thời gian, để độ cao ban đầu không bị thay đổi. Có vẻ như Bernsee đã tạo ra một số thay đổi cho mã của mình kể từ phiên bản được liên kết tại GitHub. Mã mới hơn của anh ta có sẵn để tải xuống từ trang web của anh ta - nó có thể tăng phạm vi dịch chuyển từ đặc điểm kỹ thuật ban đầu của anh ta. Tôi đã điều chỉnh mã ban đầu của anh ấy để tôi có thể tăng ca lên 8 lần.
James Paul Millard

không có sự khác biệt giữa mã của bạn và trang Bernsee, toán học chính vẫn giống nhau, Sự khác biệt mạnh mẽ mà tôi có thể thấy là kích thước cửa sổ = 8192trong mã từ trang tải xuống, do đó bạn phải thực hiện thêm 4 điểm để xử lý , Tôi trở lại để nói rằng với một nửa kích thước cửa sổ, 8192/2=4096bạn có thể làm tương tự bằng cách sử dụng một số bí mật của bộ phát âm pha, vấn đề ở đây là bạn có thể giữ chất lượng với ít xử lý hơn.
ederwander

Mặc dù tôi đã cung cấp liên kết GitHub cho BatPhone, nhưng đó không phải là mã của tôi. Tôi vừa lấy nó từ một tìm kiếm trên Internet để xem smbPitchShift (). Mã của tôi được sửa đổi nhiều từ phiên bản của Bernsee và nằm trong tệp này: github.com/CreativeDetector/PitchScope_Player/blob/master/Src/
James Paul Millard

Vâng bây giờ tôi có thể thấy, nó thực sự là một mẫu lại, bạn có thể quan tâm để xem / nghe trình phát âm pha của tôi trong hành động.
ederwander
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.