오디오 콘텐츠를 Base64로 인코딩

이 페이지는 바이너리 파일의 오디오를 base64 인코딩 데이터로 변환하는 방법을 설명합니다.

Speech API에 오디오를 전달할 때 Google Cloud Storage에 있는 파일의 URI를 전달하거나 오디오 데이터를 요청의 content 필드에 직접 삽입할 수 있습니다.

Base64 인코딩 오디오 삽입

오디오 데이터는 바이너리 데이터입니다. gRPC 요청 내에 바이너리 데이터를 직접 쓸 수 있습니다. 그러나 REST 요청을 할 때는 JSON이 사용됩니다. JSON은 바이너리 데이터를 직접 지원하지 않는 텍스트 형식이므로, Base64 인코딩을 사용하여 바이너리 데이터를 텍스트로 변환해야 합니다.

오디오 파일을 base64로 인코딩하려면 다음 단계를 따르세요.

Linux

  1. base64 명령줄 도구를 사용하여 오디오 파일을 인코딩합니다. -w 0 플래그를 사용하여 줄바꿈을 방지해야 합니다.
    $ base64 source_audio_file -w 0 > dest_audio_file

2. 요청의 content 필드에서 base64 인코딩 오디오를 인라인하여 JSON 요청 파일을 만듭니다.

    {
      "config": {
        "encoding":"FLAC",
        "sampleRateHertz":16000,
        "languageCode":"en-US"
      },
      "audio": {
        "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
      }
    }

Mac OSX

  1. base64 명령줄 도구를 사용하여 오디오 파일을 인코딩합니다.
    $ base64 source_audio_file > dest_audio_file

2. 요청의 content 필드에서 base64 인코딩 오디오를 인라인하여 JSON 요청 파일을 만듭니다.

    {
      "config": {
        "encoding":"FLAC",
        "sampleRateHertz":16000,
        "languageCode":"en-US"
      },
      "audio": {
        "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
      }
    }

Windows

  1. Base64.exe 도구를 사용하여 오디오 파일을 인코딩합니다.
    C:> Base64.exe -e source_audio_file > dest_audio_file

2. 요청의 content 필드에서 base64 인코딩 오디오를 인라인하여 JSON 요청 파일을 만듭니다.

    {
      "config": {
        "encoding":"FLAC",
        "sampleRateHertz":16000,
        "languageCode":"en-US"
       },
      "audio": {
        "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
      }
    }

프로그래매틱 방식으로 오디오 콘텐츠 삽입

텍스트 편집기를 통해 오디오 바이너리 데이터를 요청에 삽입하는 것은 바람직하지 않으며 실용적이지도 않습니다. 실제로는 클라이언트 코드에 base64 인코딩 파일을 삽입합니다. 지원되는 모든 프로그래밍 언어에는 base64 인코딩 콘텐츠를 위한 기본 메커니즘이 있습니다.

Python

Python에서 base64는 다음과 같이 오디오 파일을 인코딩합니다.

# Import the base64 encoding library.
import base64

# Pass the audio data to an encoding function.
def encode_audio(audio):
  audio_content = audio.read()
  return base64.b64encode(audio_content)

Node.js

Node.js에서 base64는 다음과 같이 오디오 파일을 인코딩합니다. 여기서 audioFile은 바이너리 인코딩 오디오 데이터입니다.

// Imports the Google Cloud client library
const fs = require('fs');
const speech = require('@google-cloud/speech');

// Creates a client
const client = new speech.SpeechClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const filename = 'Local path to audio file, e.g. /path/to/audio.raw';
// const encoding = 'Encoding of the audio file, e.g. LINEAR16';
// const sampleRateHertz = 16000;
// const languageCode = 'BCP-47 language code, e.g. en-US';

const config = {
  encoding: encoding,
  sampleRateHertz: sampleRateHertz,
  languageCode: languageCode,
};
const audio = {
  content: fs.readFileSync(filename).toString('base64'),
};

const request = {
  config: config,
  audio: audio,
};

// Detects speech in the audio file
const [response] = await client.recognize(request);
const transcription = response.results
  .map(result => result.alternatives[0].transcript)
  .join('\n');
console.log('Transcription: ', transcription);

자바

자바에서는 다음과 같이 org.apache.commons.codec.binary.Base64에 있는 encodeBase64 정적 메서드를 사용하여 바이너리 파일을 base64로 인코딩합니다.

// Import the Base64 encoding library.
import org.apache.commons.codec.binary.Base64;

// Encode the speech.
byte[] encodedAudio = Base64.encodeBase64(audio.getBytes());