import struct
# datalike=b'\x00\x00\x02\xff\xff\xff' #b'\xff\xff\xff\xff\xff\xff'
import audioop class Handle_24bit_Data:
def __init__(self, bytes_data, handle_method):
self.bytes_data = bytes_data
self.handle_method = handle_method def handle_str_data(self):
return audioop.byteswap(self.bytes_data,3) def iter_bytes_data(self,data):
datalist = list(struct.iter_unpack('>BH', data))
return datalist def make_int24_value(self, data_tp):
low_int = data_tp[1]
low_pos = hex(low_int)[2:]
low_pos_len = len(low_pos)
if low_pos_len < 4:
low_pos = (4 - low_pos_len) * ''+low_pos str_data = ''.join([hex(data_tp[0]), low_pos])
hex_value = int(str_data, base=16)
maxvalue=2<<23
comvalue=(2<<22)-1
if hex_value<=comvalue:
return hex_value
else:
return hex_value-maxvalue def swap_number(self,hexnumber):
#to change signed value to unsigned
if hexnumber>=0:
return hexnumber
if hexnumber<0:
return hexnumber+(2<<23) def split_int24(self, hex_num):
hex_str_nbytes = hex(hex_num)
if len(hex_str_nbytes) > 6:
hex_str_1bytes = hex_str_nbytes[:-4]
hex_str_2bytes = hex_str_nbytes[-4:]
return int(hex_str_1bytes, base=16), int(hex_str_2bytes, base=16)
else:
return 0,int(hex_str_nbytes, base=16) def pack_data(self, tp):
return struct.pack('>BH', *tp) def __call__(self):
data=self.handle_str_data()
data_generator = self.iter_bytes_data(data)
int24_datalist = list(map(self.make_int24_value, data_generator)) # get int value list
handled_data = map(self.handle_method, int24_datalist) # handle int data
swaped_data=map(self.swap_number,handled_data)
hex_tuple_list = list(map(self.split_int24, swaped_data)) # split to 8bit and 16bit
int24_bitdata = map(self.pack_data, hex_tuple_list)
print(int24_bitdata)
return audioop.byteswap(b''.join(list(int24_bitdata)), 3) if __name__ == "__main__":
def halflower(data):
return int(data) datalike = b'\xb9\x0f\x00' print(list(Handle_24bit_Data(datalike, halflower)())) # print(list(hex24_bit_datalist))
# print(list(handled_data))
# print(list(hex24_tuple_list))
# print(list(hex24_bit_data))

使用python进行24bit音频处理的更多相关文章

  1. [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作

    [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作 转载请注明出处 一.关于为什么用pymediainfo以及pymediainfo的安装 使用python对视频/音频文件进行详 ...

  2. python脚本实现音频m4a格式转成MP3格式

    群里看到有人询问:谁会用python将微信音频文件后缀m4a格式转成mp3格式,毫不犹豫回了句:我会.然后就私下聊起来了 解决方法介绍如下: 工具:windows系统,python2.7,转换库ffm ...

  3. Python中的音频和数字信号处理(DSP)

    翻译自Python For Engineers. 1. 创建一个正弦波 在这个项目中,我们将创建一个正弦波,并将其保存为wav文件. 但在此之前,你应该知道一些理论. 频率:频率是正弦波重复一秒的次数 ...

  4. python 读取wav 音频文件的两种方式

    python 中,常用的有两种可以读取wav音频格式的方法,如下所示: import scipy from scipy.io import wavfile import soundfile as sf ...

  5. 用python批量修改音频ID3等标签

    使用的模块是eyeD3 一.eyeD3的安装 1.安装msgpack,不安装会报错distributed 1.21.8 requires msgpack, which is not installed ...

  6. Python音频处理(一)音频基础知识-周振洋

    1.声音音频基础知识 (1)声音是由震动产生,表现为波的形式.波有频率,振幅等参数.对于声波而言:频率越大,音调越高,反之越低.振幅越大,声音越大,反之越小. (2)采样率,帧率:波是连续(无穷)的, ...

  7. 使用Python音频双通道分离

    某些音频是双方对话,有可能需要对音频作通道的分离. 示例代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- """ 音 ...

  8. 太赞了!Python竟可以轻松实现音频格式无损转换

    大家好,我是辰哥 辰哥在平时处理音频格式的时候,需要去下载各种音频处理软件(专业一点的软件还要收费),掌握Python技术的我们,知道Python是万能的(哈哈哈,开个玩笑).今天辰哥就来教大家用Py ...

  9. Python音频操作+同时播放两个音频

    对于python而言,音频的操作可以使用pygame包中的sound 和 music对象,本博客主要讲解这两个对象. 1.sound对象 Sound对象适合处理较短的音乐,如OGG和WAV格式的音频文 ...

随机推荐

  1. hadoop搭建笔记(一)

    环境:mac/linux hadoop版本:3.1.1 安装特性:非HA 准备: 1. jdk8以上 2. ssh 3. 下载hadoop安装包 配置文件,这里都只有简易配置: 1. core-sit ...

  2. T57274 黑暗城堡

    传送门 思路: 先求出各个点到 1 的最短路径.分别用两个数组将最短路径记录下来(一个要用来排序).按排序后的 dis 值从小到大枚举各点加入树有多少种方案,最后根据乘法原理把各个点的方案数乘起来就是 ...

  3. 敏捷开发——User Story

    敏捷开发流程: 1.我们首先需要确定一个Product Backlog(按优先顺序排列的一个产品需求列表),这个是由Product Owner 负责的: 2.Scrum Team根据Product B ...

  4. PAT 1136 A Delayed Palindrome

    1136 A Delayed Palindrome (20 分)   Consider a positive integer N written in standard notation with k ...

  5. 命令“copy /V 已退出,代码为 1

    这个错误出现在vs生成事件里的命令行里. 第一种:简单粗暴直接清空命令行 第二种:通过输出的打印结果来分析: 比如我的出现这个原因一般有两种情况: 第一种:是可能我引用的共享盘Z盘无法连接: 第二种: ...

  6. 关于HttpClient上传中文乱码的解决办法

    使用过HttpClient的人都知道可以通过addTextBody方法来添加要上传的文本信息,但是,如果要上传中文的话,或还有中文名称的文件会出现乱码的问题,解决办法其实很简单: 第一步:设置Mult ...

  7. C++标准模板库(STL)之Queue

    1.Queue的常用用法 queue:队列,实现的一个先进先出的容器. 1.1.queue的定义 使用queue,首先要加头文件#include<queue>和using namespac ...

  8. 利用itext将html页面转成pdf(不模糊)

    1.maven项目进入依赖 <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId> ...

  9. Python3自定义日志类教程

    一.说明 Python3的logging功能是比较丰富的支持不同层次的日志输出,但或是我们想在日志前输出时间.或是我们想要将日志输入到文件,我们还是想要自定义日志类. 之前自己也尝试写过但感觉文档太乱 ...

  10. 学习创建spring boot

    一.什么是spring boot? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开 ...