顯示具有 audio 標籤的文章。 顯示所有文章
顯示具有 audio 標籤的文章。 顯示所有文章

2018年4月28日 星期六

Audio 開發參考資料

本篇整理開發Audio應用時的一些參考資料。

Digital Audio 原理
数码音频系统是通过将声波波形转换成一连串的二进制数据来再现原始声音的,实现这个步骤使用的设备是模/数转换器(A/D)它以每秒上万次的速率对声波进行采样,每一次采样都记录下了原始模拟声波在某一时刻的状态,称之为样本。将一串的样本连接起来,就可以描述一段声波了,把每一秒钟所采样的数目称为采样频率或采率,单位为HZ(赫兹)。
貝(dB)是十分之一貝爾(B):1B = 10dB。1貝爾的兩個功率量的比值是10:1,1貝爾的兩個場量的比值是。功率之比是10,則其分貝數湊巧也是10。功率之比是2,則約為3分貝,更精確地說是103/10或1.9953,與2相比較有0.24%的誤差。類似地,3分貝意味著電壓之比約是或1.414。6分貝對應功率增加了4倍,電壓增加了2倍。6分貝的功率之比確切值是106/10或3.9811,與4的誤差為0.5%.

TinyALSA
tinyalsa是Google在Android 4.0之後推的基於alsa內核的用戶層音頻接口。在Android 4.0之前還一直是使用這alsa-lib接口。
1 frame of a Stereo 48khz 16bit PCM stream is 4 bytes.
1 frame of a 5.1 48khz 16bit PCM stream is 12 bytes.

ALSA

Audio Sample

Echo Cancellation

Source Code Example
  • Read Wave File
  • TBD

其他


2014年3月11日 星期二

iOS -- 錄音功能實作

近日針對 iOS 設備的錄音功能做一研究,整理如下:

一、聲音來源

錄音時,其聲音來源可能有以下兩處,
  • 麥克風
  • 正在播放的音頻資料(可能來自本地端的檔案,或是遠端的音頻資料)
可以分別選擇不同來源進行錄音,也可以將兩種聲音進行 mix

2014年1月17日 星期五

iOS -- 播放聲音的 API

在 iOS 設備上有許多播放聲音的方法,那麼應該選擇什麼樣的方式呢?
以下根據個人的經驗,分析不同情景下適用的處理方式。

iOS 可以使用數種方法播放聲音,根據用法的難易度,由簡單到困難列舉如下:
  • System Sound Service
  • AVAudioPlayer
  • AVPlayer
  • Audio Queue Service
  • OpenAL
  • Audio Unit
下圖為 Audio Framework,可由此得知不同方法之間的階層關係

2013年5月28日 星期二

ONVIF -- Multicast 問題分析經驗談

在進行 ONVIF Device Test Tool v12.12 的測試過程中,當測試 ONVIF 的 startMulticast 命令時,送出 Audio 時總是無法通過測試工具的檢驗,後來釐清是因為 profile s中規定 audio需要設定為 PCM-ulaw 的關係,但因此也學習了許多與 multicast 有關的知識。

以下將以 startMulticast 為例,整理幾個分析 multicast 的小技巧。

預備知識

StartMulticast 命令所做的事情,就是根據某個已經設定好的 profile,啟動 multicast streaming,可能同時包含 video 與 audio。原文摘錄如下:
This command starts multicast streaming using a specified media profile of an NVT. Streaming continues until StopMulticastStreaming is called for the same Profile. The streaming shall continue after a reboot of the NVT until a StopMulticastStreaming request is received. The multicast address, port and TTL are configured in the VideoEncoderConfiguration, AudioEncoderConfiguration and MetadataConfiguration respectively. An NVT that supports video, audio or metadata multicast streaming shall support the starting of a multicast stream through the StartMulticastStreaming command. 

2013年4月10日 星期三

FFMPEG -- AAC 轉換為 WAV


最近撰寫程式,使用 ffmpeg 將 AAC檔案 轉為 WAV檔案,在實作過程中發現轉換後的聲音品質很差。
主要是因為ffmpeg解開AAC之後的格式與預期不同,因此需要做 resample 的動作。

造成問題原因:
ffmpeg 會將 AAC 解成 AV_SAMPLE_FMT_FLTP 格式 (32bits per sample)
但是製作 PCM 時所需要用的是 AV_SAMPLE_FMT_S16 格式 (16bits per sample),因此需要進行轉換

2013年1月15日 星期二

ONVIF -- audio channel

許多 IPCAM 都支援了將聲音由 NVR 傳至IPCAM 的功能,ONVIF 組織針對此功能定義了一套標準作法,稱為 audio backchannel,首先會利用 AudioOutputConfiguration 內的 Send-Primacy 設定 audio in/out 方向,接著再使用 RTSP ,利用其擴充功能 "Require" 來傳送接收 audio stream。


根據 ONVIF 規範,我們將其分成兩部分來討論