オーディオ(一):オーディオの基礎知識

5715 ワード

オーディオの基礎知識
オーディオファイルを構成する構成:ファイルフォーマット(またはオーディオコンテナ)+データフォーマット(またはオーディオ符号化).
ファイルフォーマット(またはオーディオコンテナ)は、ファイル自体を表すフォーマットです.
真のオーディオデータを複数の異なる方法で符号化することができる.例えばCAFファイルは、MP 3フォーマット、リニアPCM、および他のデータフォーマットのオーディオを含むことができるファイルフォーマットである.
データフォーマット(またはオーディオエンコーディング)
符号化が最も重要な一環であるため、ファイルフォーマットではなくオーディオ符号化から説明します.
リニアPCM:
これは線形パルス符号化変調を表し,主にアナログ音声データをデジタルフォーマットに変換するための技術を記述する.簡単に言えば圧縮されていないデータです.データは圧縮されていないので、オーディオを最も迅速に再生することができますが、スペースが問題でなければ、iPhoneオーディオの優先コード選択です.
オーディオファイルのサイズ計算
サウンドカードの音声に対する処理品質は、サンプリング周波数、サンプリングビット数、およびチャネル数の3つの基本パラメータで測定することができる.
サンプリングの頻度:
は、単位時間当たりのサンプリング回数です.サンプリング周波数が大きいほど、サンプリングポイント間の間隔が小さくなり、デジタル化された音はリアルになりますが、対応するデータ量は大きくなります.サウンドカードは一般に、11.025 kHz、22.05 kHz、44.1 kHzなどの異なるサンプリング周波数を提供する.
サンプリングビット数:各サンプリング値の数値サイズを記録するビット数です.サンプリングビット数は通常8 bitsまたは16 bitsの2種類あり、サンプリングビット数が大きいほど音の変化度が細かく記録され、対応するデータ量が大きくなる.
チャネル数とは,処理された音声がモノラルであるかステレオであるかを指す.モノラルチャネルは、音声処理中に単一のデータストリームのみであり、ステレオは左、右チャネルの2つのデータストリームを必要とする.ステレオの効果は良好であることは明らかであるが,対応するデータ量は単一チャネルのデータ量より倍である.
音声データ量の算出式は、データ量(バイト/秒)=(サンプリング周波数(Hz)× サンプリングビット数(bit)× チャネル数)/8モノラルのチャネル数は1、ステレオのチャネル数は2である.
【例1】5分間のデュアルチャネル、16ビットサンプリングビット数、44.1 kHzサンプリング周波数音に対する非圧縮データ量を算出してください.
式による:データ量=(サンプリング頻度)×サンプリングビット数×チャネル数×時間)/8
得,データ量(MB)=[44.1]×1000×16×2×(5×60)]/(8×1024×1024)=50.47MB
計算には、いくつかの単位の換算の詳細に注意してください.
時間単位換算:1分=60秒
サンプリング周波数単位換算:1 kHz=1000 Hz
データ量単位換算:1 MB=1024×1024=1048576B
【例2】デュアルチャネルステレオ、サンプリング周波数44.1 kHz、サンプリングビット数16ビットのレーザーディスク(CD-A)について、650 MBのCD-ROMでどのくらいの時間音楽を保存できるかを計算してください.
オーディオファイルサイズの計算式は次のとおりです.
ファイルのバイト数/秒=サンプリング周波数(Hz)Xサンプリングビット数(ビット)Xチャネル数/8
上記の式に基づいて、1秒間の非圧縮データ量を計算します:(44.1×1000×16×2)/8=0.168MB/s
では、650 MBのCD-ROMを格納できる時間は、(650/0.168)/(60)×60)=1.07時間.
学習する前に、ファイルフォーマットとデータフォーマット(符号化フォーマット)、ビットレート、サンプリングレート、トラック、チャネル、FFT(フーリエの急速な変化)、スペクトルなど、オーディオフレームワークのようなものを理解しなければなりません.ネットでいろいろ調べたけど、今でも一知半解かな..ふいて...次にiosがオーディオを処理する基礎技術を提供することを全体的に理解します:コアオーディオ(core Audio)
フレームワークは5つあります.
1.Core Audio.framework
2.AudioToolbox.framework
3.AudioUnit.framework
4.AVFoundation.framework
5.OpenAL.framework
コアオーディオ自体が大きな話題であるため、多くの分野の異なるサービスに関連している.そのため、コアオーディオを小さなモジュールに分割し、APIやフレームワークを理解するのに便利です.
1.AudioToolbox.framework:
(1)オーディオキューサービス(Audio Queue service)(2)オーディオセッションサービス(Audio session service)
(3)オーディオファイルサービス(4)オーディオファイルストリーミングサービス(5)オーディオ変換サービス
(6)システム音声サービス(7)拡張オーディオファイルサービス
2.AudioUnit.framework:オーディオユニットサービス
3.OpenAL.framework: OpenAL
4.AVFoundation.framework: (1)AVAudioPlayer(2)AVAudioRecorder(3)AVAudioSession
5.CoreAudio:このフレームワークはサービスを提供していません.他のフレームワークで使用できるヘッダファイルとデータ型のみを提供します.
一、オーディオ再生
1.AVAudioPlayer
(1)AVFoundation.フレームワーク内
(2)属性
(3)方法
(4)使用方法
2.オーディオサービス(System Sound Services)
3.オーディオキュー(Audio Queue Services)
4.OpenAL
5.MPMusciPlayController
6.オーディオユニットサービス
7.システム音声再生等
二、オーディオ録音
1.AVAuidoRecorder
2.Audio Queue Services等
三、オーディオカット(切り取り)
NSString*path = [[NSBundle mainBundle] pathForResource:@"  -  " ofType:@"mp3"];

NSURL *songURL =[NSURL fileURLWithPath:path];

AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:songURL options:nil];

2. 

NSArray *dirs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

NSString *documentsDirectoryPath = [dirs objectAtIndex:0];

NSString *exportPath = [[documentsDirectoryPath
stringByAppendingPathComponent:EXPORT_NAME] retain];EXPORT_NAME 

if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath]) {

[[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil];

}

NSURL *exportURL = [NSURL fileURLWithPath:exportPath];

AVAssetWriter *assetWriter = [[AVAssetWriter assetWriterWithURL:exportURL
      
      fileType:AVFileTypeCoreAudioFormat
                     
        error:&assetError]
                     
  retain];

if (assetError) {

    NSLog (@"error: %@", assetError);

    return;

}

3.オーディオ出力セッションの作成
AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:songAsset                                                           presetName:AVAssetExportPresetAppleM4A];


4.オーディオ切り取り時間領域を設定する(CMTimeはCore Medioフレームにあるのでフレームを事前に導入する)
CMTime startTime = CMTimeMake([_startTime.text floatValue], 1);
CMTime stopTime = CMTimeMake([_endTime.text floatValue], 1);
CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(startTime, stopTime);


5.オーディオ出力セッションを設定して実行する
exportSession.outputURL = [NSURL fileURLWithPath:filePath]; // output path

exportSession.outputFileType = AVFileTypeAppleM4A; // output file type

exportSession.timeRange = exportTimeRange; // trim time range

[exportSession exportAsynchronouslyWithCompletionHandler:^{

   if (AVAssetExportSessionStatusCompleted == exportSession.status) {

        NSLog(@"AVAssetExportSessionStatusCompleted");

    }else if (AVAssetExportSessionStatusFailed == exportSession.status) {

         a failure may happen because of an event out
of your control

         for example, an interruption like a phone call
comming in

         make sure and handle this case appropriately

        NSLog(@"AVAssetExportSessionStatusFailed");

    }else {

  NSLog(@"Export Session Status: %d",exportSession.status);

    }

}];

総じて言えば、APPのディレクトリの下でオーディオファイルを作成し、オーディオのAVAssetオブジェクト(AVAssetは抽象的なメディアを表し、タイトル、ファイルサイズなどを含む)を作成し、次にAVAssetの出力セッションAVAssetExportSessionを作成し、最後に切り取る(切り取る)時間領域CMTimeRangeを設定します.次に、AVAssetExportSeesionのコールバック関数e x p o r t A n c h ronouslyWithCompletionHandlerを実行します.