문제1084--[기초-종합] 소리 데이터 저장용량 계산하기(py)

1084: [기초-종합] 소리 데이터 저장용량 계산하기(py)

[만든사람 : 전현석, 최문성(확인), 이준용(확인), 김지혜(그림) (2020)]
시간제한 : 1.000 sec  메모리제한 : 128 MiB

문제 설명

본 문제는 python 의 빠른 기초 학습을 위해 설계된 문제로서 python 코드 제출을 기준으로 설명되어 있습니다. 
------

1초 동안 소리의 세기(강약)를 측정하는 횟수를 h
(헤르츠(Hz) 단위는 1초에 몇 번? 이라는 횟수를 의미한다. 예를 들어 44.1KHz 는 1초에 44100번 이라는 횟수를 의미한다.)

소리의 세기를 한 번 측정한 값을 저장할 때 사용하는 비트 수를 b
(16비트를 사용하면 65536가지 중 한 가지로 그 때의 소리 세기를 저장할 수 있다. 보통은 -32768 ~ +32767 범위로 저장한다.)

왼쪽-오른쪽 등 소리를 녹음할 채널(트랙)의 개수를 c
(mono 는 1개, stereo 는 왼쪽-오른쪽 2개의 트랙으로 소리를 저장한다는 것을 의미한다.)

녹음할 시간(초) s가 주어질 때,
소리를 녹음하기 위해서 필요한 소리 데이터 저장 용량을 계산해 보자.

참고
아날로그 파동인 소리를 디지털 컴퓨터에 저장하고 처리하기 위해서는 
디지털 데이터로 바꾸어 저장해야 한다.

시간에 따라 변화하는 소리의 세기를 마이크를 통해 1초에 수 만 번 이상 측정하고
그렇게 측정한 값을 적당한 범위의 정숫값으로 변환해서 저장한다.

측정한 값을 저장할 때 사용하는 비트 개수에 따라 녹음되는 소리의 세세한 정도를 설정할 수 있고
여러 개의 마이크를 사용해서 여러 채널로 저장할 수 있기 때문에 좌우(스테레오) 채널로 따로 저장하면 2배의 저장 공간이 필요하고
(**5.1 채널 스피커는 앞-가운데, 앞-왼쪽, 앞-오른쪽, 뒤-왼쪽, 뒤-오른쪽 5개의 스피커와 저음을 담당하는 우퍼 스피커 1개로 구성된다.) 
녹음 시간이 길면 길수록 더 많은 저장 용량이 필요하다.

실제로 일반적인 CD(44.1KHz, 16bit, stereo) 음질로 1초 동안 저장하려면
44100 * 16 * 2 * 1 bit 의 저장 공간이 필요한데
44100 * 16 * 2 * 1 / 8 / 1024 / 1024 로 계산하면 0.168MiB/1초 정도의 저장 용량이 필요하다.
만약, 약 5분(300초) 동안의 음악을 녹음한다면 약 50MiB 정도의 저장 용량이 필요하다.
(옛날 음악 CD 한 장에 저장할 수 있는 최대 곡의 수가 12~14곡인 이유는? CD 한 장의 저장 용량이 600~700MiB 이기 때문이다.) 
(소리를 저장하려면 저장 용량이 매우 많이 필요하기 때문에 mp3 같은 소리 파일이나 mpg, avi 같은 동영상 파일에는 소리 데이터가 압축되어 저장된다.)

이렇게 녹음하는 방식을 PCM(Pulse Code Modulation) 방법이라고 한다.
아날로그 파동(Pulse)을 코드(Code)로 변환(Modulation)하는 방법인 것이다.

압축하지 않은 소리 데이터를 저장하는 대표적인 파일로 *.wav가 있다.
(기본적으로는 비압축이지만 데이터를 압축해서 저장하기도 한다.)

** 저장 용량 단위
      8 bit(비트)           = 1 byte(바이트)
1024 byte(210 byte) = 1 KiB(키비바이트) 또는 KB(킬로바이트)
1024 KiB(210 KiB)      = 1 MiB(메비바이트) 또는 MB(메가바이트)
1024 MiB(210 MiB)     = 1 GiB(기비바이트) 또는 GB(기가바이트)
1024 GiB(210 GiB)      = 1 TiB(테비바이트) 또는 TB(테라바이트)
(* KiB, MiB, GiB, TiB, ... 는 정확하게 210배씩 증가함을 나타내는 단위이다.) 


입력 설명

문제에서 설명한
정수 h, b, c, s 값이 스페이스로 분리되어 입력된다.
(0<=h<=48000, 0<=b(8의 배수)<=32, 0<=c<=5, 0<=s<=6000)


출력 설명

소리 데이터를 저장하기 위해서 필요한 저장 용량을 MiB 단위로 바꾸어 출력한다.
(단, 소수점 첫째 자리까지 반올림해서 MiB 단위까지 스페이스로 분리해서 출력한다.)

입력 예시 Copy

44100 16 2 10

출력 예시 Copy

1.7 MiB

도움

기초100제(py) v0.85 : 정보교사 커뮤니티 @컴퓨터과학사랑(CSL)
- 중고등학교 정보 선생님들과 함께 정보수업/방과후/동아리활동 등을 통해 재미있게 배워보세요.
- 모든 내용 및 이미지들은 저작자와의 협의 없이 무단으로 사용할 수 없습니다.

출처/분류