텍스트 음성 변환 참조 아키텍처
텍스트 음성 변환을 사용해 텍스트 메시지를 오디오로 변환하여 모든 사람이 대화에 참여할 수 있도록 돕습니다.
이 문서에서는 GitHub의 이 샘플에 사용된 아키텍처에 대해 설명합니다. 이 참조 아키텍처의 코드는 지침을 위한 예제일 뿐이며 프로덕션 환경에서 사용하기 위해서는 일부 코드를 최적화해야 할 수 있습니다.
아키텍처 다이어그램
아키텍처 서비스
- Azure 이벤트 허브 - 받은 메시지의 순서를 유지하기 때문에 선택합니다.
- Azure 함수 - 클라우드에서 요청에 따라 코드를 실행하는 가장 간단한 방법입니다.
- Azure Content Moderator - 비속어 또는 기타 부적절한 언어를 탐지하기 위해 포함합니다.
- Azure Text Analytics - 이 서비스는 플레이어가 사용하는 언어를 감지합니다. 이는 Azure Speech 서비스에 필요합니다. 또는 Azure Content Moderator가 언어를 감지할 수도 있습니다.
- Azure Speech - 텍스트 음성 변환 기능을 제공하는 서비스입니다.
- Azure Premium Blob Storage - 게임 플레이 중 음성 파일 읽기를 요청하는 경우 표준 Azure Blob Storage에는 제한이 있을 수 있으므로 대기 시간 요구 사항 때문에 선택했습니다.
아키텍처 고려 사항
메시지를 보내고 받는 데 각각 사용되는 2개의 Azure 이벤트 허브가 포함되는 단일 Azure 이벤트 허브 네임스페이스만 만들면 됩니다.
전송된 각 이벤트에 대해 245,760바이트의 메시지 제한이 있습니다. 텍스트 음성 변환 서비스의 결과가 직렬화되면 이 버퍼에 비해 너무 클 수 있습니다. 대신, 결과를 영구 저장소에 저장하고 저장된 항목에 대한 포인터를 반환 메시지의 일부로 전달하는 것이 가능합니다.
게임에서 이 기능을 사용하도록 설정할 때는 다음 변수를 염두에 두어야 합니다.
- 지원되는 음성 및 언어 - 전체 음성 목록은 언어 지원 항목을 참조하세요.
- 지원되는 지역 - 지역별 가용성은 지역 항목을 참조하세요.
- 오디오 출력 - 지원되는 오디오 형식의 목록이 있습니다. 각각 비트 속도 및 인코딩 유형을 통합합니다. 음성 서비스는 24KHz 및 16KHz 오디오 출력을 지원합니다. 자세한 내용은 오디오 출력 항목을 참조하세요.
배포 템플릿
다음 단추를 클릭하여 프로젝트를 Azure 구독에 배포합니다.
이 작업은 Azure 구독에 대한 azuredeploy.json ARM 템플릿 파일의 템플릿 배포를 트리거합니다. 그러면 필요한 Azure 리소스가 만들어집니다. 이로 인해 Azure 계정에 요금이 부과될 수 있습니다.
Azure 서비스에 대한 명명 규칙 및 제한 사항을 요약하는 섹션이 포함된 일반 지침 문서를 참조하세요.
참고
ARM 템플릿이 작동하는 방식에 관심이 있는 경우 이 참조 아키텍처에 활용된 각 서비스에서 Azure Resource Manager 템플릿 설명서를 참조하세요.
Azure Cognitive Services 구독에는 두 가지 유형이 있습니다. 첫 번째는 Computer Vision 또는 음성 서비스와 같은 단일 서비스에 대한 구독입니다. 단일 서비스 구독은 해당 서비스만으로 제한됩니다. 두 번째 유형은 다중 서비스 구독입니다. 이를 통해 여러 Azure Cognitive Services에 대한 단일 구독을 사용할 수 있습니다. 이 옵션은 청구도 통합합니다. 이 참조 아키텍처를 가능한 한 모듈식으로 만들기 위해 각 인식 서비스가 단일 서비스로 설정됩니다.
마지막으로, 샘플 프로젝트에서 Azure 서비스에 연결할 수 있도록 다음 함수 애플리케이션 설정을 추가합니다.
- EVENTHUB_CONNECTION_STRING - 만들어진 Azure 이벤트 허브 네임스페이스에 대한 연결 문자열입니다.
- TEXTANALYTICS_KEY - 만들어진 Azure Text Analytics 인식 서비스의 액세스 키입니다.
- SPEECH_KEY - 만들어진 Azure Speech 인식 서비스의 액세스 키입니다.
팁
Azure Functions를 로컬로 실행하려면 다음과 동일한 앱 설정을 사용하여 local.settings.json 파일을 업데이트합니다.
단계별 설명
- 플레이어의 디바이스는 Azure Traffic Manager에서 결정하는 특정 지역의 채팅 서버에 대 한 지속적이고 암호화된 연결을 엽니다. 채팅 서버는 몇 가지 기본 메타데이터와 함께 플레이어와의 연결을 유지 관리하는 프로세스를 만듭니다.
- 플레이어의 클라이언트는 이전에 만든 보안 연결을 통해 채팅 서버에 채팅 메시지를 보냅니다. 채팅 서버에 있는 플레이어의 프로세스는 메시지를 수신하고, 암호 해독하고, 구문 분석합니다.
- 표준 유효성 검사가 실행되며 채팅 서버는 메시지 순서를 유지하면서Azure 이벤트 허브 서비스를 호출합니다.
- Azure 이벤트 허브는 Azure 함수에 대한 입력 트리거 역할을 합니다.
- 또는 하나의 모범 사례로 Azure 함수가 Azure Content Moderator 인식 서비스를 호출하여 콘텐츠를 검토합니다.
- 그런 다음 Azure 함수가 Azure Text Analytics 서비스를 호출하여 플레이어가 사용하는 언어를 감지합니다.
- 그런 다음 Azure 함수가 해당 정보를 사용하여 오디오로 변환을 시작하는 요청을 제출합니다. Azure Speech 서비스의 응답 본문은 오디오 파일입니다.
- Azure 함수는 오디오 파일을 영구 저장소(Azure Premium Blob Storage)에 저장하고 저장된 위치를 가져옵니다.
- 다른 Azure 이벤트 허브가 Azure 함수용 출력으로 설정되고 오디오 파일이 저장되는 영구 저장소에 대한 포인터를 받습니다.
- 채팅 서버는 Azure 이벤트 허브로부터 결과를 수신합니다.
- 채팅 서버는 받은 포인터를 사용하여 영구 저장소에서 음성 파일을 읽습니다.
- 채팅 메시지와 오디오 파일은 채팅 서버의 수신 플레이어의 프로세스로 전송됩니다. 프로세스는 텍스트 메시지에 대해 추가 유효성 검사를 실행하고 텍스트와 오디오를 모두 직렬화하여 보안 연결을 통해 수신 플레이어의 디바이스에 전송합니다. 마지막으로 텍스트가 채팅 화면에 표시되고 오디오 파일이 재생됩니다.
Blob Storage 정리
잊지 말고 영구 저장소에 저장된 오디오 파일을 정리해야 합니다. 자세한 내용은 Blob Storage 수명 주기 관리를 참조하세요.
Azure 텍스트 음성 변환 서비스
텍스트 음성 변환 인식 서비스의 샘플은 Microsoft 음성 서비스 API: 텍스트 음성 변환 샘플을 참조하세요.
Azure Text Analytics
이 서비스는 플레이어가 제출한 채팅 문자열의 언어를 감지하는 데 필요합니다. 현재, 이 서비스는 ISO 639-1 이름("en", "fr" 등)을 반환할 수 있습니다. 즉, 텍스트 음성 변환 언어 코드가 보다 세분화되어 특정 언어 및 방언을 지원하기 때문에 변환 테이블이 필요합니다. 전체 목록은 음성 서비스 API용 언어 및 지역 지원을 참조하세요.
또는 변환 테이블 대신 플레이어가 게임 설정의 일부로 선호하는 로컬 언어(예: 아르헨티나 스페인어 대신 멕시코 스페인어) 및 음성을 선택하도록 허용할 수 있습니다.
대안
Azure Content Moderator도 조정을 위해 전송된 문자열의 언어를 감지할 수 있습니다. 즉, 이러한 목적으로 Azure Text Analytics 대신 활용하면서 문자열을 조정하는 이점을 추가로 얻을 수 있습니다.
보안 고려 사항
이벤트 허브 또는 Cognitive Services 연결 문자열을 함수의 원본에 하드 코딩하지 마세요. 대신, 적어도 함수 앱 설정을 활용하거나 더 강력한 보안을 위해 Key Vault를 사용하세요. Key Vault를 만드는 방법, 함수에 관리되는 서비스 ID를 사용하는 방법, 마지막으로 함수에서 Key Vault에 저장된 암호를 읽는 방법을 설명하는 자습서가 있습니다.
이벤트 허브 인증 및 보안 모델 개요를 검토하고 연습에 포함하여 채팅 서버만 이벤트 허브에 연결할 수 있도록 합니다.
추가 리소스 및 샘플
Unity용 Azure Event Hubs SDK: 샌드박스 프로젝트입니다. 이 문서의 내용은 지원되지 않습니다. 따라서 최신 상태가 아니거나 작동 상태가 아닐 수 있습니다.
가격
Azure 구독이 없는 경우 무료 계정을 만들어 12개월 무료 서비스를 시작합니다. 이러한 서비스의 제한을 초과하지 않는 한 Azure 무료 계정에서 무료로 제공하는 서비스에 대해서는 요금이 부과되지 않습니다. Azure Portal을 통해 또는 사용량 파일을 통해 사용량을 확인하는 방법을 알아보세요.
이러한 참조 아키텍처를 실행하는 동안 사용되는 Azure 서비스의 비용은 사용자가 부담합니다. 전체 금액은 사용량에 따라 달라집니다. 참조 아키텍처에 사용된 각 서비스에 대한 가격 웹 페이지를 참조하세요.
- Azure Traffic Manager
- Azure 이벤트 허브
- Azure 함수
- Azure Content Moderator
- Azure Text Analytics
- Azure Premium Blob Storage
Azure 가격 계산기를 사용하여 사용하려는 Azure 서비스에 대한 비용을 구성하고 예측할 수도 있습니다.