Tôi có một câu hỏi liên quan đến phép toán mà Apple đang sử dụng ở đây là speak here example.Toán học đằng sau ví dụ của Apple Nói ở đây, ví dụ
Một nền tảng nhỏ: Tôi biết rằng công suất trung bình và công suất đỉnh được trả về bởi AVAudioRecorder và AVAudioPlayer bằng dB. Tôi cũng hiểu tại sao điện RMS bằng dB và nó cần phải được chuyển đổi thành amp sử dụng pow(10, (0.5 * avgPower))
.
tôi câu hỏi hạnh phúc:
Apple sử dụng công thức này để tạo ra nó "Meter Bảng"
MeterTable::MeterTable(float inMinDecibels, size_t inTableSize, float inRoot)
: mMinDecibels(inMinDecibels),
mDecibelResolution(mMinDecibels/(inTableSize - 1)),
mScaleFactor(1./mDecibelResolution)
{
if (inMinDecibels >= 0.)
{
printf("MeterTable inMinDecibels must be negative");
return;
}
mTable = (float*)malloc(inTableSize*sizeof(float));
double minAmp = DbToAmp(inMinDecibels);
double ampRange = 1. - minAmp;
double invAmpRange = 1./ampRange;
double rroot = 1./inRoot;
for (size_t i = 0; i < inTableSize; ++i) {
double decibels = i * mDecibelResolution;
double amp = DbToAmp(decibels);
double adjAmp = (amp - minAmp) * invAmpRange;
mTable[i] = pow(adjAmp, rroot);
}
}
gì được tất cả các tính toán - hay đúng hơn, điều gì làm từng bước làm gì? Tôi nghĩ rằng mDecibelResolution
và mScaleFactor
được sử dụng để vẽ phạm vi 80dB trên 400 giá trị (trừ khi tôi bị nhầm lẫn). Tuy nhiên, ý nghĩa của inRoot
, ampRange
, invAmpRange
và adjAmp
là gì? Ngoài ra, tại sao mục nhập thứ i trong bảng đồng hồ "mTable[i] = pow(adjAmp, rroot);
"?
Bất kỳ trợ giúp nào được đánh giá cao! :)
Cảm ơn trước và chúc mừng!
Cảm ơn bạn đã phản hồi! Vì vậy, nếu tôi hiểu điều này một cách chính xác, là adjAmp về cơ bản giá trị nội suy tuyến tính cho -80 đến 0 được vẽ trên thang tỷ lệ 0 đến 1, đảm bảo rằng chúng ta chỉ vẽ 400 giá trị (trong ví dụ này)? Và sau đó rroot về cơ bản làm cho nó "phi tuyến tính", nhưng nhiều hơn một phản ứng cong? Cảm ơn! – codeBearer
Việc gọi các giá trị nội suy tuyến tính được điều chỉnh bằng amp là -80db đến 0. Các giá trị nội suy tuyến tính là cho các biên độ tương ứng với các giá trị decibel (với tối thiểu là -80). db để chuyển đổi amp không phải là tuyến tính (nó là theo cấp số nhân). amp để điều chỉnh amp chuyển đổi là nội suy tuyến tính. – Geebs
Xin chào. Cảm ơn một lần nữa cho phản ứng của bạn. Vâng, tôi hiểu về thang log v/s tuyến tính, và tại sao nó cần thiết để vẽ trên tuyến tính. Những gì tôi muốn xác nhận, là "đường cong phản ứng" và điều chỉnh, nhưng có vẻ như tôi đã tập trung nhiều vào "ý nghĩa của tên var". > _ <. Nhưng, cảm ơn một lần nữa vì phản ứng của bạn. :) – codeBearer