IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 实现语音通道时间延迟 -> 正文阅读

[C++知识库]实现语音通道时间延迟

输入4通道数据,将第三和第四通道的数据延迟10ms,同时加入时间戳,依赖开源循环buffer

1. C++实现

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>
#include "speech/circ_buff.h"

//16 * 16 * 2 * 4
#define SIZE_16ms 2048
#define SIZE_10ms 1280

FILE *file_in;
FILE *file_out;
int pcm_size;
char *pcm_buffer;
char *audio_10ms;
char *audio_16ms;
tCircularBuffer *audio_buffer_tmp;

void AudioInit() {

  file_in = fopen("test_audio/2.pcm", "rb");
  if(!file_in) {
    std::cout << "open audio file_in failed !!!" << std::endl;
  }

  file_out = fopen("test_audio/out2_1.pcm", "wb");
  if(!file_out) {
    std::cout << "open audio file_out failed !!!" << std::endl;
  }
  // 100ms 16/1ms 16bit 4ch save data temporary
  audio_buffer_tmp = CreateCircularBuffer(100 * 16 * 2 * 4);
  audio_10ms = reinterpret_cast<char *>(malloc(SIZE_10ms));
  audio_16ms = reinterpret_cast<char *>(malloc(SIZE_16ms));
  memset(audio_10ms, 0, SIZE_10ms);
  memset(audio_16ms, 0, SIZE_16ms);
  FillBuffer(audio_buffer_tmp, audio_10ms, SIZE_10ms);

  pcm_size = 8 * SIZE_16ms;
  pcm_buffer = new char[pcm_size];
}

void AudioProcess() {
  while(fread(pcm_buffer, 1, pcm_size, file_in)){
	char tmp[8 + 512 * 4];
    struct timeval start_time;
    gettimeofday(&start_time, NULL);
    int64_t timestamp = start_time.tv_sec * 1000 + start_time.tv_usec / 1000;
    for(int i = 0; i < 8; ++i) {
	  // add delay time, first write data to cir_buff
      FillBuffer(audio_buffer_tmp, 
                  reinterpret_cast<char *>(pcm_buffer) + SIZE_16ms * i, SIZE_16ms);
      // read 16ms data
      ReadBuffer(audio_buffer_tmp, audio_16ms, SIZE_16ms);
      for(int j = 0; j < SIZE_16ms / 8; ++j) {
        pcm_buffer[i * SIZE_16ms + j * 8 + 4] = audio_16ms[j * 8 + 4];
        pcm_buffer[i * SIZE_16ms + j * 8 + 5] = audio_16ms[j * 8 + 5];
        pcm_buffer[i * SIZE_16ms + j * 8 + 6] = audio_16ms[j * 8 + 6];
        pcm_buffer[i * SIZE_16ms + j * 8 + 7] = audio_16ms[j * 8 + 7];
      }
	  // add time stamp
      memcpy(tmp, reinterpret_cast<char *>(&timestamp), sizeof(timestamp));
      memcpy(tmp + sizeof(timestamp),
             reinterpret_cast<char *>(pcm_buffer) + SIZE_16ms * i, SIZE_16ms);
      timestamp += 16;
    }
    fwrite(pcm_buffer, 1, SIZE_16ms * 8, file_out); 
  }
}

void AudioEnd() {
  free(audio_10ms);
  free(audio_16ms);
  fclose(file_in);
  fclose(file_out);
  DestroyCircularBuffer(audio_buffer_tmp);
  //delete[] pcm_buffer;
  //pcm_buffer = nullptr;
}

int main(int argc, char *argv[]) {
  std::cout << "start lch !!!" << std::endl;
  AudioInit();
  AudioProcess();
  AudioEnd();
  std::cout << "end lch !!!" << std::endl;
  return 0;
}
  1. cmake编译
include_directories(${PROJECT_SOURCE_DIR})
set(SDK_AUDIO_DEMO_SRC
        ${PROJECT_SOURCE_DIR}/demo/test.cc
        ${PROJECT_SOURCE_DIR}/src/circ_buff.c)

add_executable(test_audio ${SDK_AUDIO_DEMO_SRC})
  1. g++编译
g++ -g -o test ./test.cc ../src/circ_buff.c -I ../include/
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-13 17:16:52  更:2021-07-13 17:19:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 0:04:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码