python计算pcm分贝值

import array
import numpy as np
import os
from math import log, exp

pcm_path = 'test_audio.pcm'#改
def readPCM(fileName):
    file = open(fileName, 'rb')
    pcm_data = array.array('h')
    size = int(os.path.getsize(fileName) / pcm_data.itemsize)
    pcm_data.fromfile(file, size)
    file.close()
    return np.array(pcm_data)#/ 32768

data = readPCM(pcm_path)
sum_ = 0
for k in range(len(data)):
	sum_+= abs(data[k])
sum_ = sum_/len(data)
print(len(data),max(data),min(data),sum(data>=0),len(data),data.shape)

fenbei = 20*log(max(data)/65535,10)
fenbei = 20*log(sum_,10)
print('fenbei = ',fenbei)



# import os
# from pydub import AudioSegment
# import wave
# pcm_path = r'test_audio.pcm'
# with open(pcm_path, 'rb') as pcmfile:
#     pcmdata = pcmfile.read()
# with wave.open(pcm_path[:-4] + '.wav', 'wb') as wavfile:
#     wavfile.setparams((1, 2, 16000, 0, 'NONE', 'NONE'))
#     wavfile.writeframes(pcmdata)

# def match_target_amplitude(sound, target_dBFS):
#     change_in_dBFS = target_dBFS - sound.dBFS
#     return sound.apply_gain(change_in_dBFS)

# # pcm2wav('test_audio.pcm','test_audio.wav')
# sound = AudioSegment.from_file('test_audio.wav', format="wav")  # 加载WAV文件
# # print(sound.channels)
# # normalized_sound = sound.apply_gain(-sound.max_dBFS)
# # print(normalized_sound)


# db = sound[0].dBFS  # 取得WAV文件的声音分贝值
# dbmax = sound[0].max_dBFS
# print('db = ',dbmax,db)
# normalized_sound = match_target_amplitude(sound, db + 10)  # db+10表示比原来的声音大10db,需要加大音量就加多少,反之则减多少
# normalized_sound.export(path2, format="wav")



参考网址:获取PCM音频数据的声音分贝值_kuangben2000的博客-CSDN博客

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用以下代码来计算列表的平均: ```python my_list = [1, 2, 3, 4, 5] avg = sum(my_list) / len(my_list) print("平均为:", avg) ``` 输出结果为: ``` 平均为: 3.0 ``` 其中,`sum(my_list)` 计算列表中所有元素的和,`len(my_list)` 计算列表中元素的数量。 ### 回答2: 要计算一个列表的平均,可以使用Python中的sum()函数和len()函数来实现。 首先,我们可以使用sum()函数来计算列表中所有元素的总和。sum()函数需要一个可迭代对象作为参数,并返回所有元素的总和。 然后,我们可以使用len()函数来计算列表中元素的数量。len()函数也需要一个可迭代对象作为参数,并返回元素的数量。 最后,我们将列表的总和除以元素的数量,即可得到列表的平均。 下面是一个示例代码来计算列表的平均: ```python def calculate_average(nums): total = sum(nums) count = len(nums) average = total / count return average nums = [1, 2, 3, 4, 5] average = calculate_average(nums) print("列表的平均为:", average) ``` 运行上述代码,输出结果为:列表的平均为: 3.0。 以上就是使用Python计算列表平均的方法,通过sum()函数和len()函数可以轻松地完成列表平均计算。 ### 回答3: 要计算一个列表的平均,可以使用Python编程语言中的以下步骤: 1. 定义一个函数,命名为calculate_average,该函数接收一个列表作为参数。 2. 在函数内部,首先定义一个变量sum,用来存储列表中所有元素的总和。初始为0。 3. 使用for循环遍历列表,将每个元素加到sum中。 4. 使用内置函数len()获取列表的长度,得到列表中元素的个数。 5. 使用sum除以列表长度,得到平均。 6. 最后,返回平均。 下面是一个完整的示例代码: ```python def calculate_average(lst): sum = 0 for num in lst: sum += num average = sum / len(lst) return average # 测试代码 list1 = [1, 2, 3, 4, 5] result = calculate_average(list1) print("平均为:", result) ``` 运行上述代码,将输出结果为"平均为: 3.0",即列表[1, 2, 3, 4, 5]的平均为3.0。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值