Why text messages are limited to 160 characters?

출처 : http://latimesblogs.latimes.com/technology/2009/05/invented-text-messaging.html

단순 문자 메시지 전송 서비스(SMS)의 경우, 한번에 최대 160 바이트까지 전송이 가능하다. 영문 기준 160 자, 한글 기준 40 자 이다.

왜 이런 제한이 생겼을 까?

그 이유는 독일의 Friedhelm Hillebrand 사람 때문이라고 한다.

Friedhelm Hillebrand 는 타자기를 사용하면서 자신의 문장에 들어가는 글자 수를 세기 시작했다. 그리고 나중에는 “160자(물음표, 마침표 등 모든 기호를 포함)면 대부분의 생각과 의견을 나타낼 수 있다”라는 결론을 도출했다.

이는 Hillebrand의 매직 넘버라고 불리었으며 훗날의 SMS 문자 메시지의 길이를 정하는데 영향을 미치게 된다. 더 가깝게는 초기 트위터의 140자 제한까지 영향을 미치게 되었다.(140 메시지 + 20 아이디 표시).

참고로 이 이론이 나온때는 1985년 이었다.

160자로 대부분의 생각과 대화를 표현할 수 있다는 생각은 그 당시에는 합당했을 것이다.

단순한 메시지나 대화를 나타내기에는 적당할 것이다.

하지만 여러가지 인용과 링크 정보, 다른 사람들의 생각등.. 대화와 의견을 표출하는 방법이 옛날과는 많이 달라졌다는 것이 문제일 것이다.

즉…. 160자는… 짧다…!

Sample rate / Bit rate

Sample rate(샘플 레이트)와 Bit rate(비트 레이트)

출처 : http://ospace.tistory.com/101?srchid=BR1http%3A%2F%2Fospace.tistory.com%2F101

 

———————————————————————————————————————-

작성자: 박재성(ospace114@empal.컴)
작성일: 2008.4.21

* 편의상 평어를 사용했습니다.
* 퍼갈때는 출처를 밝히는 센스 부탁해요.

아래 내용은 나름대로 여러 분에게 도움이 되고자 정리하였습니다. 그림까지 있으면 더 좋을텐데 시간 관계상 글로만 작성했습니다.

인터넷 상에서 샘플레이트와 비트레이트의 정의는 간혹 있다. 샘플레이트는 이해가 쉽지만, 비트레이트는 쉽게 와닫지않는다. 즉 알송달송하다. 비트레이트와 오디오 포멧에서 어떤 관계를 가지고 있는지 알 수 없다.

이에 대해서 실제 데이터 량인 파일 크기를 가지고 두 rate(레이트)간에 비료를 해두었다. 그리고 글의 내용은 오디오에 대해서 어느정도 지식을 가지고  있는 분들을 대상으로 작성하였다.
초보자분 들은 다른 곳에서 기본적인 용어와 지식을 찾아보길 바란다.

위의 단어는 오디오 다루면서 매우 많이 접하는 단어이다. 일단 간단하게 정리를 해보자.
먼저 sample(샘플)을 먼저 알아 보자.

샘플은 말그대로 샘플이다. 아날로그의 연속된 데이터를 디지털로 표현하기에는 한계가 있다. 아날로그의 연속된 값은 무한 대로 쪼갤 수 있기 때문이다. 그렇기에 그중에 대표적인 특정 값(샘플)을 추출해서 사용하게 된다. 다수의 샘플들 집합으로 소리를 표현할 수 있다.

Sample rate (샘플레이트)

이는 샘플의 빈도 수이다. 좀더 직접적으로 말하면, 1초당 추출되는 샘플 개수이다. 오디오에서 44.1KHz(44100Hz), 22KHz(22050Hz)를 말한다. 괄호안에 값은 좀더 정확하게 표현한 값이다.
예를 들어 44.1KHz는 1초동안에 사만사천백(44100)개로 등분해서 샘플을 추출한다. 값이 커질 수록 더욱더 세밀하게 등분해서 정확한 오디오 데이터를 추출할 수 있다. 그러나 너무 큰 값은 추출되는 데이터 크기를 너무 크게 만들어서 처리하기 힘들다. 보통 44.1KHz가 CD음질로 많이 사용되므로 이이상 추출하는 것의 특수한 경우를 제외하고 의미가 없다.

Bit rate (비트레이트)

초당 전송되는 데이터 양이다. 직접적으로 표현하면 1초당 전송되는 비트 수이다. 간혹 혼돈되는 내용이 평균 데이터 전송량(Avarage Byte Rate)이다. 즉 실제 갖고 있는 데이터 량으로 같은 포멧의 원본(PCM) 데이터 량과 틀리다. Bit rate가 나올 수 있는 것은 오디오 압축 기술이 나오면서 가능하게 되었다.
보통 192Kbps, 128Kbps, 56Kbps 등을 사용한다. 128Kbps정도면 음질은 CD음질정도 되면 192Kbps정도면 최상이다. 그 이상이 되면 용량이 들어날뿐 보통 음질을 잘 구분하지 못한다.

실제 간단한 예를 보면사 둘간의 상관관계를 살표보자.
아래는 샘플 파일 정보이다.

파일명: stop.mp3

재생시간: 4분 59초 (299초)
비트레이트: 56Kbps (CBR)
채널수: 2 ch
비트: 16 bit
샘플레이트:22050 Hz
크기: 2,094,939byte

파일명: stop.pcm
크기: 26,394,624 byte

MP3 파일 크기 계산

먼저 MP3 파일 크기를 계산해 보자. 이때 필요한 값이 재생시간과 비트레이트이다.

파일크기 = 재생시간 * 비트레이트 / 8

8를 나눠준 이유는 비트에서 바이트로 변환하기 위한 것이다.

299 * 56000 / 8 = 2,093,000 (byte)

실제 값과 약간의 오차가 있는 이는 재생 시간이 1초 이하의 시간을 고려하지 않았고, MP3의 테그와 헤더 정보를 고려하지 않았기 때문이다. 비트 레이트는 실제로 처리되는 데이터 크기이므로 실제 재생시간과 곱함으로서 실제 데이터 크기를 알아낼 수 있다.

PCM 데이터 처리량

원래 초당 데이터 량이 다음과 같이 처리된다고 알고 있을 것이다.

초당 데이터 량 = 샘플레이트 * 채널 수 * 비트

그러므로,

22050 * 2 * 16 = 705,600 (bit)

즉, 약 705Kbps가 된다. 바로 이 값이 실제 PCM에서 처리되는 데이터 량이다. 그러나 MP3로 되면서 705Kbps값이 56Kbps 값으로 약 12배 차이가 난다.

PCM 파일 크기 계산

PCM 파일 계산에서는 비트 레이트가 없다. PCM 자체에 모든 데이터를 저장하고 있기 때문이다. 즉 앞에서 구한 PCM 데이터 처리량을 이용해서 구하면 된다.

PCM 파일 크기 = PCM 데이터 처리량 * 재생시간 / 8

8로 나눈이유는 비트를 바이트로 변경하기 위해서이다.

705,000 * 299 / 8 = 26,349,375 (byte)

실제 크기인 26,394,624와 약간의 차이가 있다. 이는 위의 계산시 1초 이하의 시간을 고려하지 않았기 때문이다.

마무리

즉 다시 말하면 PCM 파일에서 bit rate는 pcm 데이터 처리량과 같다. 이를 계산 식으로 변경하면,

비트 레이트 = 샘플 레이트 * 채널 수 * 비트

그러나 MP3인 경우는 위 식이 맞지 않는다.

실제 파일 크기를 보아도 10배 이상의 차이가 발생한다. 이 차이가 MP3와 PCM의 비트레이트 차이와 비슷하다. 그리고 MP3 자체 음질도 나쁘지 않기에 MP3 파일을 사용하게 된다.

위의 MP3 샘플은 음질을 많이 저하시켰기 때문에 음악 감상용으로 적합하지 않지만, 온라인상에서 간단히 재생하는 목적이라면 적합한 포멧이다. 즉 적절히 원하는 용도로 음질을 조절해서 사용할 수 있으면 그만큼 처리되는 데이터 량을 조절할 수 있게 된다.

주의할 것은 bit rate를 CBR(Constant Bit Rate)만 다루었다. 실제는 다음과 같은 것이 추가로 있다.

  • VBR(Variable Bit Rate):  가변 전송율
  • ABR(Average Bit Rate): 평균 전송율
  • SBC(Smart Bit Rate): 스마트 전송율

위의 용어 정의는 다른 사이트를 검색해보면 쉽게 찾을 수 있다. 위의 전송율 방식에 따라서 실제 파일 길이도 차이가 발생하므로 앞에서 계산한 식이 절대적이라고 말할 수 없다.

위의 내용은 MP3를 다루었지만 OGG나 다른 포멧에서도 동일하게 적용된다.
이상으로 마치겠다.

덧글

우리가 알고 있는 WAV가 PCM으로 착각할 수 있는데, 동일 하지 않는다. WAV는 PCM외에 다른 인코딩 방식도 지원하고 있다. 즉 WAV가 PCM를 저장할 수 있는 포멧이다. 자체가 PCM이 아니다.
PCM는 순수 데이터만 저장하고 있다. 그렇기에 PCM파일을 불러오는 경우 샘플 레이트, 채널 수, 비트 수를 직접 입력해야한다. 즉, 헤더 정보가 없다.

추가로 PCM 파일을 재생할 수 있는 프로그램은 Cool Edit를 사용하면 된다.

출처:
인터넷에서 기본적인 용어 정의
내 두뇌~~

[Freeswitch] TTS on python

Freeswitch 에서 TTS 서비스를 제공하는 방법은 크게 두가지가 있다.

1. Dialplan 에서 해당 모듈을 직접 호출하는 방법.
2. Python, Lua 와 같은 스크립트 모듈에서 호출하는 방법

여기에서는 Python 스크립트 모듈에서 사용하는 방법을 기술한다.

 

mod_tts_commandline 을 사용하는 방법

Freeswitch 에서는 TTS 서비스를 위해 여러가지 모듈들을 제공하는데, 그 중 mod_tts_commandline 모듈은 서버에 설치되어 있는 TTS 프로그램과 연동하여 TTS 서비스를 제공하는 모듈이다 .

먼저 mod_tts_commandline 모듈을 설치하자.

cd /freeswitch/souce/directory
vi 편집기로 modules.conf 파일에서 asr_tts/mod_tts_commandline 부분을 주석 해제하자.
./configure && make && make install

설치가 끝나면, 해당 모듈이 자동 로드될 수 있도록 해주자.

vi /freeswitch/config_directory/conf/autoload_configs/modules.conf.xml
<load module=”mod_tts_commandline”/> 부분을 주석해제해주자.

tts_commandline.conf.xml 파일을 수정해야 한다. 여러가지 명령어 구문들이 가능한데.. 다음은 epseak 를 사용한 예제 명령어 구문이다.

<param name=”command” value=”echo ${text} | espeak –stdin –stdout -v default| sox -t wav – -r ${rate} ${file}”/>

기타 다른 예시 명령어 문구는 https://wiki.freeswitch.org/wiki/Mod_tts_commandline 에서 확인할 수 있다.

이후 Python 스크립트에서 다음과 같이 호출하여 사용하면 된다.

session.set_tts_params("espeak", "default");
session.speak("Hello, world!");

 

mod_shout 를 사용하는 방법

본래, mod_shout 는 외부 자원을 재생시키는 모듈이다. 하지만 이를 이용하면 외부(웹)에서 제공하는 TTS 서비스를 사용할 수 있다.
외부(웹)에서 TTS 를 제공하는 곳은 크게, Bing/Google 이 있는데, 여기서는 Google 을 기준으로 설명한다.

간단하다. mod_shout 설치 후, 다음과 같이 사용하면 된다.

session.streamFile("shout://translate.google.com/translate_tts?tl=en&q=Hello+world", "")
# 혹은...
recvDtmf=session.playAndGetDigits(1, 1, 1, 1, "", "shout://translate.google.com/translate_tts?tl=en&q=Hello+world", "", "", "", 0, "")

 

참조:

https://wiki.freeswitch.org/wiki/Mod_shout

https://wiki.freeswitch.org/wiki/Session_streamFile

https://wiki.freeswitch.org/wiki/Playing_recording_external_media

https://wiki.freeswitch.org/wiki/Mod_tts_commandline

http://wiki.freeswitch.org/wiki/Category:TTS

https://wiki.freeswitch.org/wiki/Mod_lua

[CTI] TTS Service

TTS 란 Text To Speech 의 약자로서, 글자를 소리내어 읽어주는 서비스/프로그램 을 말한다.
흔히 IVR 같은 서비스에서 사용하는데, IVR 서비스 중에서도 정적으로 고정된 멘트(안녕하세요, *** 서비스에 오신것을 환영합니다)가 아닌 동적인 데이터(이름, 예금 잔고, 신용등급 등)를 나타낼 때 사용한다.

CTI 에서 TTS 기능을 사용하는 방법에는 크게 두가지가 있다.

1. 서버 내부에 설치된 TTS 프로그램 기능을 이용하는 방법.
2. 서버 외부에서 제공하는 TTS 서비스를 이용하는 방법.

 

– 서버 내부에 설치된 TTS 프로그램 기능을 이용하는 방법.

리눅스에서 사용가능한 Espeak 같은 프로그램을 예로 들 수 있다. 혹은 상용의 TTS 프로그램도 이에 해당된다.
이 방법을 사용하게 되면 고객에게 양질의 음성 서비스를 제공할 수 있는 장점이 있지만, 직접 서버 내에서 Text 를 음성으로 변조하는 과정을 거쳐야 하기 때문에 Computing Power 가 요구되는 단점도 있다.

 

– 서버 외부에서 제공하는 TTS 서비스를 이용하는 방법

대표적인 예로 구글의 Translate 서비스를 생각할 수 있다. Translate 서비스의 한 부분으로 입력한 문자열을 음성으로 들려주는 서비스이다.
이 방법을 사용하면 서버내의 Computing Power 를 사용하지 않고도 TTS 서비스를 제공할 수 있지만, 고객 데이터가 외부로 노출된다는 점, 트래픽 제한에 걸릴 수도 있다는 점 등의 단점이 있다.