日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios中录音功能的实现AudioSession的使用

發(fā)布時間:2024/3/26 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios中录音功能的实现AudioSession的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這個星期我完成了一個具有基本錄音和回放的功能,一開始也不知道從何入手,也查找了很多相關(guān)的資料。與此同時,我也學(xué)會了很多關(guān)于音頻方面的東西,這也對后面的錄音配置有一定的幫助。其中參照了《iPhone開發(fā)之音頻: 文件和數(shù)據(jù)類型(一)》,啟發(fā)比較大。

?

一、音頻格式

iPhone上支持的音頻編碼格式還是比較多的,而且有很多我是以前聽都沒有聽過的。我就先簡單列出來(以下是摘錄自《iPhone開發(fā)之音頻: 文件和數(shù)據(jù)類型(一)》):

  • AAC: AAC其實是“高級音頻編碼(advanced audio coding)”的縮寫,它是被設(shè)計用來取代MP3格式的。你可能會想,它壓縮了原始的聲音,導(dǎo)致容量占用少但是質(zhì)量肯定會有所下降。不過這些質(zhì)量的損失 取決于聲音比特率的大小,當(dāng)比特率合適的時候,這些損失人耳是很難聽出來的。事實上,aac比mp3有更好的壓縮率,特別是在比特率低于128bit/s 的時候。
  • HE-AAC: HE-AAC是AAC的一個超集,這個“HE”代表的是“High efficiency”。 HE-AAC是專門為低比特率所優(yōu)化的一種音頻編碼格式,比如streaming audio就特別適合使用這種編碼格式。
  • AMR: AMR全稱是“Adaptive Multi-Rate”,它也是另一個專門為“說話(speech)”所優(yōu)化的編碼格式,也是適合低比特率環(huán)境下采用。
  • ALAC: 它全稱是“Apple Lossless”,這是一種沒有任何質(zhì)量損失的音頻編碼方式,也就是我們說的無損壓縮。在實際使用過程中,它能夠壓縮40%-60%的原始數(shù)據(jù)。這種編碼格式的解碼速度非常快,這對iphone或者ipod這種小型設(shè)備來說非常適合。
  • iLBC: 這是另一種專門為說話所設(shè)計的音頻編碼格式,它非常適合于IP電話等其它需要流式音頻的場合。
  • IMA4: 這是一個在16-bit音頻文件下按照4:1的壓縮比來進(jìn)行壓縮的格式。這是iphone上面一種非常重要的編碼格式。
    它的中文意思是基于線性脈沖編碼調(diào)制,用于將模擬聲音數(shù)據(jù)轉(zhuǎn)換成數(shù)字聲音數(shù)據(jù)。簡而言之,就是意味著無壓縮數(shù)據(jù)。由于數(shù)據(jù)是非壓縮的,它可以非常快的播放,并且當(dāng)空間不是問題時,這是在iphone上面首選的音頻編碼方式。
  • μ-law and a-law: 就我所知道的,這種編碼是交替的編碼模擬數(shù)據(jù)為數(shù)字格式數(shù)據(jù),但是在speech優(yōu)化方面比linear PCM更好。
  • MP3: 這種格式是我們都知道也喜歡的,雖然很多年過去了,但MP3到目前為止仍然是一種非常流行的編碼格式,它也能被iphone很好地支持。
  • LPCM也很早就被定義在DVD播放機 的標(biāo)準(zhǔn)內(nèi),為了和CD有所區(qū)別,DVD的的采樣規(guī)格為16bit/48KHz,隨著技術(shù)的發(fā)展,DVD的的采樣規(guī)格更提升到24bit/96KHz,以達(dá) 到更高的播放品質(zhì),用96KHz/24bit方式記錄的音頻信號所能達(dá)到的頻率上限是96÷2= 48KHz,而它的最大動態(tài)范圍將可以達(dá)到24×6=144dB。從指標(biāo)上就可以看出:它的聲音比CD要好得多。pcm編碼的最大的優(yōu)點就是音質(zhì)好,最大的缺點就是體數(shù)據(jù)量大。

而我自己對此的理解是,主流格式iPhone都可以很好地支持了(APE、FLAC暫時忽略)。不過這里值得一提的就是,編碼格式與文件格式并不可以混為一談。為了省事,我就直接選用了caf文件格式,因為caf能包含任何iphone支持的編碼格式的數(shù)據(jù),在iPhone上面它是推薦的文件格式。


文件格式選好以后,還是有很多的參數(shù)可以自己設(shè)定的,比特率、采樣率和位寬等。當(dāng)然,選用合適的音頻格式還是比較重要,因為不同的格式之間文件大小差異還是比較明顯的。就以AAC和LPCM對比為例,采樣率同為44100Hz,默認(rèn)的AAC一分鐘的大小約為500kB,但是16bit位寬的LPCM就可以達(dá)到5MB。但作為我用于錄音的用途,這么大的錄音文件,估計錄不了多少,用戶就會罵我的程序怎么占用這么多空間了。錄音務(wù)求能夠聽得出咬字清晰,不需要追求無損的音質(zhì)。因此,我就選擇了AAC格式,同時更小的空間占用也便于上傳。

想要調(diào)用關(guān)于音頻方面的API,就要使用到AVAudioSession了。根據(jù)參考庫的資料,AVAudioSession類參考AVAudioSessionDelegate協(xié)議參考描述了一個管理音頻會話的精簡接口。如果要使音頻會話支持中斷,則可以直接使用基于C語言的音頻會話服務(wù)接口。它是屬于C級別的API,錄音前,要先將它設(shè)為活動。

具體代碼

1 AVAudioSession *avSession = [AVAudioSession sharedInstance]; 2 [avSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 3 [avSession setActive:YES error:nil];

?

這是錄音前的準(zhǔn)備,要實現(xiàn)錄音,還需要AVAudioRecorder對象。

1 NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys: 2 [NSNumber numberWithFloat:44100.0], AVSampleRateKey, 3 [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey, 4 [NSNumber numberWithInt:1], AVNumberOfChannelsKey, 5 nil]; 6 7 AVAudioRecorder *avRecorder = [[AVAudioRecorder alloc] initWithURL:recordUrl 8 settings:settings 9 error:nil];

這就創(chuàng)建了一個編碼格式為AAC的AVAudioRecorder對象了,記得要將文件路徑轉(zhuǎn)換成NSURL。

1 [avRecorder prepareToRecord]; 2 [avRecorder peakPowerForChannel:0]; 3 [avRecorder record];

這樣就可以開始錄音了,停止就調(diào)用

1 [avRecorder stop];

?

當(dāng)然,還用再次將AVAudioSession的對象設(shè)為不活動,所以最好還是調(diào)用AVAudioRecorderDelegate的方法-(void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag。

1 [avSession setActive: NO error: nil];


那么,錄音的操作就已經(jīng)完成了。

?

三、回放錄音

本來這個和錄音都是大同小異,沒什么值得重復(fù)說,都要將會話設(shè)為活動,實現(xiàn)完成時的delegate方法。但是,我后來發(fā)現(xiàn),這么做有一個問題,回放的聲音超級小。起初我以為是音量有問題,就setVolume:1.0。但是依然不起作用,于是上網(wǎng)查了一下,原來要重新將AVAudioSession設(shè)一下。

1 [avSession setCategory: AVAudioSessionCategorySoloAmbient error: nil];

其余的也就差不多,不多說了。

總結(jié)

以上是生活随笔為你收集整理的ios中录音功能的实现AudioSession的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。