2013-10-25 128 views
1

我嘗試在我的android應用程序中創建一個尖叫和哨子檢測器。現在我可以通過使用musicg android庫here來檢測用戶的哨聲。我必須自己實施尖叫探測器,因爲沒有可用的庫。音頻數據字節的含義是什麼? Android

在musicg中,它讀取音頻數據並將其存儲在字節緩衝區中。它使用緩衝區作爲其哨子檢測器的輸入。我試圖通過在LogCat中打印這些字節來了解和了解這些字節的樣子。但是,我不知道它們是什麼以及音樂庫如何使用此輸入來檢測用戶何時吹哨。

音頻數據字節看起來像這樣。我用緩衝[1] +「」打印他們

10-25 23:43:54.412: E/1115(7542): 71 
10-25 23:43:54.412: E/1116(7542): 22 
10-25 23:43:54.412: E/1117(7542): 58 
10-25 23:43:54.412: E/1118(7542): -14 
10-25 23:43:54.412: E/1119(7542): 36 
10-25 23:43:54.412: E/1120(7542): 88 
10-25 23:43:54.412: E/1121(7542): 8 
10-25 23:43:54.413: E/1122(7542): -98 
10-25 23:43:54.413: E/1123(7542): -24 
10-25 23:43:54.413: E/1124(7542): 66 
10-25 23:43:54.413: E/1125(7542): -51 
10-25 23:43:54.413: E/1126(7542): 111 
10-25 23:43:54.413: E/1127(7542): -67 
10-25 23:43:54.413: E/1128(7542): 43 
10-25 23:43:54.413: E/1129(7542): -68 
10-25 23:43:54.413: E/1130(7542): 36 
10-25 23:43:54.415: E/1131(7542): -58 
10-25 23:43:54.415: E/1132(7542): -85 
10-25 23:43:54.415: E/1133(7542): -46 
10-25 23:43:54.415: E/1134(7542): 78 
10-25 23:43:54.415: E/1135(7542): -40 

那麼,誰能告訴我該如何輸入可用於檢測用戶的哨子。

請給我一些想法

謝謝

+0

這些是原始的聲音級別。 – njzk2

+0

那麼,正數和負數的含義是什麼? @ njzk2 – user2503808

+0

負數是因爲字節被認爲是在java中籤名的。 – njzk2

回答

3

的字節流是PCM音頻。陣列中的每個字節是聲音在任何特定時刻的響亮程度。音頻處理通常以塊爲單位完成。例如,在您使用的lirbary中,WaveTypeDetector類正在遍歷字節塊,並對每個塊執行FFT以確定間距。

音頻中的單個瞬間並不會告訴您有關聲音頻率(音高)的任何信息。爲了對聲音進行有用的分析,需要像這個數組這樣的音頻塊。

FFT爲由字節數組表示的時間塊輸出聲級對頻率的函數。例如,這可以用來檢測聲音中哪些音高最響。

當對一系列聲音重複執行該方法時,庫可以比較音高隨時間變化的變化,以確定播放哪種聲音(吹哨或鼓掌),基於已知的音調模式這些類型的聲音。

此庫正在對一系列聲音進行分析。對於每個組塊,它確定聲音是否符合一定的標準(例如,它是否在一定的頻率範圍內以及某個強度範圍內)。然後它重複這個過程,將聲音文件的整個長度重複,並將WhistleApi類的布爾響應分配爲輸出整個聲音文件作爲整體聲音的概率。

要創建尖叫檢測,我認爲您需要擴展DetectionApi類以創建ScreamApi類,並以WhistleApi類爲例。那麼你將不得不拿出你自己的標準值來取代WhistleApi使用的標準值。

要想出你自己的尖叫標準,你可以做幾十個你認爲應該可以接受的不同類型尖叫的錄音。我會剪掉文件的開頭和結尾,因此它們沒有沉默。然後臨時修改DetectionApi類以記錄它爲每個這些條件讀取的最大值和最小值。您將爲每個文件獲得很長的一系列值,因此您可以將它們放入Excel以獲得平均值和標準偏差。對於每個標準,我會使用類似於該標準的最小值和最大值的平均值+/- 3標準偏差。比較所有聲音文件中的這些值以調整它們,可能會丟棄異常文件。

+0

順便提一下,該庫中的FFT類是GPL許可的,因此儘管musicg的作者沒有在其上發佈許可證,但它合法地應該具有GPL許可證,這意味着你的應用也應該有GPL許可證。但是如果需要的話,你可能會找到一個限制較少的FFT庫類來替換該庫的那部分。 – Tenfour04

+0

非常感謝@ Tenfour04。你的文章真的很有幫助!你可以給我一些關於你在哪裏學習音樂庫的所有信息的鏈接。我找不到任何有關musicg庫的每個包和類別的文檔。所以,我甚至無法猜測如何使用這些軟件包 – user2503808

+0

如何訪問此庫中的代碼?你可以嗎?我無法訪問DetectionAPI中的代碼。它提供了isSpecificSound方法並接收byte []作爲輸入。但是,如果我無法訪問代碼,如何設置我自己的標準? – user2503808