2010-10-18 41 views
10

Tôi đang thực hiện một số nghiên cứu về cách so sánh các tệp âm thanh (wave). Về cơ bản tôi muốn so sánh các tập tin âm thanh được lưu trữ (wav) với âm thanh từ micrô. Vì vậy, cuối cùng tôi muốn lưu trữ trước một số lệnh bằng giọng nói của riêng tôi và sau đó khi Im chạy ứng dụng của tôi, tôi muốn so sánh các tệp được lưu trữ trước với đầu vào từ micrô.Khung âm thanh có chứa gì?

Suy nghĩ của tôi đã được đặt trong một số lợi nhuận khi so sánh vì nói điều gì đó hai lần liên tiếp theo cách tương tự sẽ khó mà tôi đoán.

Vì vậy, sau khi một số googling tôi thấy rằng python có mô-đun này có tên là Wave và đối tượng Wave_read. Đối tượng đó có hàm có tên là readframes (n):

Đọc và trả về nhiều nhất n khung âm thanh, dưới dạng một chuỗi byte.

Các byte này chứa những gì? Im nghĩ đến việc lặp lại thông qua các tập tin sóng một khung hình tại thời điểm so sánh chúng khung theo khung.

+2

Các byte chứa dữ liệu PCM. Bạn đang cố gắng nhận dạng giọng nói? Nghe có vẻ như bạn đang ở trên đầu của bạn. Bạn nên nghiên cứu chủ đề này. – JoshD

+0

Ah, chết tiệt rồi :) Cảm ơn bạn đã trả lời. Bạn có thể gọi nó là nhận dạng giọng nói, nhưng cách tôi nghĩ về nó là so sánh tập tin đơn giản mà sẽ đơn giản hơn nhiều. Trong trường hợp của tôi, nó chỉ là vấn đề tạo ra âm thanh giống nhau, không phân tích và cố gắng diễn giải các từ – Jason94

+1

Đó vẫn là nhận dạng giọng nói. Ngay cả một sự khác biệt nhỏ hoặc tốc độ trong giọng nói của bạn sẽ cung cấp cho dữ liệu âm thanh cực kỳ khác nhau, do đó bạn không thể chỉ so sánh nó theo từng khung hình. – Soviut

Trả lời

28

Khung âm thanh hoặc mẫu chứa thông tin biên độ (độ lớn) tại thời điểm cụ thể đó. Để tạo ra âm thanh, hàng chục nghìn khung hình được phát theo thứ tự để tạo ra tần số.

Trong trường hợp âm thanh chất lượng CD hoặc âm thanh sóng không nén, có khoảng 44.100 khung hình/mẫu mỗi giây. Mỗi khung hình có độ phân giải 16 bit, cho phép biểu diễn khá chính xác các mức âm thanh. Ngoài ra, vì âm thanh CD là âm thanh nổi, thực tế có gấp đôi thông tin, 16 bit cho kênh bên trái, 16 bit cho bên phải.

Khi bạn sử dụng các mô-đun âm thanh trong python để có được một khung hình, nó sẽ được trả lại như một loạt các ký tự thập lục phân:

  • Một ký tự cho một tín hiệu mono 8-bit.
  • Hai ký tự cho âm thanh nổi 8 bit.
  • Hai ký tự cho đơn sắc 16 bit.
  • Bốn ký tự cho âm thanh nổi 16 bit.

Để chuyển đổi và so sánh các giá trị này, trước tiên bạn sẽ phải sử dụng các chức năng của mô đun sóng python để kiểm tra độ sâu bit và số kênh. Nếu không, bạn sẽ so sánh các cài đặt chất lượng không khớp.

+1

75 khung hình mỗi giây? Bạn không có nghĩa là 44100? – corvuscorax

+0

Có, ban đầu tôi đã có (xem chỉnh sửa) nhưng nó đã được sửa đổi trên tôi. Tôi sẽ thay đổi nó trở lại trừ khi ai chỉnh sửa có thể giải thích cách giải thích của họ về một khung âm thanh. – Soviut

+1

có thể có một số nhầm lẫn xuất phát từ thực tế là các đầu đọc CD của Red Book đọc 75 phần từ đĩa mỗi giây, nhưng điều đó không liên quan đến mục đích của cuộc thảo luận này – corvuscorax

7

So sánh từng byte đơn giản hầu như không có cơ hội kết hợp thành công, ngay cả với một số khả năng được chấp nhận. Nhận dạng mẫu bằng giọng nói là một vấn đề rất phức tạp và tinh tế vẫn là chủ đề của nhiều nghiên cứu.

+1

Để thêm vào câu trả lời này ... vấn đề có liên quan nhiều đến cách chúng ta thường đại diện cho âm thanh kỹ thuật số so với cách chúng ta cảm nhận âm thanh. Chúng tôi nghe thấy tần số và tương tác của chúng. Chúng ta không trực tiếp nhận thức được sự thăng trầm của sóng. Tuy nhiên, khi chúng tôi thu âm thanh kỹ thuật số như PCM, chúng tôi chỉ ghi lại mức đo áp suất hàng ngàn lần mỗi giây. Chúng tôi nghe thấy trong miền tần số, nhưng âm thanh PCM nằm trong miền thời gian. Để bắt đầu so sánh, trước tiên chúng ta cần chạy một biến đổi Fourier để đưa âm thanh kỹ thuật số của chúng tôi vào miền tần số. – Brad

5

Điều đầu tiên bạn nên làm là một sự biến đổi không gian để biến đổi dữ liệu thành tần số của nó. Tuy nhiên nó khá phức tạp. Tôi sẽ không sử dụng thư viện nhận dạng giọng nói ở đây vì có vẻ như bạn không chỉ ghi âm giọng nói. Sau đó, bạn sẽ thử các ca thời gian khác nhau (trong trường hợp âm thanh không được căn chỉnh chính xác) và sử dụng âm thanh mang đến cho bạn sự tương đồng tốt nhất - nơi bạn phải xác định một chức năng tương tự. Oh và bạn nên bình thường hóa cả hai tín hiệu (cùng độ ồn tối đa).

5

Tôi cho rằng mô tả được chấp nhận hơi sai.

Khung dường như hơi giống như stride ở định dạng đồ họa.Đối với xen kẽ stereo @ 16 bit/mẫu, kích thước khung là 2*sizeof(short) = 4 byte. Đối với âm thanh stereo không xen kẽ @ 16 bit/mẫu, các mẫu của kênh bên trái đều là cái khác, vì vậy kích thước khung hình chỉ là sizeof(short).

+0

làm thế nào để kiểm tra nếu xen kẽ hay không? những gì là phổ biến hơn? – jiggunjer