iOS音頻開發功能

來源:互聯網
上載者:User

聲音的用處 •聲效
■ 點擊按鈕
■ 警告聲
■ 使用者動作伴隨的短聲
• 任意長度的聲音(音樂,播客,講話內容) • 來自網路服務的音頻流
• 錄製的聲音
這會有多難?
• 在一個多功能的行動裝置上播放聲音可能令人驚訝 的複雜
■ 可能同時有多個來源
■ 無數可能的輸出
■ 變幻的事件,可能超出使用者的控制 ■ 給看上去類似的動作不同的優先順序
• 作業系統管理聲音系統
■ 再一次,你只需簡單的搭它的車

CoreAudio
• 高層級,容易使用
■ System Sound API - 短的聲音
■ AVAudioPlayer class - ObjC,簡單API
• 低層級,花費更多努力,但是有更多控制
    AudioToolbox-錄製和播放,流處理,完全的控制
    Audio Units - 處理聲音
    OpenAL - 3D定位的聲音
• 使用哪個取決於你要做什麼
■ 許多情況下滿意於系統聲音和AVAudioPlayer

    播放短音
• "短"指少於30秒
    • 非常簡單的API,但是有限制 ■ 不能重複
    ■ 沒有音量控制 ■ 立刻播放
■ 有限的格式
    ■ 線性化的PCM或IMA4 ■ .caf,.aif或.wav檔案

播放短音
• 兩步的過程
■ 註冊這個聲音,返回一個"聲音ID“
■ 播放聲音
■ 當聲音播放結束時可選擇是否運行回呼函數
NSURL *fileURL = ... // 一個檔案的地址 SystemSoundID myID;
// 先註冊這個聲音
AudioServicesCreateSystemSoundID ((CFURLRef)fileURL, &myID);
// 現在可以播放這個聲音 AudioServicesPlaySystemSound (myID);

播放短音 •清理
■ 當你完成時清除聲音ID
■ 否則你會得到一個記憶體警告
SystemSoundID myID;
// 清除前面註冊的聲音 AudioServicesDisposeSystemSoundID (myID);
體會你的聲音
• 系統的聲音API允許促發手機的震動
• 使用這個特定的系統聲音ID kSystemSoundID_Vibrate ■ 在iPod touch上不做任何事情
- (void)vibrate { // 促發手機的震動
    AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
}

轉換聲音
• 轉換聲音的命令列工具
/usr/bin/afconvert
• 支援各種輸入和輸出格式 • 細節請查看man的頁面
• 可以容易的轉換聲音為系統聲音格式
/usr/bin/afconvert -f aiff -d BEI16 input.mp3 output.aif

播放長音
• iPhone OS 2.1之前的版本裡,你必須使用低層級的
CoreAudio APIs
■ 可能會很複雜,很麻煩
• iPhone OS 2.2引入了ObjC類來處理簡單的音頻播放
■ AVAudioPlayer
• 如果你要在期末項目裡使用聲音,更新到2.2版

AVAudioPlayer
• 播放長音(超過30秒)
• 本機存放區的檔案或記憶體裡的(或來自網路流)
• 能夠迴圈,跳動,播放,暫停
• 提供音量資訊
• 同時播放多個聲音
• Cocoa-風格的 API
■ 從檔案地址或資料初始化
■ 允許代理

AVAudioPlayer
• 從檔案地址或資料產生 AVAudioPlayer *player;
NSString *path = [[NSBundle mainBundle] pathForResource...];
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url]; • 簡單的開始/停止方法
if (!player.playing) {
    [player play];
} else {
    [player pause];
}
AVAudioPlayerDelegate
• 告知什麼時候播放停止
• 告知音頻解碼錯誤
• 提供處理中斷的介面 ■ Oh,這些討厭的中斷
Audio Sessions
• 作業系統需要知道你在對聲音做什麼
■ 開始玩遊戲或收聽播客,然後鎖定設定...什麼會發生?
■ 如果你玩的是一個射擊遊戲並用發聲/靜音開關來靜音... 什麼會發生?
• 提供了一種方式讓你表達你的音頻目的 ■ Categories被定義用來弄清
■ 環境聲
■ 媒體播放
■ 錄製
■ 播放和錄製

預設Sessions
• 應用程式獲得預設session時會
■ 當播放你的聲音時(比如iPod音頻)其他聲音被靜音 ■ 使用發聲/靜音開關
■ 當使用者鎖定裝置時靜音
• 對許多應用程式這不錯,但是不一定適合你的應用程式 ■ 如果這樣,你需要使用Audio Session APIs

進階音頻


音頻檔案流服務和音頻佇列服務

支援各種格式


更多對回訪的控制

 播放音頻流到網路

進階音頻

• 錄製聲音


■ 音頻佇列服務(簡述)

1. 產生一個隊列


2. 定義一個回呼函數來接收錄製的音頻資料

3. 開始隊列 

4. 接收回呼函數的錄製資料,你必須儲存它 

5. 停止該隊列

■ 更多細節查看iPhone Dev Center的樣本項目 SpeakHere

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.