首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将16位PCM音频字节数组转换为double或float数组?

首先,我们需要了解16位PCM音频字节数组是如何表示的。PCM(Pulse Code Modulation,脉冲编码调制)是一种数字音频编码方式,它将连续的模拟音频信号转换为离散的数字信号。在PCM中,每个采样点用一个8位的二进制数表示,其中每个位表示一个采样点的幅度。因此,一个16位的PCM音频字节数组表示的是一个长度为16的采样序列。

要将16位PCM音频字节数组转换为double或float数组,可以使用以下步骤:

  1. 将16位PCM音频字节数组转换为32位无符号整数数组。由于PCM音频的数值范围是-128到127,因此可以将每个字节转换为相应的无符号整数,然后将其存储在一个32位的整数数组中。
  2. 将32位无符号整数数组转换为double或float数组。可以使用IEEE 754标准将32位无符号整数转换为double或float类型。该标准使用一个符号位、一个指数位和一个尾数位来表示一个浮点数。

以下是将16位PCM音频字节数组转换为double或float数组的示例代码:

代码语言:cpp
复制
#include <iostream>
#include <cstdint>
#include <cmath>

int main() {
    uint8_t pcm[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; // 16位PCM音频字节数组
    uint32_t pcm_32bit[16];

    for (int i = 0; i < 16; i++) {
        pcm_32bit[i] = (uint32_t)pcm[i] << 16;
    }

    double double_array[16];
    float float_array[16];

    for (int i = 0; i < 16; i++) {
        double_array[i] = static_cast<double>(pcm_32bit[i]) / 32768.0;
        float_array[i] = (float)double_array[i];
    }

    // 输出double数组
    for (int i = 0; i < 16; i++) {
        std::cout << double_array[i] << " ";
    }
    std::cout << std::endl;

    // 输出float数组
    for (int i = 0; i < 16; i++) {
        std::cout << float_array[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

该示例代码将16位PCM音频字节数组转换为32位无符号整数数组,然后使用IEEE 754标准将其转换为double数组和float数组。最后,它输出转换后的double数组和float数组。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

我的播放器0---音视频基础

:aac(有损压缩), MP3(有损), ape(无损), flac(无损) 音视频解封装和解码原理分析 [image.png] 像素格式 YUV比RGB更省空间 由于GPU擅长浮点运算, 所以YUVRGB...YUV [image.png] YUV444与RGB占用空间一样,都是每个像素3个字节 YUV420,四个Y共用一个UV,不是连续的Y共用,而是2*2的矩阵Y,共用UV Packed模式YUVYUVYUV...;Planar模式YYYUUUVVV,使用时,Packed模式存储在一个数组中,Planar模式存储在三个数组中。...PCM音频参数 采样率 sample_rate 44100 (CD) 通道 channels (左右声道) 样本大小(格式) sample_size enum AVSampleFormat {...AV_SAMPLE_FMT_DBL, ///< double AV_SAMPLE_FMT_FLTP, ///< float,planar }; 我们大部分声卡只支持

1.1K40

Android多媒体之SoundPool+pcm流的音频操作

零、前言 今天比较简单,先理一下录制和播放的四位大将 再说一下SoundPool的使用和pcmwav 讲一下C++文件如何在Android中使用,也就是传说中的JNI 最后讲一下变速播放和变调播放...四类.png ---- 1.AudioRecord(基于字节流录音) 优点: 对音频的实时处理,适合流媒体和语音电话 缺点: 输出的是PCM的语音数据,需要自己处理字节数据 如果保存成音频文件不能被播放器播放....mp3,.3gp,.aac,.mp4,.webm) 操作简单,不须自己处理字节流,传入文件即可 缺点: 无法实现实时处理音频,输出的音频格式少。...pcmwav.png ---- 四、变速播放 0.回顾一下第一天对声音的介绍:声音三要素 [1] 音量 :(响度)声波震动幅度---A--分贝 [2] 音调 : 声音频率(高音--频率快--声音尖 低音...自动生成.png ---- 五、音调的变化 本段参考慕课网免费教程:详见 1.Java类 两个临时的float数组是为了和C++的函数对应,用来处理数据流的 /** * 作者:张风捷特烈<

2.7K20
  • Java的基本数据类型short示例

    将short类型转换为其他类型在Java中,可以将short类型转换为其他类型,例如int、long、floatdouble等。...例如:short s = 100;int i = s;long l = s;float f = s;double d = s;在上面的示例中,我们将short类型的变量s分别转换为int、long、float...由于Java会将整数计算结果默认为int类型,因此需要使用强制类型转换将其转换为short类型。使用short类型处理音频数据由于short类型在内存中占用的空间较小,因此它通常用于处理音频数据。...然后,我们使用ByteBuffer.wrap方法将byte数组换为short数组,并指定字节顺序为LITTLE_ENDIAN。这是因为音频数据通常使用小端字节顺序进行编码。...然后,我们使用image.getRaster方法获取图像数据,并将其转换为short数组。这是因为图像数据通常使用16位灰度值进行编码。

    37220

    提取音频中的人声: 简明指南

    通过批处理利用GPU,性能可得到显著提升。特定条件下,ONNX版本甚至能达到4-5倍的加速。轻量级:JIT模型大小约为一兆字节,便于部署在资源有限的环境下。...实施步骤音频预处理:首先将原音频文件转换为单声道WAV格式,并统一采样率至16000Hz,这一步是为了确保模型能够正确处理音频数据。分帧处理:接着,我们将处理的音频分成多个帧,以便于模型逐一分析。...输出和保存:最后,筛选和合并后的人声片段将被保存为新的WAV文件,每个文件包含一个单独的说话片段,便于后续的处理分析。..., sample_rate = read_wave("temp.wav") audio_np = np.frombuffer(pcm_data, dtype=np.int16) # 将PCM数据转换为...numpy数组 frames = frame_generator(min_buffer_duration, pcm_data, sample_rate) segments = list(vad_collector

    1.1K10

    FLV协议5分钟入门浅析

    xxx n 类型为xxx的数组数组长度为n FLV header FLV header由如下字段组成,其中: 前三个字节内容固定是FLV 最后4个字节内容固定是9(对FLV版本1来说) 字段 字段类型...Audio tags 定义如下所示: 字段 字段类型 字段含义 SoundFormat UB4 音频格式,重点关注 10 = AAC 0 = Linear PCM, platform endian...对应的16进制数字(0x6F 0x6E 0x4D 0x65 0x74 0x61 0x44 0x61 0x74 0x61); 第二个AMF: 第1个字节:0x08,表示数组类型; 第2-5个字节:UI32...Tag) audiosamplerate DOUBLE 音频采样率 audiosamplesize DOUBLE 音频采样精度(参考Audio Tag) stereo BOOL 是否立体声 audiocodecid...DOUBLE 音频编解码器ID(参考Audio Tag) filesize DOUBLE 文件总得大小(字节) 写在后面 FLV协议本身不算复杂,理解上的困难,更多时候来自音视频编解码相关的知识,比如

    1.2K31

    Android音频编辑之音频转换PCM与WAV

    声道数和采样位数下的PCM编码 6. 音频文件解码 7. PCM文件WAV文件 现在先给出音频编辑的效果图,看看能不能提高大家的积极性~,哈哈 ? ? ?...因此,基于PCM编码的WAV被作为了一种中介的格式,常常使用在其他编码的相互转换之中,例如MP3换成WMA。...,表示DATA数据块长度,大小为 通道数 * 采样位数 2字节数据,内容为一个短整数,表示采样位数,即PCM位宽,通常为8位16位 4字节数据,内容为“data”,表示数据标记符 4字节数据,内容为一个整数...PCM文件WAV文件 现在我们得到了解码后的PCM文件,但是它是不可直接播放的,因为不带音频相关的格式信息,下面我们将PCM和指定的音频相关格式信息去转换得到一个可播放的WAV文件: /** * PCM...音频数据大小等信息填充进去,然后将这个44个字节数据拼接到PCM文件的开头,就得到了一个可播放的WAV文件了。

    5.9K30

    Android OpenGL ES 实现实时音频的可视化

    PCM 数据),也可以利用 OpenSLES 接口在 Native 层采集。...在使用 AudioRecorder 采集格式为 ENCODING_PCM_16BIT 音频数据需要了解:所采集到的音频数据在内存中字节的存放模式是小端模式(小端序)(Little-Endian),即低地址存放低位...、高地址存放高位,所以如果用 2 个字节换为 short 型的数据需要特别注意。...在 Native 层获取到 AudioRecorder 所采集的 PCM 音频数据(short 类型数组),然后根据数组的长度将纹理坐标系的 S 轴进行等距离划分,再以数组中的数值(类似声音的强度值)...构建条状图 由于“一帧”音频数据对应的数组比较大,绘制出来的音频条状图成了一坨 shi ,要想直观性地表现时域上的音频,还需要在绘制之前对数据进行适当的采样。

    1K20

    iOS下解码AAC并播放

    前言 今天我们介绍一下如何在iOS进行AAC解码,并使用AudioUnit播放解码后的PCM数据。 基本流程 iOS系统对音频处理做了三层封装。包括应用层、服务层和硬件层。如下图所示: ?...在输入时,表示outBuffer参数的大小(以字节为单位)。在输出时,表示实际读取的字节数。...outPacketDescriptions: 输出参数,读取数据包的描述数组。您在此参数中传递的数组必须足够大,以适应ioNumPackets参数中请求的数据包数量的描述。...下我们再看一下如何将解码后的 PCM 数据播放出来。 播放 PCM 我们使用 iOS 中的 AudioUnit 工具来播放 PCM。AudioUnit的使用步骤如下: 设置音频组件描述。...从 AAC 文件中读取一个 AAC 音频帧。 通过 AudioToolbox 解决 AAC 到 PCM。 通过 AudioUnit 播放 PCM。 循环执行 3-5步,直到文件结束。

    3.4K21

    OpenGL ES 实现实时音频的可视化

    可视化实时音频 1 音视频数据的采集 OpenGL 实现可视化实时音频的思路比较清晰,可以利用 Java 层的 API AudioRecorder 采集到未编码的音频裸数据(PCM 数据),也可以利用...在使用 AudioRecorder 采集格式为 ENCODING_PCM_16BIT 音频数据需要了解:所采集到的音频数据在内存中字节的存放模式是小端模式(小端序)(Little-Endian),即低地址存放低位...、高地址存放高位,所以如果用 2 个字节换为 short 型的数据需要特别注意。...在 Native 层获取到 AudioRecorder 所采集的 PCM 音频数据(short 类型数组),然后根据数组的长度将纹理坐标系的 S 轴进行等距离划分,再以数组中的数值(类似声音的强度值)...构建条状图 由于“一帧”音频数据对应的数组比较大,绘制出来的音频条状图成了一坨 shi ,要想直观性地表现时域上的音频,还需要在绘制之前对数据进行适当的采样。

    80340

    java:多字节数据类型数组(double,float,int,long)数组与byte数组的相互转换

    字节数据类型数组(double,float,int,long)数组数组和byte数组的相互转换都可以基于java.nio.Buffer实现....java.nio.DoubleBuffer对应double[], java.nio.FloatBuffer对应float[], java.nio.LongBuffer对应long[], java.nio.IntBuffer...对应int[] … byte[] double[],float[],int[]… byte[]double[],float[],int[]…很简单因为ByteBuffer本身就有asDoubleBuffer...,asFloatBuffer,asIntBuffer等方法,可以将ByteBuffer直接转换为DoubleBuffer,FloatBuffer,IntBuffer…; 代码实现如下: public...[],float[],int[]…byte[] 反过来,从多字节类型数组(double[],float[],long[]…)byte[]要稍麻烦一些,因为多字节类型数组对应的Buffer类并没提供asByteBuffer

    2.9K10

    Java基础语法简答题

    1.整型:byte(1个字节)、short(2个字节)、int(4个字节) 、long(8个字节) 2.浮点型:float(4个字节)、double(8个字节) 3.字符型:char(2个字节...integer 2.浮点型:floatFloat)、doubleDouble) 3.字符型:char(Character)                 Character       4.布尔型...3、循环结构 循环结构表示程序反复执行某个某些操作,直到某条件为假(或为真)时才可终止循环。...JAVA的自动拆箱装箱 自动装箱就是将基本数据类型自动的转换为对应的对象包装类型; 拆箱就是将对象包装类型转换为基本数据类型。...什么是自动类型强,什么是强制类型转换 自动类型强  范围小的数据类型自动转为为范围大的数据类型 强制类型转换,范围大的数据类型需要强制转换为范围小的数据类型 一维数组的三种创建方式 数据类型[] 数组

    83220

    FFmpeg之重采样demo解析!

    那是因为当原有的音频参数不满足我们实际要求时,比如说在FFmpeg解码音频的时候,不同的音源有不同的格式和采样率等,所以在解码后的数据中的这些参数也会不一致(最新的FFmpeg解码音频后,音频格式为AV_SAMPLE_FMT_TLTP...5、⾳频帧的数据量计算: ⼀帧⾳频的数据量(字节)=channel数 * nb_samples样本数 * 每个样本占⽤的字节数 如果该⾳频帧是FLTP格式的PCM数据,包含1024个样本,双声道,那么该...传递的输出的数组 int out_count, //输出的样本数量,不是字节数。单通道的样本数量。...const uint8_t **in , //输⼊的数组,AVFrame解码出来的DATA int in_count // 输⼊的单通道的样本数量。...请注意,如果提供的输出空间不⾜采样率转换完成 后,样本可能会在swr中缓冲,这需要“未来”样本。

    1.3K10

    【Android 高性能音频】AAudio 音频库 简介 ( AAudio 音频库简介 | 音频流 | 音频设备 | 共享模式 | 数据模式 )

    (int flags) ② 返回值 : 该方法返回音频设备的类型信息 ( AudioDeviceInfo ) 数组 , AudioDeviceInfo 类封装了音频设备的一系列信息 ; V ....AAUDIO_FORMAT_PCM_I16 : 数据类型是 int16_t , 表示每个样本由 2 个字节组成 ; b ....AAUDIO_FORMAT_PCM_FLOAT : 数据类型 float , 表示样本由浮点型数据表示 , 其取值范围 -1.0 ~ +1.0 ; ② 每帧采样数 : 每帧的采样个数 ; ③ 采样率 :...方法 , 可以获取 AAudio 音频流格式 ; 其结果可能是 AAUDIO_FORMAT_PCM_I16 AAUDIO_FORMAT_PCM_FLOAT ; aaudio_format_t dataFormat...= AAudioStream_getDataFormat(stream); 如 : 一个 PCM 音频流 , 16 bit 代表其每个样本有 16 位 ( 2 字节 ) , 44100 采样率 代表每秒钟有

    2.1K20

    Audio Unit播放aacm4amp3等文件

    Audio Unit播放PCM文件 Audio Unit录音(播放伴奏+耳返) 前面两篇介绍了Audio Unit播放PCM文件和边录边播,这次引入AudioConvert实现aac/m4a/mp3...AudioUnit不支持vbr的数据,也不支持从一个有损压缩格式转换为pcm或者pcm换为有损格式,对于有损格式的音频数据转换,需要用CoreAudio的Audio Converter API。...rate的改变、int到float的转变,最常见是将音频文件转成pcm播放; 下面Converter的两个格式: Source Format Sample Rate: 44100...,并读取对应的音频格式(AudioStreamBasicDescription);这里和Audio Unit播放PCM文件不同的是,还需要读取kAudioFilePropertyMaximumPacketSize...参数来辅助转换音频数据; 解决方案就是新建AudioStreamPacketDescriptions数组,并且在读取后赋值给outDataPacketDescription(见demo); 总结 AudioUnit

    3K100

    音频基础知识 - PCM 浅析

    后面经过电路放大后,就得到了模拟音频信号。 模拟音频:用连续的电流电压表示的音频信号,在时间和振幅上是连续。...要将连续的电压信号转换为PCM,需要进行采样和量化,我们一般从如下几个维度描述PCM: 采样频率(Sampling Rate):单位时间内采集的样本数,即:采样周期的倒数,指两个采样之间的时间间隔。..._16BIT } // 一个采样点占用的字节数 sampleByte = when (sampleBit) { AudioFormat.ENCODING_PCM...DO NOT USE if linking dynamically }; 复制代码 除了有有符号和无符号的区别外,还可以是short、floatdouble类型,采样位数也可以是8 bit、16 bit...所以为了更好的归一化处理,我们会对FFmpeg解码出的PCM进行重采样,统一采样成AV_SAMPLE_FMT_S16P格式,即:每个采样点是两字节的有符号short类型,并且按照Planar方式存储。

    3.9K21

    FLV 封装格式解析

    例如,0x01 表示 FLV 版本 1 TypeFlags UI8 b[0] 是否存在视频流b[2] 是否存在音频流其他字段保留,值为0 DataOffset UI32 FLV Header 长度(字节...FLV Tag FLV Tag 包含音频、视频脚本元数据、可选的加密元数据和 payload。...单位毫秒 StreamID UI24 总为 0 Header IF TagType == 8 AudioTagHeaderIF TagType == 9 VideoTagHeader 音频视频 TagHeader...TagHeader,后面紧跟跟着音频 Tag、视频 Tag 脚本 Tag,其中音频 Tag 和视频 Tag 都包含 TagHeader 和 TagBody 两部分,脚本 Tag 只有 TagBody...具体为:第 1 个字节值是 0x08,表示 Value 字段是数组类型。第 2-5 个字节为UI32类型值,表示数组元素个数。后面紧跟着数组数组元素为属性名称和值组成的对(键值对)。

    2.2K11
    领券