1. import struct
  2. # datalike=b'\x00\x00\x02\xff\xff\xff' #b'\xff\xff\xff\xff\xff\xff'
  3. import audioop
  4.  
  5. class Handle_24bit_Data:
  6. def __init__(self, bytes_data, handle_method):
  7. self.bytes_data = bytes_data
  8. self.handle_method = handle_method
  9.  
  10. def handle_str_data(self):
  11. return audioop.byteswap(self.bytes_data,3)
  12.  
  13. def iter_bytes_data(self,data):
  14. datalist = list(struct.iter_unpack('>BH', data))
  15. return datalist
  16.  
  17. def make_int24_value(self, data_tp):
  18. low_int = data_tp[1]
  19. low_pos = hex(low_int)[2:]
  20. low_pos_len = len(low_pos)
  21. if low_pos_len < 4:
  22. low_pos = (4 - low_pos_len) * ''+low_pos
  23.  
  24. str_data = ''.join([hex(data_tp[0]), low_pos])
  25. hex_value = int(str_data, base=16)
  26. maxvalue=2<<23
  27. comvalue=(2<<22)-1
  28. if hex_value<=comvalue:
  29. return hex_value
  30. else:
  31. return hex_value-maxvalue
  32.  
  33. def swap_number(self,hexnumber):
  34. #to change signed value to unsigned
  35. if hexnumber>=0:
  36. return hexnumber
  37. if hexnumber<0:
  38. return hexnumber+(2<<23)
  39.  
  40. def split_int24(self, hex_num):
  41. hex_str_nbytes = hex(hex_num)
  42. if len(hex_str_nbytes) > 6:
  43. hex_str_1bytes = hex_str_nbytes[:-4]
  44. hex_str_2bytes = hex_str_nbytes[-4:]
  45. return int(hex_str_1bytes, base=16), int(hex_str_2bytes, base=16)
  46. else:
  47. return 0,int(hex_str_nbytes, base=16)
  48.  
  49. def pack_data(self, tp):
  50. return struct.pack('>BH', *tp)
  51.  
  52. def __call__(self):
  53. data=self.handle_str_data()
  54. data_generator = self.iter_bytes_data(data)
  55. int24_datalist = list(map(self.make_int24_value, data_generator)) # get int value list
  56. handled_data = map(self.handle_method, int24_datalist) # handle int data
  57. swaped_data=map(self.swap_number,handled_data)
  58. hex_tuple_list = list(map(self.split_int24, swaped_data)) # split to 8bit and 16bit
  59. int24_bitdata = map(self.pack_data, hex_tuple_list)
  60. print(int24_bitdata)
  61. return audioop.byteswap(b''.join(list(int24_bitdata)), 3)
  62.  
  63. if __name__ == "__main__":
  64. def halflower(data):
  65. return int(data)
  66.  
  67. datalike = b'\xb9\x0f\x00'
  68.  
  69. print(list(Handle_24bit_Data(datalike, halflower)()))
  70.  
  71. # print(list(hex24_bit_datalist))
  72. # print(list(handled_data))
  73. # print(list(hex24_tuple_list))
  74. # 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. node 之 Buffer 笔记

    1. Buffer 相关 js 最初是被设计来处理 html的,因此它不善于处理二进制数据,只有数值和字符串类型.而 node 是基于 js 的,因为 node 需要实现一些譬如数据库通信.操作图像及 ...

  2. 2019 To do List

    做好测试不是靠编程,而是靠的是严禁的作风,慎密的逻辑思维,适合的测试流程. 内心有些迷茫的时候,迷茫的是作为测试既然要学那么多编程,为什么不直接去干开发呢?学了编程,用不上,到底有什么用呢? 看了这句 ...

  3. window上安装kafka(单机)

    1.第一步骤,先安装JDK,请参考:https://www.cnblogs.com/xubao/p/10692861.html 2.第二步骤,安装zookeeper,请参考:https://www.c ...

  4. VGG

    2019-04-08 13:30:58 VGG模型是2014年ILSVRC竞赛的第二名,第一名是GoogLeNet.但是VGG模型在多个迁移学习任务中的表现要优于googLeNet.而且,从图像中提取 ...

  5. Spring Cloud 升级最新 Finchley 版本,踩了所有的坑!

    Spring Boot 2.x 已经发布了很久,现在 Spring Cloud 也发布了 基于 Spring Boot 2.x 的 Finchley 版本,现在一起为项目做一次整体框架升级. 升级前 ...

  6. python实现汉诺塔问题

    汉诺塔问题可以简单描述成为将a柱子上的圆盘按一定规则借助b柱子完美地复制到c柱子上.现假设有a,b,c三根柱子,a柱子上的圆盘从上到下依次标号为1,2,3,……,n,且为递增状态.规则:每次移动一个盘 ...

  7. win10搭建svn服务

    1,安装服务器版svnhttps://tortoisesvn.net/downloads.html查看版本 svn --version 2,创建版本仓库提倡创建公共仓库,那么可以多次增加项目svnad ...

  8. exe所在路径

    procedure TForm1.btn1Click(Sender: TObject); begin //完整路径 E:\UsrSoft\Desktop\FileNameDemo\Project1.e ...

  9. EF - Code First 开发方式

    概述: 本节介绍通过 Code First 开发建立新数据库. 借助 Code First 可以选择使用类的特性和属性执行配置,或者使用 XML 配置文件来配置,当然也可以使用 Fluent API ...

  10. css实现横向带箭头步骤流程效果

    通过纯css实现圆角的步骤流程效果,扩展性强,可以随意增加减少数量,兼容性ie6+. 具体代码: <style type="text/css"> ul{margin:0 ...