1. 程式人生 > >呼叫麥克風錄音及播放

呼叫麥克風錄音及播放

匯入AVFoundation.framework

引入#import <AVFoundation/AVFoundation.h>

//定義屬性
{
    //錄音器
    AVAudioRecorder *recorder;
    //播放器
    AVAudioPlayer *player;
    NSDictionary *recorderSettingsDict;
    //錄音名字
    NSString *playName;
}

在 viewDidLoad 裡面初始化
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    playName = [NSString stringWithFormat:@"%@/play.aac",docDir];
    //錄音設定
    recorderSettingsDict =[[NSDictionary alloc] initWithObjectsAndKeys:
                           [NSNumber numberWithInt:kAudioFormatMPEG4AAC],AVFormatIDKey,
                           [NSNumber numberWithInt:1000.0],AVSampleRateKey,
                           [NSNumber numberWithInt:2],AVNumberOfChannelsKey,
                           [NSNumber numberWithInt:8],AVLinearPCMBitDepthKey,
                           [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,
                           [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,
                           nil];

錄音按鈕的UIControlEventTouchUpInside方法響應:

//鬆開 結束錄音
//錄音停止
    [recorder stop];
    recorder = nil;

錄音按鈕的UIControlEventTouchDown方法響應:
//按下錄音
    if ([self canRecord]) {
        
        NSError *error = nil;
        //必須真機上測試,模擬器上可能會崩潰
        recorder = [[AVAudioRecorder alloc] initWithURL:[NSURL URLWithString:playName] settings:recorderSettingsDict error:&error];
        
        if (recorder) {
            recorder.meteringEnabled = YES;
            [recorder prepareToRecord];
            [recorder record];
            
            //啟動定時器
            timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(levelTimer:) userInfo:nil repeats:YES];
            
        } else
        {
            int errorCode = CFSwapInt32HostToBig ([error code]);
            NSLog(@"Error: %@ [%4.4s])" , [error localizedDescription], (char*)&errorCode);
            
        }
    }

//判斷是否允許使用麥克風7.0新增的方法requestRecordPermission
-(BOOL)canRecord
{
    __block BOOL bCanRecord = YES;
    if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending)
    {
        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
            [audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
                if (granted) {
                    bCanRecord = YES;
                }
                else {
                    bCanRecord = NO;
                    dispatch_async(dispatch_get_main_queue(), ^{
                        [[[UIAlertView alloc] initWithTitle:nil
                                                    message:@"app需要訪問您的麥克風。\n請啟用麥克風-設定/隱私/麥克風"
                                                   delegate:nil
                                          cancelButtonTitle:@"關閉"
                                          otherButtonTitles:nil] show];
                    });
                }
            }];
        }
    }
    
    return bCanRecord;
}


播放按鈕響應方法

NSError *playerError;
    
    //播放
    player = nil;
    player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:playName] error:&playerError];
    
    if (player == nil)
    {
        NSLog(@"ERror creating player: %@", [playerError description]);
    }else{
        [player play];
    }


相關推薦

呼叫麥克風錄音播放

匯入AVFoundation.framework 引入#import <AVFoundation/AVFoundation.h> //定義屬性 { //錄音器 AVAudioRecorder *recorder; //播放器 AV

Android使用MediaRecorder實現錄音播放

現在專案中有使用到音視訊相關技術,在參考了網上各種大牛的資料及根據自己專案實際情況(相容安卓6.0以上版本動態許可權管理等), 把聲音錄製及播放相關程式碼做個記錄。 public class MediaRecorderActivity exten

iOS錄音,呼叫麥克風話筒

AVAudioSession.sharedInstance().requestRecordPermission({ [weak self] (granted) in g

Android實現錄音功能播放語音功能

Android中實現錄音功能其實很簡單,直接呼叫的系統的就ok了,這裡就不寫實現的原理了,直接部署程式碼:所謂的實現就是用的MediaRecorder。 錄音功能程式碼:  //開始錄製     pr

AudioManager 錄音 然後儲存在本地播放

呼叫系統的AudioManager 錄音 然後儲存在本地,點選播放錄音 一個類搞定所有 需要許可權: package com.example.savesound; import java.io.IOException; import android.app.Activ

C#麥克風錄音元件與播放原始碼

public partial class Form1 : Form { private IAudioPlayer audioPlayer; private IMicrophoneCapturer microphoneCapturer; publ

Unity調取移動端的麥克風進行錄音播放

1.對MicroPhone類的理解  對麥克風的呼叫在Unity裡主要是用到了MicroPhone這個類,此類裡面有幾個方法可以方便我們實現功能2.程式碼演示#region 模組資訊 // *******************************************

stm32聲音程序 錄音播放 wav

技術 com rate info stm32 sam 分享 img sd卡 推薦文檔:http://www.sohu.com/a/115830046_119709 通過調整計時器,,每25us控制ADC進行一次采集,,,,采集的數據交給DMA,,,,然後DMA給一個數組

AudioUnit錄音播放同時進行的一些註意點

unit 問題 同時 recording 功能 回調 ack color sound 錄音(播放)和暫停 -(void)start { self.soundTotalLength = 0.0f; if (!self.unitHaveStart) {

Android系統自帶的MediaRecorder結合Camera實現視訊錄製播放功能。

    近期,公司專案新增了需求,需要視訊錄製,然後儲存到本地,再播放...。 看了很多其他的框架,說不出好壞,應該說各有千秋吧。但我覺得還是原生的靠譜,就是谷歌系統自帶的MediaRecorder。 不多說上程式碼吧(已經測試,沒問題)。 程式碼沒什麼複雜的,都是些

HLS 架構簡介播放加密的HLS

HLS 概述 HLS 全稱是 HTTP Live Streaming, 是一個由 Apple 公司實現的基於 HTTP 的媒體流傳輸協議. 他跟 DASH 協議的原理非常類似. 通過將整條流切割成一個小的可以通過 HTTP 下載的媒體檔案, 然後提供一個配套的媒體列表檔案, 提供給客戶端, 讓客

opencv+vs2017實現視訊的讀取播放,同時將每一幀圖片儲存在指定檔案

#include "highgui.h" #include <iostream> using namespace std; int main(int argc, char** argv) { cvNamedWindow("視訊播放器", CV_WINDOW_A

機器學習weka,java api呼叫隨機森林儲存模型

工作需要,瞭解了一下weka的java api,主要是隨機森林這一塊,剛開始學習,記錄下。 瞭解不多,直接上demo,裡面有一些註釋說明: package weka; import java.io.File; import weka.classifiers.Classifier; i

dedecms呼叫子欄目文章列表

使用DEDECMS程式建網站時,有些欄目下面有子欄目,我們需要在網站前臺調用出子欄目以及子欄目下的文章列表。 dedecms呼叫子欄目及文章列表可以使用以下的程式碼進行呼叫: <div class="list"> {dede:channelartlist} &l

Sqlserver呼叫api 方法示例

雖然使用sqlserver去呼叫服務介面的情況比較少,但也可以去了解下對應的使用情況 一、首先要開啟元件的配置 按 Ctrl+C 複製程式碼   按 Ctrl+C 複製程式碼   二、呼叫webservice 1、介面資訊獲取 呼叫webservi

Android呼叫sharesdk過程問題

具體配置方法詳見官網,我這邊使用的離線配置,即沒有使用gradle進行配置,這裡偷偷懶,不詳細記錄 詳細步驟 步驟為粗略步驟,詳細步驟參照此處 1. 在官網根據自己要分享的平臺下載相關的jar包 2. 將下載的jar包放在自己目錄的lib資料夾下並在

C# 反射詳解:定義、建立物件、呼叫例項方法靜態方法

    1、反射的定義及功能介紹:審查元資料並收集關於它的型別資訊的能力。元資料(編譯以後的最基本資料單元)就是一大堆的表,當編譯程式集或者模組時,編譯器會建立一個類定義表,一個欄位定義表,和一個方法定義表等。可能這些說的比較抽象。我再從另一個角度來說:反射是.Net中

基於 Hessian 輕量級遠端呼叫的原理示例

1 簡介   Hessian 是 Caucho 公司開發的一種基於二進位制 RPC 協議(Remote Procedure Call protocol)的輕量級遠端呼叫框架,其使用簡單的方法提供了 RMI 的功能。 相比 WebService,Hessian

[原始碼和文件分享]程式設計實現錄音儲存為WAV音訊檔案

背景 之前自己錄製視訊教程的時候,從網上找過一些破解版錄屏軟體來使用。後來,我細想了一下,其實我自己就可以下一個簡單的錄屏小軟體。於是,後來我也自己慢慢摸索著,從網上搜索資料,慢慢地開發了一個有基本的錄音錄屏功能的小程式。 其中,本文的錄音小程式是當時為了熟悉錄音流程而特意開發來練手的。當然

樹莓派做wifi熱點+opencv安裝和呼叫CSI攝像頭遇到的問題

wifi AP 讓樹莓派作為wifi熱點,按照https://blog.csdn.net/qq_21768483/article/details/82944874配置下來可以用,其中wifi的密碼長度為4會跳出一個error,最好密碼長一點。網速還挺好。裡面install的幾個軟體是很強大的,可