2011-01-23 31 views
20

Tôi đang cố sử dụng lớp AudioRecord để ghi tệp WAV. Vấn đề là nó chỉ cung cấp dữ liệu PCM thô, và nếu tôi ghi nó vào một tập tin, không có thông tin tiêu đề, vì vậy nó sẽ không phát trong bất kỳ trình phát media nào. Làm thế nào tôi có thể tạo một tập tin WAV từ dữ liệu thô này?Tạo tệp WAV từ dữ liệu PCM thô bằng SDK Android

Hoặc cách khác, có cách nào khác để ghi lại âm thanh trong Android vào một tệp WAV (hoặc, thay vào đó là MP3) không?

Ồ, và tôi biết rằng MediaRecorder không thể được sử dụng vì nó không hỗ trợ định dạng WAV hoặc MP3.

+0

Oh ... Tôi đã cố gắng đọc dữ liệu PCM thô trong Android ... bạn có thể vui lòng đăng mã bạn đang sử dụng không? – Atmocreations

Trả lời

13

OK, tôi đã tìm ra điều này. Bài viết này rất quan trọng trong việc giúp tôi: http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java

Về cơ bản, tôi đã sử dụng ByteArrayOutputStream để ghi dữ liệu PCM thô từ AudioRecord, sau đó cho phép tôi nhận mảng byte và kích thước của nó khi quá trình được thực hiện. Sau đó tôi có thể sử dụng dữ liệu đó cùng với các cài đặt SampleRate, BitRate và Stereo/Mono để tạo tiêu đề WAV theo liên kết ở trên. Các tập tin kết quả hoạt động hoàn hảo!

+1

bạn có thể hiển thị mã mẫu về cách bạn đạt được điều này không. Tôi có một yêu cầu tương tự –

+1

Bạn có thể cho tôi biết một số ý tưởng về cách bạn đã sử dụng tệp wavIo trong mã của mình không? Có 2 phương pháp chính, đọc và lưu. Tôi đang ghi âm trong Android bằng cách sử dụng lớp AudioRecord. Và tôi đang viết byte dữ liệu theo byte .. Bạn có thể vui lòng trợ giúp vì âm thanh của tôi không được ghi lại đúng cách. – Scorpion

+4

liên kết của bạn đã hết hạn .. vui lòng cung cấp một số đoạn mã hoặc liên kết ... – WonderSoftwares

0

Kiểm tra MediaRecorder.setOutputFormat(), bạn có thể đặt các định dạng vùng chứa khác nhau cho bản ghi của mình; có MediaRecorder.OutputFormat.MPEG_4 và MediaRecorder.OutputFormat.THREE_GPP; chỉ cho phép định dạng dọc theo RAW là setAudioEncoder (MediaRecorder.AudioEncoder.AMR_NB);

Xin lỗi nhưng MP3 không có sẵn. Bạn thực sự cần mp3 để ghi âm? WAV đối diện với MP3 là vùng chứa, không phải là định dạng ; WAV có thể là bất kỳ loại định dạng mã hóa nào.

Bạn luôn có quyền thêm một số tiêu đề WAV RIFF trước dữ liệu pcm thô của mình (miễn là bạn biết chính xác định dạng). Kiểm tra ở đây để biết nó trông như thế nào: http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

+0

Tôi chắc chắn cần tệp đầu ra là tệp WAV (mã hóa PCM) hoặc MP3. Dịch vụ mà nó đang được tải lên để yêu cầu điều này. Vì vậy, theo như tôi thấy, tôi không thể sử dụng MediaRecorder. Tôi cũng là – user496854

+0

Tôi chắc chắn cần tệp đầu ra là tệp WAV (mã hóa PCM) hoặc MP3. Dịch vụ mà nó đang được tải lên để yêu cầu điều này. Vì vậy, theo như tôi thấy, tôi không thể sử dụng MediaRecorder. Tôi cũng khá tệ ở tất cả các công cụ cấp thấp, vì vậy tôi không biết làm thế nào tốt tôi sẽ được tạo ra các heade bản thân mình. Không có gói java có khả năng này? – user496854

+0

Tôi thực sự tìm thấy điều này: http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java, điều này giúp việc này trở nên dễ dàng hơn nhiều. Nhưng tôi không chắc chắn làm thế nào để có được kích thước của datat chunk cho byte 40. Tôi đã viết dữ liệu PCM thô vào một tập tin, do đó, nó sẽ chỉ là kích thước của tập tin đó? – user496854

-2

Bạn có thể muốn sử dụng lớp mediarecord

+3

Tại sao? nó không hỗ trợ đầu ra WAV hoặc MP3 – user496854