2013-03-11 51 views
8

Tôi đang cố gắng tính mức độ ồn từ micrô trên Android. Tôi đã sử dụng AudioRecord để lấy dữ liệu thô từ micrô và cũng đã thực hiện một số chuẩn hóa và tính toán decibel sau đó. Nhưng kết quả là không đúng. Các giá trị decibel tôi nhận được không ổn định và không thể phản ánh âm thanh. Chẳng hạn như ngay cả khi tôi vỗ tay, giá trị decibel không phản ánh âm thanh. Tôi nên thay đổi mã như thế nào hoặc tôi nên làm gì nếu tôi muốn tính toán độ to từ micrô trong thời gian thực? Cảm ơn rất nhiều.Tính mức độ ồn từ micrô trên android

   recorder = new AudioRecord(AudioSource.MIC, iSampleRate, AudioFormat.CHANNEL_IN_MONO,    AudioFormat.ENCODING_PCM_16BIT, iAudioBufferSize); 

       iBufferReadResult = recorder.read(buffer, 0, iAudioBufferSize); 

       for (int i = 0; i < buffer.length-1; i++) 
      { 
       ByteBuffer bb = ByteBuffer.wrap(buffer, i, 2); 
       int isample = bb.getShort(); 

       double dsample =(double) isample/32768.0; 
       sum += (dsample*dsample); 

       double rms = Math.sqrt(sum/(buffer.length*0.5));   
       double decibel = 20*Math.log10(rms); 

       sum = 0; 
       } 

      } 
+0

Mục đích có thể phát hiện sự thay đổi âm thanh môi trường dựa trên độ ồn. Tôi nên làm như thế nào? Cảm ơn. – Foreverniu

+0

Tôi nghĩ bạn kiểm tra âm lượng trong âm thanh quản lý – DjHacktorReborn

+0

Tôi chưa làm việc với micrô cho đến nay nhưng tôi cho rằng tính toán của bạn luôn mang lại kết quả tương tự. Giả sử không có tiếng ồn thì bạn sẽ có nhiều mẫu ở mức 50%, sẽ là 0 nếu các số thực sự được ký. Mặt khác, khi có một âm thanh, bạn sẽ có nhiều mẫu với biên độ dương và âm tương tự, và cũng sẽ tăng lên tới 0. Tôi muốn nói rằng bạn chỉ cần sử dụng các giá trị tuyệt đối, ví dụ: loại bỏ các dấu hiệu nếu bạn thực sự nhận được số dương và âm? –

Trả lời

3

Có hai vấn đề ở đây. Đầu tiên là bạn đang tính toán RMS từ một mẫu duy nhất, vì bạn không tính tổng trên toàn bộ bộ đệm - bạn sẽ đặt lại tất cả các mẫu. Vì vậy, sum chứa độ lớn hình vuông cho một mẫu, nhưng sau đó bạn sẽ chia cho độ dài mẫu.

Vấn đề thứ hai là bạn sẽ không dễ dàng có thể tạo đồng hồ đo độ ồn. Giá trị decibel mà bạn tính toán sẽ chỉ là một tỷ số công suất khi giá trị cực đại của 0dB cho biết giá trị cực đại. Nó không có bất kỳ tương quan với áp suất âm vật lý, mà nói chung là những gì mọi người có nghĩa là khi họ nói 'loudness' (dB (SPL) là quy mô 50dB là độ ồn của bài phát biểu, 110dB một buổi hòa nhạc rock, vv).

Xem thêm: sound meter android