AudioTrack的理解

06-01 1167阅读

采样率说的是一秒钟采样多少点

波形频率说的是一个采样周期内有多少个波形

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  
  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", "数据写入不完整");
    }
}
AudioTrack的理解
(图片来源网络,侵删)
AudioTrack的理解
(图片来源网络,侵删)
AudioTrack的理解
(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码