2010-02-13 144 views
32

我想弄清楚如何編寫一個應用程序,可以在飛行中解碼音頻莫爾斯電碼。我找到this document,它解釋瞭如何在Android中錄製麥克風的音頻。我想知道的是,是否可以從麥克風訪問原始輸入或是否必須將其寫入/讀取到文件中。在Android中的實時音頻處理

謝謝。

+0

你有沒有做過這個項目保羅?我正在尋找類似於「本壘打」項目的東西,並且對即將處理傳入音頻感興趣......也許需要使用本機庫才能獲得足夠的性能?如果你想在andrew at mackenzie-serres.net上給我發電子郵件。謝謝! – 2011-06-17 07:46:02

回答

22

如果您使用MediaRecorder(上面的示例),它會將壓縮音頻保存爲文件。

如果您使用AudioRecord,則可以直接獲取音頻樣本。

是的,你想要做什麼應該是可能的。

-2

看起來它必須首先轉儲到一個文件。

如果您查看android.media.AudioRecord source, 本機音頻數據字節緩衝區不公開給公共API。

根據我的經驗,爲Android構建了音頻合成器後,很難實現實時性能並保持音頻保真度。莫爾斯電碼「翻譯」當然是可行的,聽起來像一個有趣的小項目。祝你好運!

+0

你爲什麼認爲音頻緩衝區沒有傳遞給Java? read()方法呢? – dmazzoni 2010-02-14 06:25:46

+0

-1您絕對不必先轉儲到文件。 – 2011-03-24 00:01:11

6

使用AudioRecord是矯枉過正。只需每隔1000毫秒檢查一次MediaRecorder.getMaxAmplitude()以獲取響亮的噪音與沉默。

如果您確實需要分析波形,那麼您需要AudioRecord。獲取原始數據並計算出與您所關心的原始字節部分的均方根相似的數值,以便了解音量。

但是,爲什麼MediaRecorder.getMaxAmplitude()更容易使用。

看到我的代碼這樣的回答:this question

+0

1000 ms = 1 s,這似乎不足以解析摩爾斯電碼。 – StockB 2013-11-08 22:17:41

+2

但是,除非實際開始錄製,否則不能使用getMaxAmplitude()(你可以,但總是得到0)。所以你仍然需要記錄一個文件,這個文件可能會變得無限大。絕對不是解決方案。 – matteo 2014-08-11 16:06:35

5

有來自麻省理工學院媒體實驗室的檢測框架調用funf:http://code.google.com/p/funf-open-sensing-framework/
他們已經爲音頻輸入和一些分析(FFT等)創建的類,還節約到文件或上傳被實施,據我所見,他們處理手機上提供的大部分傳感器。 您也可以從他們編寫的代碼中獲得靈感,我認爲這很好。