当前位置: 首页 > news >正文

AudioTrack的理解

采样率说的是一秒钟采样多少点
波形频率说的是一个采样周期内有多少个波形
pcm编码说的是 16 还是8 直接决定write的时候使用short还是byte

‌一、初始化配置

  1. ‌参数设定‌
    需定义音频格式、采样率及缓冲区大小,确保符合硬件支持范围
// 音频参数配置
int sampleRate = 44100;          // 标准采样率
int channelConfig = AudioFormat.CHANNEL_OUT_MONO;  // 单声道
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;  // 16位PCM编码
int bufferSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat
);  // 最小缓冲区大小
  1. ‌创建AudioTrack实例‌
    使用流模式(MODE_STREAM)支持实时数据写入
AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,    // 音频流类型sampleRate,channelConfig,audioFormat,bufferSize,AudioTrack.MODE_STREAM        // 流式模式
);// 检查初始化状态
if (audioTrack.getState() != AudioTrack.STATE_INITIALIZED) {throw new IllegalStateException("AudioTrack初始化失败");
}

二、音频数据生成与写入‌

  1. ‌生成PCM数据‌
    动态创建指定频率的音频波形(如440Hz正弦波)
short[] generateSineWave(int freq, int durationMs) {int numSamples = durationMs * sampleRate / 1000;short[] buffer = new short[numSamples];double angle = 0;double delta = 2 * Math.PI * freq / sampleRate;for (int i = 0; i < numSamples; i++) {buffer[i] = (short)(Math.sin(angle) * Short.MAX_VALUE);angle += delta;}return buffer;
}
  1. ‌实时数据写入‌
    通过循环写入实现持续播放
short[] audioData = generateSineWave(440, 1000);  // 生成1秒音频
audioTrack.play();  // 启动播放线程// 持续写入数据(示例为简单循环)
while (isPlaying) {int written = audioTrack.write(audioData, 0, audioData.length);if (written != audioData.length) {Log.e("AudioTrack", "数据写入不完整");}
}

相关文章:

  • 用豆包写单元测试
  • 服务器定时任务查看和编辑
  • 理解并解决高丢包率问题,构建清晰流畅的实时音视频通话
  • 二重积分 -- 立体的体积
  • 网络安全十大漏洞
  • vue3+Pinia+element-plus 后台管理系统项目实战
  • CRM系统的数据库结构详细设计
  • js中common.js和ECMAScript.js区别
  • 【华为开发者空间 x DeepSeek】服务器运行Ollama并在本地调用
  • 【计算机网络】4网络层①
  • Springboot 项目一启动就获取HttpSession
  • React 泛型组件:用TS来打造灵活的组件。
  • 新能源汽车霍尔线束介绍
  • 深入解析 Tomcat 线程管理机制:从设计思想到性能调优
  • WPS自动换行
  • VR 汽车:引领生产与设计的革命性飞跃​
  • RISC-V 开发板 MUSE Pi Pro 搭建 Spacengine AI模型部署环境
  • 在部署了一台mysql5.7的机器上部署mysql8.0.35
  • 湖北理元理律师事务所:债务优化中的“生活锚点”设计
  • 生成式引擎优化(GEO):构建AI时代的内容霸权
  • dw 做网站模板/长尾关键词网站
  • 网站数据模板/seo查询工具
  • 兰州有做百度网站的吗/百度搜索热词查询
  • 龙口网站建设联系电话/网站检测
  • 行业自助建站/网站在线客服系统免费
  • 网站和管理系统的区别/链接怎么做