Vẽ sóng âm trong python

Thường là bước cơ bản nhất trong xử lý tín hiệu của tệp âm thanh, người ta muốn trực quan hóa tệp mẫu âm thanh dưới dạng dữ liệu chuỗi thời gian

Âm thanh âm thanh có thể được coi là một vectơ một chiều lưu trữ các giá trị số tương ứng với từng mẫu. Biểu đồ chuỗi thời gian là biểu đồ hai chiều của các giá trị mẫu đó dưới dạng hàm của thời gian

Thư viện SciPy của Python đi kèm với một tập hợp các mô-đun để đọc và ghi dữ liệu sang nhiều định dạng tệp khác nhau. Ví dụ, scipy. io. mô-đun wavfile có thể được sử dụng để đọc và ghi vào một. tập tin định dạng wav

Đối với phần trình diễn sau đây, các tệp âm thanh mẫu được cung cấp trong URL này được sử dụng cho tác vụ trực quan hóa

Chức năng đọc trong scipy. io. mô-đun wavefile có thể được sử dụng để mở tệp wav đã chọn. Nó trả về tỷ lệ mẫu và các mẫu dữ liệu

Vẽ sơ đồ và trực quan hóa tệp âm thanh là một trong những quy trình quan trọng nhất trong phân tích âm thanh. Phân tích âm thanh là quá trình biến đổi, khám phá và diễn giải các tín hiệu âm thanh được ghi bởi các thiết bị kỹ thuật số để trích xuất thông tin chi tiết từ dữ liệu âm thanh

Trong bài viết này, chúng ta sẽ vẽ biểu đồ dạng sóng của tệp âm thanh bằng matplotlib

điều kiện tiên quyết

  • Python đã cài đặt
  • Numpy cài đặt
  • Đã cài đặt Matplotlib
  • Nền tảng trong phân tích dữ liệu

Nhập mô-đun và thư viện

Bước đầu tiên, hãy nhập các mô-đun và thư viện mà chúng ta sẽ cần

import wave
import matplotlib.pyplot as plt 
import numpy as np

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Chúng tôi sẽ sử dụng mô-đun wave và numpy để xử lý trước âm thanh. Chúng tôi sẽ sử dụng matplotlib để vẽ âm thanh

Đang tải tệp Âm thanh

Tệp âm thanh mà chúng tôi sẽ sử dụng là tệp sóng.
Hãy tải tệp sóng mà chúng ta muốn vẽ

obj = wave.open['audio_file.wav', 'rb']

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Nhận thông số âm thanh

Hãy in ra các thông số âm thanh như số kênh, độ rộng mẫu, v.v.
Chúng tôi sẽ sử dụng phương pháp

obj = wave.open['audio_file.wav', 'rb']
0 của mô-đun sóng

print['Parameters:', obj.getparams[]]

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

đầu ra. Thông số. _wave_params[nchannels=1, sampwidth=2, framerate=22050, nframes=81585, comptype='NONE', compname='không nén']

Bây giờ, hãy lấy các tham số mà chúng ta sẽ cần để vẽ âm thanh

  • Tần số mẫu, đây là số lượng mẫu mỗi giây

sample_freq = obj.getframerate[]

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

  • Số lượng mẫu, đây là tổng số mẫu hoặc khung hình trong tệp âm thanh

n_samples = obj.getnframes[]

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

  • Sóng tín hiệu, đây là biên độ sóng là cường độ âm thanh

signal_wave = obj.readframes[-1]

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

  • Độ dài âm thanh, đây là thời lượng của âm thanh

duration = n_samples/sample_freq

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Tạo đối tượng numpy

Hãy tạo một đối tượng gọn gàng từ signal_wave. Điều này sẽ được vẽ trên trục y

________số 8

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Hãy tạo một đối tượng gọn gàng từ thời lượng. Điều này sẽ được vẽ trên trục x

time = np.linspace[0, duration, num=n_samples]

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Tạo một cốt truyện âm thanh

obj = wave.open['audio_file.wav', 'rb']
0

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

đầu ra

Sự kết luận

Trong bài viết này, chúng ta đã học cách vẽ biểu đồ dạng sóng của tệp âm thanh. Ngoài việc vẽ biểu đồ dạng sóng, một biểu đồ khác mà chúng ta có thể nhận được từ tệp âm thanh là phổ tần số. Đối với phổ tần số, chúng tôi vẽ tần số mẫu theo thời gian. Để tìm hiểu cách vẽ phổ tần số, hãy xem liên kết này

Có rất nhiều dữ liệu âm nhạc và giọng nói. Ngoài ra còn có các ứng dụng thú vị đi kèm với chúng. Chúng tôi chỉ cho bạn cách trực quan hóa âm thanh trong Python

Việc phân tích dữ liệu âm thanh đã trở nên phù hợp hơn bao giờ hết trong thời gian gần đây. Các sản phẩm trợ lý ảo phổ biến đã được phát hành bởi các công ty công nghệ lớn và những sản phẩm này đang trở nên phổ biến hơn trong điện thoại thông minh và gia đình trên khắp thế giới. Chúng phần lớn được phát triển dựa trên các mô hình phân tích dữ liệu giọng nói và trích xuất thông tin từ đó

Có rất nhiều ứng dụng sử dụng phân tích dữ liệu âm thanh và đây là một chủ đề phong phú để khám phá. Trong bài viết này, chúng ta sẽ tập trung vào một phần cơ bản của quy trình phân tích dữ liệu âm thanh – vẽ biểu đồ dạng sóng và phổ tần số của tệp âm thanh

Bài viết này hướng đến những người có kiến ​​thức cơ bản hơn một chút về phân tích dữ liệu. Nếu bạn là người mới bắt đầu và đang tìm kiếm một số tài liệu để bắt kịp tốc độ trong khoa học dữ liệu, hãy xem bản nhạc này

Mở tệp WAV

Các tệp âm thanh có nhiều định dạng. Có thể bạn đã quen thuộc với MP3, sử dụng phương pháp nén mất dữ liệu để lưu trữ dữ liệu. Các định dạng như FLAC sử dụng nén không mất dữ liệu, cho phép dữ liệu gốc được tái tạo hoàn hảo từ dữ liệu nén. Tệp âm thanh của chúng tôi ở định dạng WAV [Tệp âm thanh dạng sóng], không nén. Do đó, kích thước tệp có thể trở nên lớn

Tệp âm thanh mà chúng ta sẽ xem xét là một bản nhạc lạc quan bắt đầu bằng tiếng đàn piano. Các âm thanh khác như tiếng chuông và tiếng vỗ tay phát ra trong suốt đoạn nhạc leng keng, với phần guitar gảy ở hai điểm trong bản nhạc. Điều đáng nói là các tính năng này trong bản ghi âm thanh vì chúng tôi có thể xác định một số tính năng này sau này khi chúng tôi vẽ biểu đồ dạng sóng và phổ tần số

Để mở tệp WAV của chúng tôi, chúng tôi sử dụng mô-đun sóng trong Python, có thể được nhập và gọi như sau

obj = wave.open['audio_file.wav', 'rb']
1

Chế độ '

obj = wave.open['audio_file.wav', 'rb']
21' trả về một đối tượng
obj = wave.open['audio_file.wav', 'rb']
22. Sử dụng '
obj = wave.open['audio_file.wav', 'rb']
23' để mở tệp trả về đối tượng
obj = wave.open['audio_file.wav', 'rb']
24, đối tượng này có các phương thức khác với đối tượng cũ. Bạn cũng có thể sử dụng câu lệnh
obj = wave.open['audio_file.wav', 'rb']
25 để mở tệp như chúng tôi minh họa ở đây. Nếu bạn muốn tìm hiểu thêm về cách lập trình xử lý số lượng lớn tệp, hãy xem bài viết này

Sóng âm thanh là một đại lượng liên tục cần được lấy mẫu tại một khoảng thời gian nào đó để số hóa nó. Tốc độ lấy mẫu định lượng có bao nhiêu mẫu âm thanh được lấy mỗi giây. Chúng tôi có thể truy cập thông tin này bằng phương pháp sau

obj = wave.open['audio_file.wav', 'rb']
2

Tần số mẫu định lượng số lượng mẫu mỗi giây. Trong trường hợp này là 44.100 lần/giây, tương ứng với chất lượng của đĩa CD. Số lượng khung hình riêng lẻ hoặc mẫu được cung cấp bởi

obj = wave.open['audio_file.wav', 'rb']
8

Giờ đây, chúng tôi có thể tính toán thời lượng tệp âm thanh của mình tính bằng giây

obj = wave.open['audio_file.wav', 'rb']
9

Tệp âm thanh được ghi ở dạng âm thanh nổi, nghĩa là ở hai kênh âm thanh độc lập. Điều này tạo ấn tượng về âm thanh phát ra từ hai hướng khác nhau. Ta có thể kiểm tra số lượng kênh như sau

obj = wave.open['audio_file.wav', 'rb']
0

Bước tiếp theo là lấy các giá trị của tín hiệu, nghĩa là biên độ của sóng tại thời điểm đó. Để làm điều này, chúng ta có thể sử dụng phương thức

obj = wave.open['audio_file.wav', 'rb']
26, phương thức này nhận một đối số, n, xác định số lượng khung sẽ đọc

obj = wave.open['audio_file.wav', 'rb']
2

Phương thức này trả về một đối tượng bytes. Tự kiểm tra bằng cách sử dụng hàm tích hợp sẵn

obj = wave.open['audio_file.wav', 'rb']
27 trên đối tượng
obj = wave.open['audio_file.wav', 'rb']
28. Để có được các giá trị tín hiệu từ điều này, chúng ta phải chuyển sang numpy

obj = wave.open['audio_file.wav', 'rb']
5

Điều này trả về tất cả dữ liệu từ cả hai kênh dưới dạng mảng 1 chiều. Nếu bạn kiểm tra hình dạng của

obj = wave.open['audio_file.wav', 'rb']
29, bạn sẽ nhận thấy nó có 10.768.652 phần tử, chính xác là
obj = wave.open['audio_file.wav', 'rb']
80. Để chia dữ liệu thành các kênh riêng lẻ, chúng ta có thể sử dụng thủ thuật lát mảng nhỏ thông minh

obj = wave.open['audio_file.wav', 'rb']
8

Bây giờ, các kênh trái và phải của chúng ta được tách ra, cả hai đều chứa 5.384.326 số nguyên biểu thị biên độ của tín hiệu

Tiếp theo, chúng tôi hiển thị một số ví dụ về cách vẽ các giá trị tín hiệu. Chúng tôi có dữ liệu được lưu trữ trong các mảng ở đây, nhưng đối với nhiều ứng dụng khoa học dữ liệu, gấu trúc rất hữu ích. Xem bài viết này về trực quan hóa dữ liệu được lưu trữ trong một

obj = wave.open['audio_file.wav', 'rb']
81

Vẽ biên độ tín hiệu

Trước khi vẽ các giá trị tín hiệu, chúng ta cần tính thời gian lấy từng mẫu. Đây chỉ đơn giản là tổng chiều dài của bản nhạc tính bằng giây, chia cho số lượng mẫu. Chúng ta có thể sử dụng

obj = wave.open['audio_file.wav', 'rb']
82 từ
obj = wave.open['audio_file.wav', 'rb']
83 để tạo một mảng dấu thời gian

print['Parameters:', obj.getparams[]]
2

Để vẽ đồ thị, chúng ta sẽ sử dụng lớp

obj = wave.open['audio_file.wav', 'rb']
84 từ
obj = wave.open['audio_file.wav', 'rb']
85. Nếu bạn cần một số tài liệu cơ bản về vẽ đồ thị trong Python, chúng tôi có một số bài viết. Đây là phần 1 và phần 2 của phần giới thiệu về
obj = wave.open['audio_file.wav', 'rb']
85

Để đơn giản, chúng tôi chỉ vẽ tín hiệu từ một kênh. Hãy thiết lập hình và vẽ một chuỗi thời gian như sau

print['Parameters:', obj.getparams[]]
6

Thao tác này sẽ mở hình sau trong một cửa sổ mới

Chúng tôi thấy biên độ tăng lên trong 6 giây đầu tiên, tại thời điểm đó, hiệu ứng chuông và tiếng vỗ tay bắt đầu. Có hai khoảng dừng ngắn trong tiếng leng keng ở 31. 5 và 44. 5 giây, thể hiện rõ trong các giá trị tín hiệu. Sau lần tạm dừng thứ hai, nhạc cụ chính xen kẽ giữa guitar và piano, điều này có thể nhìn thấy đại khái trong tín hiệu, trong đó phần guitar có biên độ thấp hơn. Sau đó, có một phần ngoại truyện có biên độ thấp hơn ở cuối bản nhạc

Vẽ phổ tần số

Bây giờ, chúng ta hãy xem phổ tần số, còn được gọi là biểu đồ phổ. Đây là biểu diễn trực quan về cường độ tín hiệu ở các tần số khác nhau, cho chúng ta biết tần số nào chiếm ưu thế trong bản ghi dưới dạng hàm của thời gian

obj = wave.open['audio_file.wav', 'rb']
20

Cốt truyện sau đây mở ra trong một cửa sổ mới

Trong mã đồ thị ở trên, vmin và vmax được chọn để đưa ra các tần số thấp hơn chiếm ưu thế trong bản ghi này. Thật vậy, tần số chiếm ưu thế cho toàn bộ bản nhạc thấp hơn 2. 5kHz. Bạn thấy hiệu ứng của các nhạc cụ và hiệu ứng âm thanh khác nhau, đặc biệt là ở dải tần khoảng 10 kHz đến 15 kHz. Mỗi nhạc cụ và hiệu ứng âm thanh có chữ ký riêng trong phổ tần số

Đi đâu từ đây

Vẽ biểu đồ dạng sóng và phổ tần số bằng Python tạo thành nền tảng để phân tích sâu hơn về dữ liệu âm thanh. Có lẽ bạn có thể định lượng thêm tần số của từng phần của bản ghi. Tần số trung bình của phần guitar so với phần piano là bao nhiêu? . Một phần mở rộng khác của tài liệu ở đây là vẽ sơ đồ cả hai kênh và xem chúng so sánh như thế nào. Hãy thử vẽ sơ đồ sự khác biệt giữa các kênh và bạn sẽ thấy một số tính năng mới và thú vị xuất hiện từ dạng sóng và phổ tần số

Python có thể phát tệp WAV không?

Kết luận. Phát và ghi âm thanh bằng Python . Play a large range of audio formats, including WAV, MP3 and NumPy arrays.

Bạn có thể đặt âm thanh trong Python không?

Phát âm thanh trên Python dễ dàng . Có một số mô-đun có thể phát tệp âm thanh [. sóng]. Các giải pháp này là đa nền tảng [Windows, Mac, Linux].

Bạn có thể vẽ dữ liệu bằng Python không?

Dữ liệu cũng có thể được vẽ bằng cách gọi trực tiếp hàm vẽ đồ thị matplotlib . Màu sắc và định dạng của điểm đánh dấu cũng có thể được chỉ định làm đối số tùy chọn bổ sung e. g. , b- là đường màu xanh lam, g-- là đường đứt nét màu xanh lục.

Matplotlib PyLab là gì?

MatPlotLib với Python . Matplotlib là toàn bộ gói; . pyplot là một mô-đun trong Matplotlib; . PyLab là một mô-đun tiện lợi nhập số lượng lớn matplotlib. a procedural interface to the Matplotlib object-oriented plotting library. Matplotlib is the whole package; matplotlib. pyplot is a module in Matplotlib; and PyLab is a module that gets installed alongside Matplotlib. PyLab is a convenience module that bulk imports matplotlib.

Chủ Đề