오디오(一): 오디오 기초 지식

5698 단어
오디오 기초 지식
오디오 파일을 구성하는 구성: 파일 형식(또는 오디오 용기) + 데이터 형식(또는 오디오 인코딩).
파일 형식(또는 오디오 컨테이너)은 파일 자체를 표현하는 데 사용되는 형식입니다.
우리는 다양한 방법을 통해 진정한 오디오 데이터를 인코딩할 수 있다.예를 들어 CAF 파일은 MP3 형식, 선형 PCM 및 기타 데이터 형식의 오디오를 포함하는 파일 형식입니다.
데이터 형식(또는 오디오 인코딩)
우리는 오디오 인코딩부터 설명할 것이다. 인코딩이 가장 중요한 부분이기 때문이다.
선형 PCM:
이것은 선형 펄스 인코딩 변조를 나타내는데 주로 아날로그 음성 데이터를 디지털 형식으로 변환하는 기술을 묘사한다.쉽게 말하면 압축되지 않은 데이터다.데이터가 압축되지 않았기 때문에 우리는 가장 빨리 오디오를 재생할 수 있으며, 공간이 문제가 아니라면 이것이 아이폰 오디오의 우선 코드 선택이다.
오디오 파일 크기 계산
사운드카드가 소리에 대한 처리 품질은 세 가지 기본 매개 변수, 즉 샘플링 주파수, 샘플링 비트와 사운드 수로 측정할 수 있다.
샘플링 빈도:
단위 시간 내의 샘플링 횟수를 가리킨다.샘플링 빈도가 클수록 샘플링 지점 사이의 간격이 작아지고 디지털화된 후에 얻을 수 있는 소리는 더욱 리얼하지만 그에 상응하는 데이터 양은 커진다.사운드카드는 일반적으로 11.025kHz, 22.05kHz와 44.1kHz 등 서로 다른 샘플링 주파수를 제공한다.
샘플링 비트: 각 샘플링 값의 크기를 기록하는 비트입니다.샘플링 비트는 보통 8bits나 16bits 두 가지가 있는데 샘플링 비트가 클수록 소리를 기록할 수 있는 변화도가 섬세하고 해당하는 데이터량이 크다.
채널 수는 처리하는 소리가 단성도인지 스테레오인지 가리킨다.단일 채널은 음성 처리 과정에서 단일 데이터 흐름만 있고 스테레오는 왼쪽, 오른쪽 채널의 두 개의 데이터 흐름이 필요하다.분명히 스테레오의 효과는 좋지만, 그에 상응하는 데이터량은 단성도의 데이터량보다 배가된다.
사운드 데이터 양의 계산 공식은 데이터 양(바이트/초) = (샘플링 주파수(Hz)× 샘플링 비트(bit)× 채널 수)/8 모노 채널의 채널 수는 1이고 스테레오의 채널 수는 2이다.
【예1】 5분 더블 채널, 16비트 샘플링 비트, 44.1kHz 샘플링 주파수 소리에 대한 압축되지 않는 데이터량은 얼마입니까?
공식에 따르면 데이터 양 = (샘플링 주파수×샘플링 비트 수×채널 수×시간)/8
예, 데이터 양(MB) = [44.1]×1000×16×2×(5×60)]/(8×1024×1024)=50.47MB
계산할 때 몇 단위의 대체 세부 사항에 주의해야 한다.
시간 단위 환산: 1분=60초
샘플링 주파수 단위 환산: 1kHz=1000Hz
대체 데이터 양: 1MB=1024×1024=1048576B
【예2】 더블채널 스테레오, 샘플링 주파수 44.1kHz, 샘플링 비트 16자리 레이저 디스크(CD-A)에 대해 650MB의 CD-ROM으로 얼마나 오래 저장할 수 있는지 계산해 보세요.
알려진 오디오 파일 크기에 대한 계산 공식은 다음과 같습니다.
파일의 바이트/초당 = 샘플링 빈도(Hz) X 샘플링 비트(비트) X 채널/8
위의 공식에 따라 1초 동안의 비압축 데이터량을 계산한다: (44.1×1000×16×2)/8=0.168MB/s
그러면 650MB의 CD-ROM 1개는 (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 서비스) (2) 오디오 세션 서비스(Audio session 서비스)
(3) 오디오 파일 서비스(4) 오디오 파일 스트리밍 서비스(5) 오디오 전환 서비스
(6) 시스템 사운드 서비스(7) 확장된 오디오 파일 서비스
2.AudioUnit.framework: 오디오 단위 서비스
3.OpenAL.framework: OpenAL
4.AVFoundation.framework: (1)AVAudioPlayer(2)AVAudioRecorder(3)AVAudioSession
5.CoreAudio: 이 프레임워크는 서비스를 제공하지 않고 다른 프레임워크에서 사용할 수 있는 헤더 파일과 데이터 형식만 제공합니다
1. 오디오 재생
1.AVAudioPlayer
(1) AVFoundation.프레임워크 프레임워크
(2) 속성
(3) 방법
(4) 사용 방법
2. 오디오 서비스(System Sound Services)
3. 오디오 큐
4.OpenAL
5.MPMusciPlayController
6. 오디오 유닛 서비스
7. 시스템 사운드 재생 등
2. 오디오 녹음
1.AVAuidoRecorder
2. 오디오 Queue Services 등
3. 오디오 커팅(캡처)
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의 출력 세션인 AVasset ExportSession을 만들었다. 마지막으로 우리가 잘라내야 할 시간구역인 CMTimeRange를 설정했다.그리고 AVassetExportSeesion의 리셋 함수인 exportAsynchronouslyWithCompletionHandler를 실행합니다.

좋은 웹페이지 즐겨찾기