[iOS] audio data에 대하여

Zoe·2023년 3월 4일
0

iOS

목록 보기
14/39

audio data에 대하여


일반적으로 swift에서는 audio를 다룰 때, AudioPlayer, AudioRecorder, Audio Engine을 많이 사용한다. real time audio data를 다루는 경우 audio engine을 사용하는 것이 적합하다. 일단 audio engine에 앞서, audio data를 다루는 방식을 알아보자. 일반적으로 audio를 처음에는 wav, mp3 type으로 받아온다. 각각 무엇을 의미하는지 살펴보자.

wav는 waveform audio format이며, 무손실 무압축 format이다. 초당 bitrate(흔히, Bits Per Second)는 1411.2 kbps.
Bits Per Second는 bit per sample frequency channels로 계산하는데, waveform은 bit per sample = 16, frequency = 44100, channels = 2이므로 계산 결과, 141만 1200bps = 1411.2kbps가 되는 것이다.
여기서 frequency는 sample frequency = sample rate 으로 44100Hz, 48000Hz가 많이 쓰인다. 실제로 사용자 음성을 모델에 request할 때 H/W의 audio format은 48kHz이고 ai model의 audio input format이 44.1kHz여서 변환하는 과정이 필요한 경우도 있었다.
이 때, capacity는 time * BPS / 8로 계산한다.

mp3는 MPEG-1 Audio Layer-3 또는 MPEG-2 Audio Layer-3이며, 손실 압축 format이다. mp3는 PCM Audio Data를 사람이 듣는 데 중요하지 않은 부분은 버리고 저장한다. header-data-header-data...header-data의 반복이다. 이를 stream이라고 한다.

이 waveform audio format 과 MPEG-1 Audio Layer-3를 어떻게 처리하냐면, 예를 들어 sample rate가 44100Hz라고 한다면 1초에 44100개의 데이터로 샘플링 되었다는 것을 의미한다.
[ 0.00019836 -0.00036621 0.00016785 … 0.00099182 0.00161743 0.00135803]
이런 식으로 데이터가 나타난다. 이 때 샘플링을 하여 데이터를 축소할 경우 너무 많은 데이터를 손실할 위험이 생긴다.
그리고 이 data sample은 특정 시간 간격에서 파동의 진폭이며, 일반적으로 16bit는 sample이 65,536 진폭 값의 범위를 가질 수 있음을 의미한다.

  • 위는 간단한 예시로, audio가 디지털 data로 할당되는 과정을 나타낸다.
  • 이렇게 sample rate로 자른 data를 정제하는 것이 audio preprocessing이다.

그럼 audio engine에서 data를 다룰 때 알아야 할 것은

  • AVAudioPCMBuffer
  • AudioFormat
  • frame capacity
  • frame length
  • buffer size
  • sample rate

다음 글에서 다뤄보자.

profile
iOS 개발자😺

0개의 댓글