2010-03-17 19 views
7

AVAudioRecorder trong SDK iPhone có thể được sử dụng để có được công suất đỉnh và trung bình cho một kênh, tính bằng decibel. Phạm vi nằm trong khoảng từ 0db đến 160db. Tính toán được sử dụng để chuyển đổi tỷ lệ này thành thang điểm từ 0 - 10 hoặc một cái gì đó tương tự có thể được sử dụng cho đồng hồ đo mức âm thanh như thế nào?iPhone SDK: Đo sáng AVAudioRecorder - cách thay đổi peakPowerForChannel từ decibel thành phần trăm?

Trả lời

17

Phạm vi từ -160 dB đến 0 dB. Bạn có thể muốn hiển thị nó trong một mét mà đi từ -90 dB đến 0 dB. Việc hiển thị nó dưới dạng decibel thực sự hữu ích hơn là mức âm thanh tuyến tính, bởi vì decibel là thang đo logarit, có nghĩa là nó gần đúng hơn so với âm lượng của chúng ta.

nói đó, bạn có thể sử dụng để chuyển đổi từ decibel để tuyến tính:

linear = pow (10, decibels/20);

và ngược lại:

decibels = log10 (linear) * 20;

Phạm vi cho các decibel trên là vô cùng tiêu cực đến không, và đối với tuyến tính là 0,0 đến 1,0. Khi giá trị tuyến tính là 0,0, đó là -inf dB; tuyến tính tại 1.0 là 0 dB.

+10

Chính xác thì '20' ở đây là gì? –

+0

Khi đo cường độ âm thanh trong không khí, giá trị tham chiếu là ước lượng áp suất âm 20 micropascals (µPa), giá trị sách giáo khoa cho âm thanh trung bình yên tĩnh nhất mà một người trẻ khỏe mạnh có thể nghe được (ở tần số 1000 Hz) https: //www.researchgate.net/post/Is_there_any_relationship_between_dB_decibel_and_dBA_how_to_convert_dB_to_dBA –

4

Apple cũng đã triển khai một dB cho lớp chuyển đổi biên độ tuyến tính MeterTable.cpp và MeterTable.h Hãy tìm trong ví dụ ứng dụng SpeakHere.

Bạn có thể sử dụng chức năng inline của họ cho phép tính giá trị "on-the-fly"

inline double DbToAmp(double inDb); 

HOẶC

tạo một đối tượng MeterTable sử dụng bảng tra cứu tính trước. Điều này lưu trữ các giá trị chuyển đổi trong bộ nhớ để ứng dụng của bạn có thể giảm số lượng phép tính.

float ValueAt(float inDecibels); 

LƯU Ý: có thể cần tra cứu bảng nếu bạn có nhiều tính toán khác cùng lúc hoặc bạn cần xử lý nhanh.

+1

Liên kết ví dụ ứng dụng SpeakHere -> http://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html –

+0

Và hàm DbToAmp trả về: ' pow (10., 0.05 * inDb); ' – CharlesA

+0

Cũng https://github.com/warrenburton/MeterTableOC nếu bạn không muốn những rắc rối nhỏ của c + + tập tin trong dự án của bạn –

Các vấn đề liên quan