2016-08-29 23 views
5

Tôi đang cố gắng tìm hiểu xem thiết bị của tôi có ghi âm chính xác hay không (Âm lượng của âm thanh được ghi không quá thấp và thực tế tệp đã ghi có âm thanh). Con đường tôi đã cố gắng làm việc đó là:Android - ghi lại âm thanh và kiểm tra âm lượng

ghi âm bắt đầu -> âm thanh chơi -> dừng ghi âm -> có được file ghi tối đa khối lượng

Code tôi sử dụng để ghi lại âm thanh:

public void playSound() { 
     File myDataPath = new File(getActivity().getFilesDir().getAbsolutePath() 
       + File.separator + ".CheckAudio"); 
     if (!myDataPath.exists()) 
      myDataPath.mkdirs(); 
     recordFile = myDataPath + File.separator + "Recording_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()) + ".mp3"; 
     am.setStreamVolume(AudioManager.STREAM_RING, am.getStreamMaxVolume(AudioManager.STREAM_RING), 0); 
     am.setStreamVolume(AudioManager.STREAM_NOTIFICATION, am.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION), 0); 
     Uri defaultRingtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     try { 
      md = new MediaRecorder(); 
      md.setAudioSource(MediaRecorder.AudioSource.MIC); 
      md.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
      md.setOutputFile(recordFile); 
      md.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
      md.prepare(); 
      md.start(); 
     } catch (IllegalStateException | IOException e) { 
      recording = false; 
      removeItem("Unable to record audio, please try again."); // (Show toast) 
      return; 
     } 
     mediaPlayer = new MediaPlayer(); 
     try { 
      mediaPlayer.setDataSource(getActivity(), defaultRingtoneUri); 
      mediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION); 
      mediaPlayer.prepare(); 
      mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
       @Override 
       public void onCompletion(MediaPlayer mp) { 
        md.stop(); 
        md.release(); 
        mediaPlayer.release(); 
        mediaPlayer = null; 
        // get recordfile volume 
       } 
      }); 
      mediaPlayer.start(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      removeItem("Unable to play audio"); 
      sound = false; 
     } 
    } 

Tuy nhiên, tôi không thể tìm hiểu cách phân tích tệp mp3 được tạo và kiểm tra xem tệp đó có trống không (từ âm thanh), có thư viện hay cách khác không?

Tôi hy vọng các bạn hiểu những gì tôi đang cố gắng đạt được vì tiếng Anh của tôi khá tệ, Cảm ơn.

CHỈNH SỬA: (Giải thích thêm) Nếu bạn phát âm thanh (nhạc chuông hoặc thứ gì đó) trong khi ghi âm từ micrô, số decibel được ghi là khoảng 90 decibel. nghĩa là âm thanh phát hoạt động và cả micrô, nhưng nếu decibel ghi lại khoảng 30 nghĩa là chỉ micrô hoạt động và phát âm thanh không, nếu decibel ở khoảng 0 thì micrô không hoạt động.

+0

Trước hết bạn có thể tìm thấy các tập tin được tạo ra? Bạn có thể mở nó bằng một ứng dụng khác với ứng dụng của bạn và xem âm thanh có thực sự được ghi lại không? –

+0

@GeorgeD Tôi muốn làm điều đó trong cùng một ứng dụng, tuy nhiên, làm điều này trong nền trong khi những thứ khác xảy ra là một lựa chọn. Tôi đã thêm một số thông tin về những gì tôi sẵn sàng tìm thấy (ở cuối câu trả lời). cảm ơn. – DAVIDBALAS1

+0

Tôi biết rằng bạn muốn làm điều đó từ cùng một ứng dụng nhưng chỉ để lại điều đó một lúc, hãy thử mở tệp từ một ứng dụng khác tồn tại trên thiết bị của bạn và xem liệu nó có trong thực tế được ghi lại bất kỳ thứ gì không. Cho phép xác minh xem chức năng ghi âm có đang được triển khai chính xác hay không. –

Trả lời

1

Bạn có thể sử dụng trình hiển thị trực quan để hiển thị thời gian thực nếu ghi âm quá thấp hoặc quá to.

Tôi đã xây dựng một dự án trực quan hóa khả năng ghi âm qua biểu đồ thanh. Thanh cao hơn to hơn âm thanh được ghi lại làm giảm thanh thấp decibel.

Dự án này cũng có trình phát inapp cho phép người dùng phát tất cả bản ghi của mình. Trình phát sẵn có cũng trực quan hóa dữ liệu âm thanh phát lại.

Tôi đang đề xuất điều này vì tôi nghĩ đây là những gì bạn đang cố gắng đạt được trong bắt đầu ghi -> phát âm thanh -> dừng ghi -> nhận tệp được ghi âm tối đa.

Thay vì nhận được âm lượng tối đa mỗi lần bạn có thể dựa vào visualiser để theo dõi máy ghi âm nếu tệp ghi âm được ghi lại ở trên các số decibals chấp nhận được.

Bạn có thể tìm mã nguồn trên github

https://github.com/hiteshsahu/Android-Audio-Recorder-Visualization-Master

+0

Vâng, tôi đoán tôi có thể dựa vào điều này. :) cảm ơn. – DAVIDBALAS1

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