我們看直播的時候,經常會在直播過程中聽到有掌聲、口哨聲、背景音樂等音效,那么這些聲音特效是如何實現的呢大家有沒有想過?anyRTC下面就為大家簡單介紹一下如何實現在直播過程中播放音頻文件。
在通話或者直播的過程中,除了用戶端自己說話的聲音之外,有時候還需要播放一些特定的音頻文件或者背景音樂讓頻道內的其他用戶也可以聽到。比如說給游戲添加音效,或者在直播的時候播放一些背景音樂等。為此anyRTC提供了以下兩種方法滿足用戶播放音效和其他音頻文件的需求。
音效就是指由聲音所制造的效果,是指為增進一場面之真實感、氣氛或戲劇訊息,而加于聲帶上的雜音或聲音。所謂的聲音則包括了樂音和效果音。包括數字音效、環境音效、MP3音效(普通音效、專業音效)。簡單來說音效就是持續很短時間的音頻。播放音效文件方法主要用來播放短小的氛圍音,比如鼓掌、刀劍等武器之間的撞擊聲音等,可以多個音效疊加播放,且音效文件可以預加載以提高性能。anyRTC SDK 提供 IAudioEffectManager 類統一管理音效,包含一些管理音效的常用方法。 音效由音頻文件路徑指定,但在 IAudioEffectManager 內部使用 sound id 來識別和處理音效。音效文件通常保存在 assets 文件夾下;SDK 并不強制如何定義 sound id,保證每個音效有唯一的識別即可。一般的做法有自增 id,使用音效文件名的 hashCode 等。
參考如下步驟,在你的項目中實現播放音效文件:
1、在加入頻道前調用 getAudioEffectManager 方法獲取音效管理類 IAudioEffectManager。
2、調用 preloadEffect 方法預加載音效文件,可以多次調用該方法加載多個音效文件。
3、加入頻道后調用 playEffect 方法播放音效文件,可以多次調用該方法同時播放多個音效。我們建議最多同時播放三個音效文件。
管理音效的方法需通過 IAudioEffectManager 接口類調用。
示例代碼
// 首先獲取全局的音效管理類
IAudioEffectManager manager=rtcEngine.getAudioEffectManager();
// 預加載音效(推薦),需注意音效文件的大小,并在加入頻道前完成加載
// 僅支持 mp3,aac,m4a,3gp,wav格式
// 開發者可能需要額外記錄 id 與文件路徑的關聯關系,用來播放和停止音效
int id=0;
manager.preloadEffect(id++, "path/to/effect1");
// 可以加載多個音效
manager.preloadEffect(id++, "path/to/effect2");
// 播放一個音效
manager.playEffect(
0, // 要播放的音效 id
"path/to/effect1", // 播放文件的路徑
-1, // 播放次數,-1 代表無限循環
0.0, // 改變音效的空間位置,0表示正前方
100, // 音量,取值 0 ~ 100, 100 代表原始音量
true // 是否令遠端也能聽到音效的聲音
);
// 暫停所有音效播放
manager.pauseAllEffects();
// 獲取音效的音量,范圍為 0 ~ 100
double volume=manager.getEffectsVolume();
// 保證音效音量在原始音量的 80% 以上
volume=volume < 80 ? 80 : volume;
manager.setEffectsVolume(volume);
// 繼續播放暫停的音效
manager.resumeAllEffects();
// 停止所有音效
manager.stopAllEffects();
// 釋放預加載的音效
manager.unloadAllEffects();
注意事項
1、預加載不是一個必須的步驟,一般來說為了提高性能或者需要反復播放某個特定的音效的時候,我們建議使用預加載。但如果音效文件比較大,不建議預加載。
2、以上方法都有返回值,返回值小于 0 表示方法調用失敗。
混音是音樂制作中的一個步驟,是把多種來源的聲音,整合至一個立體音軌或單音音軌中。這些混合聲音信號,來源可能分別來自不同的樂器、人聲或管弦樂,收錄自現場演奏或錄音室內。在混音的過程中,混音師會將每一個原始信號的頻率、動態、音質、定位、殘響和聲場單獨進行調整,讓各音軌最佳化,之后再疊加于最終成品上。這種處理方式,能制作出一般聽眾在現場錄音時不能聽到之層次分明的完美效果。
在音視頻通話直播場景下,混音是指播放本地或者在線音樂文件,同時讓頻道內的其他人聽到此音樂。混音方法主要用來播放比較長的背景音,比如直播的時候播放的音樂,同時只可以有一個文件播放。如果在混音播放第一個文件的過程中播放第二個文件,會自動停止第一個文件的播放。
anyRTC混音功能如下:
示例代碼
// 混音設置
int loopCount=-1; //無限循環播放混音文件;設置為正整數表示混音文件播放的次數
boolean loopback=false; 文件音頻流是否發送給對端;如果設置為 true,文件音頻流僅在本地可以聽見,不會發送到對端
boolean cycle=false; //不替換麥克風采集的音頻
// 開始播放混音
rtcEngine.startAudioMixing("path/to/music", loopback, replace, cycle);
// 將本地和遠端音樂文件播放音量調節為原始音量的 50%
int volume=50;
rtcEngine.adjustAudioMixingVolume(volume);
// 將本地人聲的音調設為 1.5
double pitch=1.5;
rtcEngine.setLocalVoicePitch(pitch);
// 將本地音樂文件的音調升 10 個半音。
int pitch=10;
rtcEngine.setAudioMixingPitch(pitch);
// 獲取當前播放的混音音樂的時長
int duration=rtcEngine.getAudioMixingDuration();
// duration 可以用來設置播放進度條的最大進度等
// seekBar.setMax(duration);
// 獲取當前混音的播放進度
int currentPosition=rtcEngine.getAudioMixingCurrentPosition();
// 可以設置 timer 定時獲取播放進度,用來顯示播放進度
// seekBar.setProgress(currentPosition);
// 若用戶拖動了進度條,可以在 seekBar 的回調中獲取 progress 并重設音樂當前播放的位置
rtcEngine.setAudioMixingPosition(progress);
// 暫停、恢復混音文件播放
rtcEngine.pauseAudioMixing();
rtcEngine.resumeAudioMixing();
// 停止播放混音文件,麥克風采集播放恢復
rtcEngine.stopAudioMixing();
在娛樂行業高速發展的今天,視頻通話、直播等行業已經發展的相對完善。如何讓用戶能有更好的體驗,更深層次的感受是值得我們思考的。像播放音頻文件這種小小的功能看似不起眼實際上對于直播場景來說是非常重要的,因為他可以讓用戶更能感受到直播的氛圍,主播也能更好的展現節目效果。適當的播放一些音效和背景音樂可以讓用戶有一種身臨其境的感覺,極大的提升用戶的體驗感。同樣的在線上教育行業下,老師在與學生上課的時候,特別是和小朋友上課的時候,適當的掌聲、喝彩聲等音效可以讓小朋友更能專注在課堂上保證課程效果。
小米9搭載全新設計的音頻子系統,無論是音量或者音質,都有著巨大提升。硬件方面,小米9采用目前最大的超線性單元揚聲器及高電壓Smart PA,實現小米手機迄今為止最大的外放響度。搭配Bass材料的等效0.9cc大體積后腔設計,讓小米9外放聲音低頻渾厚而飽滿。軟件算法上,新增的Mi Sound自研音效針對視頻、游戲等應用音頻需要進行了深度優化調校,低延遲耳返算法讓小米9在使用K歌App時體驗更佳。
超高電壓Smart PA 響度大幅提升
在Android系統中,音頻系統的架構大致如下:
可見,模擬輸出后、信號進入揚聲器前經過的運放(運算放大器,簡稱運放或功放,即PA)和音頻響度關系最大。小米9采用超高電壓Smart PA搭配獨立散熱,主要原理是針對揚聲器的性能參數智能預測工作狀態,通過算法動態調整輸出并驅動揚聲器,確保揚聲器長時間內工作在最大的平均功率下,從而實現更佳的音質以及響度。
以下是小米9和小米8等手機同時播放《小蘋果》的實時響度立體對比圖,顏色越紅聲音越大,可以看到小米9的外放音量明顯優于其他產品,更有震撼力。
<script src="https://lf6-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>
和小米MIX 3相同,小米9也具有大音量模式,在接聽電話時如果音量已經滿格依然感覺聽不清,可以通過再向上按一次音量鍵啟動超級聽筒音量模式,音量繼續提升2dB左右,保證使用者即使處于極度嘈雜的環境如早晚高峰地鐵中,也能聽清來電內容。
業內最大超線性揚聲器 等效0.9cc大音腔
在揚聲器本體上,小米9采用目前業內最大的1217 SLS超線性揚聲器單元。非超線性的普通揚聲器在振動幅度過大時,由于振膜振動不均衡,會產生偏振影響音量和音質。超線性揚聲器則具備定心支片結構,能夠推動振膜達到比普通單元更大的振動幅度,同時避免振膜偏振,從而使得音量音質更好。
而在揚聲器的音腔上,小米9利用Bass材料,使得音腔等效體積達到超大0.9cc,讓外放聲音低頻部分渾厚而飽滿,從而擁有更好的聽感。
Mi Sound自研音效 低延遲耳返算法
在軟件部分,小米9還引入了Mi Sound自研音效,針對用戶最常使用的視頻、游戲等音頻需要進行了針對性深度優化調校。調音工程師還使用專業音樂制作和混音的音頻工作站軟件進行了數月上百次實時調音,并通過類似專業錄音棚的混音和總線處理,使得手機外放音樂表現更加清晰自然。
小米9在使用全民K歌及唱吧App時還可智能開啟低延遲耳返算法,通過創造全新的音頻反饋路徑,繞過App的Ringbus緩沖區,小米9大幅減少了Android系統接收人聲再輸出混響的音頻延遲,使用手機K歌時體驗更上一層樓。