이 문서에서는 지능형 대화형 오디오를 OSS에 직접 전송하는 방법을 알려줍니다.

1. 배경

이번에는 요구 사항 기록을 가져옵니다. 최근에는 AI 생방송실에서 음성번역을 하고 있다. 그래서 이번에는 Alibaba Cloud의 음성 전용 인터랙션과 Alibaba Cloud의 oss 서비스를 이용했습니다.

첫 번째는 Alibaba Cloud의 음성 전용 상호 작용인 nls-portal.console.aliyun.com/overview 입니다 .

oss 서비스는 알리바바클라우드 공식검색으로 바로가기 하시면 더 많이 사용됩니다.

2. 기술 개요

2.1 개요

  1. 라이브 룸에 들어갈 때 사용합니다. 프런트 엔드는 xxx 사용자가 생방송 방에 들어오는 것을 감지합니다. 이 정보를 캡처한 후. 프런트 엔드는 사용자 별명을 서버로 전송합니다.
  2. 서버는 닉네임과 구성된 환영 사본을 연결하고 Alibaba Cloud Smart Voice를 호출하여 오디오를 생성합니다.
  3. Alibaba Cloud Smart Voice는 지정된 오디오 합성 모델에 따라 해당 오디오 파일을 생성합니다.
  4. 서버는 해당 오디오 스트림을 가져오고 oss 서비스를 호출하여 오디오 스트림을 해당 서버에 업로드합니다.
  5. 업로드가 완료되면 오디오 링크를 프런트 엔드로 반환합니다. 프런트 엔드는 해당 오디오 파일을 재생합니다.

2.2 오디오 프로젝트 만들기

  1. Alibaba Cloud에 로그인한 후 nls-portal.console.aliyun.com/applist는 음성 상호 작용만 활성화할 수 있습니다.
  2. 해당 프로젝트 생성
  3. 설정을 바꾸다
  4. 합성하려는 음성을 선택하십시오

3. 기술적 구현

3.1 토큰 생성

    /**
     * 获取token
     *
     * @return 
     * @throws IOException
     */
    private static String getToken() throws IOException {
        AccessToken accessToken = new AccessToken("accessKeyId", "accessKeySecret");
        accessToken.apply();
        String token = accessToken.getToken();
        return token;
    }
复制代码

3.2 해당 오디오 스트림 파일 생성

private void processGETRequest(String appkey, String accessToken, String text, String format, int sampleRate, String voice, String filePath) {
        /**
         * 设置HTTPS GET请求:
         * 1.使用HTTPS协议
         * 2.语音识别服务域名:nls-gateway-cn-shanghai.aliyuncs.com
         * 3.语音识别接口请求路径:/stream/v1/tts
         * 4.设置必须请求参数:appkey、token、text、format、sample_rate
         * 5.设置可选请求参数:voice、volume、speech_rate、pitch_rate
         */
        String url = "https://nls-gateway-cn-shanghai.aliyuncs.com/stream/v1/tts";
        url = url + "?appkey=" + appkey;
        url = url + "&token=" + accessToken;
        url = url + "&text=" + text;
        url = url + "&format=" + format;
        url = url + "&voice=" + voice;
        url = url + "&sample_rate=" + sampleRate;

        /**
         * 发送HTTPS GET请求,处理服务端的响应。
         */
        Request request = new Request.Builder().url(url).get().build();
        try {
            OkHttpClient client = new OkHttpClient();
            Response response = client.newCall(request).execute();
            String contentType = response.header("Content-Type");
            if ("audio/mpeg".equals(contentType)) {
                byte[] bytes = response.body().bytes();
                ossService.ossUploadByStream(filePath, new ByteArrayInputStream(bytes));
            } else {
                String errorMessage = response.body().string();
            }
            response.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
复制代码

3.3 oss에 오디오 스트림 파일 업로드

public void ossUploadByStream(String filePath, InputStream input) {
        OSS ossClient = new OSSClientBuilder().build(aLiYunConfig.getEndpoint(), aLiYunConfig.getAccessKeyId(),
            aLiYunConfig.getSecretAccessKey());
        PutObjectRequest putObjectRequest = new PutObjectRequest(aLiYunConfig.getBucketName(), filePath, input);
        ossClient.putObject(putObjectRequest);
        ossClient.shutdown();
    }
复制代码

4. 요약

  1. 오디오 생성을 위해 oss에 직접 저장되므로 서버의 메모리를 점유할 필요가 없습니다. oss 서비스에 직접 업로드합니다. 사용하기 더 편리합니다.
  2. 오디오를 생성하려면 더 많은 문서를 읽어야 합니다. 공식 SDK도 제공됩니다. 직접 사용할 수도 있습니다.

추천

출처juejin.im/post/7229368008363999292