音频数据的处理

前言

在研究android音频架,音频驱动等的时候,就有涉及到dump音频数据debug,重采样,downmixer,位深转换的处理,那这些的操作原理以及相关算法是如何实现的呢?

带着这个问题,开始探讨音频数据的如下几个问题

  1. 音频数据的特征,与存储等基本概念
  2. 音频数据的dump方法
  3. 重采样
  4. downmix
  5. 存储位深转换
  6. 参考文章列表

位深的装换
声道数的装换

1. 音频数据的特征,与存储等基本概念

PCM的一些计算

一个PCM文件的大小(dataSize),存储位深(byteCount*8),采样率,PCM时长(duration)之间的关系:

dataSize=channalCount *byteCount *sampleRate *duration

如果考虑帧数帧的大小,文件帧数(frameCount),帧长度(frameSize) 计算关系如下:

frameCount = sampleRate * duration
frameCount = dataSize / (channelCount*byteCount)
frameSize = dataSize/frameCount = channelCount*byteCount

不过以上考虑帧长度的时候,需要注意是考量的PCM文件,如果是WAVE等格式,帧长度还需要考虑每一帧的填充帧头信息(headerInfo)大小

PCM的存储格式

属于左右声道交叉存储

这里写图片描述

常用的存储位深,就是8,16, 32位,分别对应的样本空间大小如下:
样本大小 —— 数据格式 —— 最小值 ——最大值
8位PCM —— unsigned int ——0—— 225
16位PCM —— int—— -32767 —— 32767

存储方式

大端存储
一种是将高序列字节存储在起始地址,这称为小端(little-endian)字节序

小端存储
一种是将低序字节存储在起始地址(小地址),这称为小端(little-endian)字节序

代码检查:

short test = 0x1234;
printf("test: %x, base: %x, high:%x   \n",test,*(char*)(&test),*((char*)(&test)+1));
//test: 1234, base: 34, high:12 

printf("test addr:%p ,base:%p,high :%p \n",&test,(
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VGG是一种用于图像分类任务的卷积神经网络,不适用于音频数据处理。然而,我们可以对音频数据进行相应的预处理,以适应VGG网络的输入要求。 音频数据通常以波形形式表示,可以使用信号处理技术将其转换为频谱图。一种常见的方法是通过短时傅里叶变换(Short-time Fourier Transform,STFT)将音频信号分解为时频矩阵。同时,为了适应VGG网络的输入尺寸,我们需要对频谱图进行调整。 下面是一个使用Python语言和Librosa库实现VGG处理音频数据的简单示例代码: ``` import librosa import numpy as np from keras.applications.vgg16 import VGG16 from keras.preprocessing import image from keras.applications.vgg16 import preprocess_input # 加载音频文件 audio_path = 'audio.wav' audio_data, sr = librosa.load(audio_path) # 将音频数据转换成频谱图 stft = np.abs(librosa.stft(audio_data)) # 调整频谱图尺寸以适应VGG网络的要求 resized_stft = image.array_to_img(stft, scale=False).resize((224, 224)) resized_stft = image.img_to_array(resized_stft) # 预处理频谱图 preprocessed_stft = preprocess_input(resized_stft) # 加载VGG模型 model = VGG16(weights='imagenet', include_top=True) # 使用VGG模型对预处理后的频谱图进行分类 predictions = model.predict(np.array([preprocessed_stft])) # 输出预测结果 print(predictions) ``` 需要注意的是,由于VGG网络是为图像分类任务设计的,因此使用图像数据进行音频的频谱图表示只是一种简单的处理方式。对于更复杂的音频处理任务,可能需要使用更专业的方法和模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值