當前位置:首頁 » 安卓系統 » pcmandroid

pcmandroid

發布時間: 2023-04-14 10:00:12

1. Android 多媒體音頻開發中怎麼將PCM轉成ADPCM

Adensoft Audio MP3 Converter

Adensoft.Audio.MP3.Converter是一款強大的音頻轉換工具,能將當前主流的音頻格式如WAV PCM, WAV ,GSM, ADPCM, DSP ,MP2,WMA ( win Media Audio ),Ogg Vorbis,VOX ( Dialogic ADPCM ),RAW ( PCM, A-LAW, U-LAW ),MPC (MusicPack),AVI (audio track),G.721,G.723,G.726,AIFF ,AU (UNIX audio format)無損的轉換成mp3(支持批量轉換)。軟體同時提供良好的人機界面和完整的tag編輯功能。

2. 安卓手機上pcm格式的文件有什麼用,能不能刪除占的空間很大。

可以刪除。

PCM文件具有流媒體特性,是數字通信的編碼方式之一,刪除後不會影響系統運行。

PCM文件被廣泛用哪猜於素材保存及音樂欣賞,CD、DVD以及我們常見的 WAV文件中均有應用,PCM文件能夠一邊讀一邊播放,而不需要把這個文件全舉毀部讀出後然後回放,這樣就可以做到不用下載 就可以實現收聽了。也可以做到一邊編碼一邊播放。

(2)pcmandroid擴展閱讀

PCM中文稱脈沖編碼調制(Pulse Code Molation),是70年代末發展起來的,記錄媒體之一的CD,在80年代初由飛利浦和索尼公司共同推出。

脈碼調制的音頻格式也被DVD-A所採用,它支持立體聲和5.1環繞聲,1999年由DVD討論會發布和推出的。脈沖編碼調制的比特率,從14-bit發展到16-bit、18-bit、20-bit直到24-bit;采樣頻率從44.1kHz發展到192kHz。

3. Android音視頻【十二】使用OpenSLES和AudioTrack進行播放PCM

本節我們學習下如何播放pcm數據,在Android中有兩種方法:一種是使用java層的 AudioTrack 方法,一種是使用底層的 OpenSLES 直接在 jni 層調用系統的 OpenSLES的c方法 實現。

兩種使用場景不一樣:
AudioTrack 一般用於 比如本地播放一個pcm文件/流,又或者播放解碼後的音頻的pcm流,API較簡單。
OpenSLES 一般用於一些播放器中開發中,比如音頻/視頻播放器,聲音/音頻的播放採用的OpenSLES,一是播放器一般是c/c++實現,便於直接在c層調用OpenSLES的API,二也是如果用AudioTrack進行播放,務必會帶來java和jni層的反射調用的開銷,API較復雜。

可以根據業務自行決定來進行選擇。

AudioTrack的方式使用較簡單,直接在java層。

指定采樣率,采樣位數,聲道數進行創建。

其中44100是采樣率, AudioFormat.CHANNEL_OUT_STEREO 為雙聲道,還有 CHANNEL_OUT_MONO 單聲道。 AudioFormat.ENCODING_PCM_16BIT 為采樣位數16位,還有 ENCODING_PCM_8BIT 8位。 minBufferSize 是播放器緩沖的大小,也是根據采樣率和采樣位數,聲道數 進行獲取,只有滿足最小的buffer才去操作底層進程播放。

最後一個參數mode。可以指定的值有 AudioTrack.MODE_STREAM 和 AudioTrack.MODE_STATIC 。

MODE_STREAM 適用於大多數的場景,比如動態的處理audio buffer,或者播放很長的音頻文件,它是將audio buffers從java層傳遞到native層。音頻播放時音頻數據從Java流式傳輸到native層的創建模式。

MODE_STATIC 適用場景,比如播放很短的音頻,它是一次性將全部的音頻資源從java傳遞到native層。音頻數據在音頻開始播放前僅從Java傳輸到native層的創建模式。

是的,就這么一個方法。注意此方法是同步方法,是個耗時方法,一般是開啟一個線程循環調用 write 方法進行寫入。
注意在調用 write 方法前需要調用 audioTrack.play() 方法開始播放。

因為是pcm裸數據,無法像mediaplayer一樣提供了API。所以需要自己處理下。可以利用 getPlaybackHeadPosition 方法。

getPlaybackHeadPosition() 的意思是返回以幀為單位表示的播放頭位置
getPlaybackRate() 的意思是返回以Hz為單位返回當前播放采樣率。

所以當前播放時間可以通過如下方式獲取

OpenSLES:(Open Sound Library for Embedded Systems).
OpenSLES是跨平台是針對嵌入式系統精心優化的硬體音頻加速API。使用OpenSLES進行音頻播放的好處是可以不依賴第三方。比如一些音頻或者視頻播放器中都是用OpenSLES進行播放解碼後的pcm的,這樣免去了和java層的交互。

在Android中使用OpenSLES首先需要把Android 系統提供的so鏈接到外面自己的so。在CMakeLists.txt腳本中添加鏈接庫OpenSLES。庫的名字可以在 類似如下目錄中

需要去掉lib

然後導入頭文件即可使用了OpenSLES提供的底層方法了。

創建&使用的步驟大致分為:

一個 SLObjectItf 裡面可能包含了多個Interface,獲取Interface通過 GetInterface 方法,而 GetInterface 方法的地2個參數 SLInterfaceID 參數來指定到的需要獲取Object裡面的那個Interface。比如通過指定 SL_IID_ENGINE 的類型來獲取 SLEngineItf 。我們可以通過 SLEngineItf 去創建各種Object,例如播放器、錄音器、混音器的Object,然後在用這些Object去獲取各種Interface去實現各種功能。

如上所說,SLEngineItf可以創建混音器的Object。

在創建播放器前需要創建音頻的配置信息(比如采樣率,聲道數,每個采樣的位數等)

開始播放後會不斷的回調這個 pcmBufferCallBack 函數將音頻數據壓入隊列
(*pcmBufferQueue)->RegisterCallback(pcmBufferQueue, pcmBufferCallBack, this);

如果想要暫停播放參數直接設置為SL_PLAYSTATE_PAUSED,若暫停後繼續播放設置參數為SL_PLAYSTATE_PLAYING即可。若想要停止播放參數設置為SL_PLAYSTATE_STOPPED即可。

首先獲取播放器的用於控制音量的介面SLVolumeItf pcmVolumePlay

然後動態設置

首先也是獲取播放器的用於控制音量的介面SLMuteSoloItf pcmMutePlay

然後動態設置

看起來控制還是蠻簡單的哈。先熟悉這么多,OpenSLES還是蠻強大的。

https://github.com/ta893115871/PCMPlay

4. android 錄音pcm源碼怎樣加入降噪函數

1.PCM 編碼實現(M函數) function code=PCMcoding(Range,S) code=zeros(1,8); Normalization=abs(S)/Range; deta=1/2048; if sign(S)==1 code(1)=1; else code(1)=0; end detas=ceil(Normalization/deta); if detas>128 code(2)=1; if detas>51

5. android能播放pcm文件嗎

原生系統應該不行,但畢竟是開源系統,你可以下載支持這個文件的播放器

6. 安卓手機如何打開.pcm文件

01
安卓手機不能打開.pcm文件,只能在電腦上打開,首先用app把視頻文件下下來,然後在手機上找到那個app的文件夾,把下載的pcm格式導出到電腦上,然後在電腦上下一個pcm格式批量提取器,就可以實現把網校的課程下載到電腦上用常用的視頻格式給打開了。

脈沖編碼調制是理論上簡單,應用上成熟的技術,廣泛應用於通信、計算機、數字儀表、遙控遙測等領域。隨著通信技術、電子技術和計算機技術的不斷發展進步,在應用中的PCM的實現方法也經歷了不斷發展的過程,由最初通過模擬電路實現,數字電路實現,集成電路實現,軟硬體結合實現,到採用單片機來實皮蔽現。

7. Android音視頻系列(七):PCM音頻單聲道與雙聲道的相互轉換

上一篇我們已經學習了PCM音頻的保存格式,這一篇我們通過掌握的知識,完成PCM音頻的單聲道和雙聲道的互相轉換。

首先我們把上一篇的最核心部分貼出來:

我們首先完成單聲道轉雙聲道的操作。

單聲道轉雙聲道的基本原理:

首先我錄制了一個音頻保存到ArrayList中:

錄制的是16位的數據,所以我們每一個采樣的數據會占據兩位,所以在拷貝的過程中,我們也要每兩位拷貝一次:

單聲道轉聲道的操作就完成了。

雙聲道轉單聲道的原理:

我們可以按照單聲道雙聲道的做法,每四位取前兩位或後兩位的數據即可。但是這里我們換一種做法。

這里我們使用了ByteBuffer幫助我們把Byte轉成Short。其中有一個很重要的坑,就是設置Byte轉Short的規則:

所以我們一定要確保高低位的順序,否則得到的Short一定是錯的,經過測試,錄制的音頻是低位在前,所以我們修改ByteBuffer默認的高位在前的配置:

相同的原理,我們需要Byte轉Int都可以藉助對應的Buffer進行讀取,非常的方便。

基本流程和第一種方法一樣,如果是你用的Java,你還可以通過位運算進行Short和Byte的轉換,但是kotlin的對應的運算符卻無法正確轉換,具體原因還不清楚,這也是為什麼我使用了Buffer進行轉換的原因。

只要我們掌握了PCM的保存格式,單聲道和雙聲道的互相轉換還是非常輕松的,下一篇我們來了解一下新的音頻格式:WAV。

8. Android音視頻系列(六):PCM音頻的存儲格式

我們已經了解了如何使用AudioRecord錄制pcm音頻,所以我們要了解pcm數據的存儲格式,才能對其進行鏈者轉換。

首先看一下圖片:

以上圖為例,在初始化AudioRecord的時候可以設置錄制的格式:

其中最常用的是ENCODING_PCM_16BIT,在網上查看一下很多的資料,ENCODING_PCM_8BIT已經處於半廢棄狀態,隨著科技的櫻豎進步,就連小孩子的玩具播放的音頻都是16位的。

另外一個參數是聲道數:

雙聲道會以LRLRLR的格式保存左右聲道的內容,組合成一個完成的樣本。

從上圖我們可以總結:8個比特的位置,8位單聲道可以存儲8個樣本,8位雙聲道能存儲個樣本,16位雙聲道能存儲4個,16位雙聲道只能存儲2個。

今天的內容非常的簡單,主要是為了下一篇做准備,下一篇我們會實際操作:pcm單聲道和雙聲道的轉換。脊喚大

9. android直接播放pcm語音為什麼會有噪音

最近在做手機客戶端用G726編碼庫向機台發送語音消息的DEMO,弄了一周左右才解決.

中間碰到的問題賊多,主要是用AudioRecord採集聲音的時候,然後用AudioTrack播放經常會出現噪音,這樣的情況讓人實在是無法接受。

後來查谷歌實在是沒折了,於是再次翻查了下sipdroid的代碼,發現sipdroid在採集聲音後,每次都會調用一個函數,於是我猜測,這個函數應該跟去除噪音有關,於是寫了個DEMO,測試了一下,發現噪音還真消除了.

噪音消除演算法:

void calc1(short[] lin,int off,int len) {
int i,j;
for (i = 0; i < len; i++) {
j = lin[i+off];
lin[i+off] = (short)(j>>2);
}
}

自己錄制PCM,播放PCM的DEMO。

10. android中怎麼對音頻數據pcm進行解碼

工程代碼結構較為簡單:

簡單說下思路,先把PCM音頻數據從指定的路徑文件讀到內存,然後給AudioPlayer設置數據源,音頻參數等,最後執行播放,暫停,停止等操作

貼上部分類代碼片段:

publicclassAudioParam{

intmFrequency;//采樣率

intmChannel;//聲道

intmSampBit;//采樣精度

}

publicinterfacePlayState{

publicstaticfinalintMPS_UNINIT=0;//未就緒

publicstaticfinalintMPS_PREPARE=1;//准備就緒(停止)

publicstaticfinalintMPS_PLAYING=2;//播放中

publicstaticfinalintMPS_PAUSE=3;//暫停

}

熱點內容
安卓usb在設置哪裡 發布:2024-05-20 05:03:03 瀏覽:185
綏化編程 發布:2024-05-20 04:59:44 瀏覽:989
基本原理和從頭計演算法 發布:2024-05-20 04:50:32 瀏覽:28
配置情況指的是什麼 發布:2024-05-20 04:48:14 瀏覽:495
那個程序用來編譯源文件 發布:2024-05-20 04:46:45 瀏覽:549
小程序需要資料庫嗎 發布:2024-05-20 04:35:14 瀏覽:337
鏈接sqlserver 發布:2024-05-20 04:27:53 瀏覽:209
ftp文件伺服器擴容 發布:2024-05-20 04:22:21 瀏覽:646
linux心跳包 發布:2024-05-20 04:17:52 瀏覽:970
android打開資料庫文件 發布:2024-05-20 04:16:07 瀏覽:572