2010-02-13 39 views
32

Tôi đang cố gắng tìm ra cách viết ứng dụng có thể giải mã mã morse âm thanh khi đang di chuyển. Tôi tìm thấy this document giải thích cách ghi âm từ micrô trong Android. Những gì tôi muốn biết là liệu có thể truy cập vào đầu vào thô từ micrô hoặc liệu nó có phải được ghi/đọc vào một tệp hay không.Xử lý âm thanh theo thời gian thực trong Android

Cảm ơn.

+0

Bạn đã từng làm dự án này Paul chưa? Tôi đang nhìn vào một cái gì đó tương tự như một dự án "homer" và quan tâm đến việc xử lý âm thanh đến on-the-fly cũng .... có thể cần phải sử dụng một thư viện bản địa để có được hiệu suất đủ? thả cho tôi một email nếu bạn muốn tại andrew tại mackenzie-serres.net. Cảm ơn! –

Trả lời

22

Nếu bạn sử dụng MediaRecorder (ví dụ ở trên), nó sẽ lưu âm thanh nén vào tệp.

Nếu bạn sử dụng AudioRecord, bạn có thể nhận mẫu âm thanh trực tiếp.

Có, những gì bạn muốn làm là có thể.

-2

Dường như nó phải được bán trước tệp.

Nếu bạn nhìn trộm android.media.AudioRecord source, bộ đệm byte dữ liệu âm thanh gốc không được hiển thị với API công khai.

Theo kinh nghiệm của tôi, đã xây dựng bộ tổng hợp âm thanh cho Android, thật khó để đạt được hiệu suất thời gian thực và duy trì độ trung thực âm thanh. Tuy nhiên, một phiên dịch viên Morse Code chắc chắn có thể làm được, và nghe như một dự án nhỏ vui vẻ. Chúc may mắn!

+0

Tại sao bạn nghĩ bộ đệm âm thanh không được chuyển tới Java? Còn phương thức read() thì sao? – dmazzoni

+0

-1 Bạn chắc chắn không phải đổ vào một tập tin trước. –

6

Sử dụng AudioRecord quá mức cần thiết. Chỉ cần kiểm tra MediaRecorder.getMaxAmplitude() sau mỗi 1000 mili giây cho tiếng ồn lớn so với im lặng.

Nếu bạn thực sự cần phân tích dạng sóng, thì có bạn cần có AudioRecord. Lấy dữ liệu thô và tính toán một cái gì đó giống như ý nghĩa gốc bình phương của một phần của byte nguyên bạn quan tâm để có được một cảm giác về khối lượng.

Nhưng, tại sao tất cả điều đó khi MediaRecorder.getMaxAmplitude() dễ sử dụng hơn nhiều.

thấy mã của tôi từ câu trả lời này: this question

+0

1000 ms = 1 s, dường như không đủ để phân tích cú pháp mã Morse. – StockB

+2

Nhưng bạn không thể sử dụng getMaxAmplitude() (bạn có thể, nhưng bạn sẽ luôn nhận được 0) trừ khi bạn thực sự bắt đầu ghi. Vì vậy, bạn sẽ vẫn phải ghi lại một tập tin, có thể phát triển vô cùng lớn. Chắc chắn không phải là một giải pháp. – matteo

5

có một khuôn khổ cảm biến từ các phòng thí nghiệm MIT phương tiện truyền thông gọi là funf: http://code.google.com/p/funf-open-sensing-framework/
Họ đã học được tạo ra cho đầu vào âm thanh và một số phân tích (FFT và các loại tương tự), cũng tiết kiệm cho các tệp hoặc tải lên được triển khai theo như tôi đã thấy và chúng xử lý hầu hết các cảm biến có sẵn trên điện thoại. Bạn cũng có thể lấy cảm hứng từ mã họ đã viết, mà tôi nghĩ là khá tốt.

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