迷你音频库及其解码器的python绑定(mp3、flac、ogg vorbis、wav)

miniaudio的Python项目详细描述


sayThanks最新版本生成状态

python迷你音频

多平台音频播放、录制、解码和样本格式转换 Linux(包括覆盆子PI)、Windows、Mac和其他系统,如BSD。

本模块提供:

  • MiniAudio跨平台声音播放、录制和转换库
  • 它的wav、flac、vorbis和mp3解码器
  • 这些库中提供的大多数函数的python绑定:
    • 读取和解码音频文件
    • 获取音频文件属性(如持续时间、频道数、采样率)
    • 转换示例格式
    • 流式播放大型音频文件
    • 音频播放
    • 录音

这个库旨在为miniaudio c库提供pythonic接口。 其中一些主要方面是:

  • python枚举,而不只是一些特殊值的整数,
  • 表示库的主要功能的几个类,
  • 音频播放、录制和转换流的生成器
  • 示例数据通常以pythonarray的形式存在,并带有适当大小的元素 取决于样本宽度(而不是原始字节块)

需要Python3.5或更新版本。也适用于pypy3(因为它使用cffi)。

该库主要以源代码形式分发,因此您需要一个C编译器来构建和安装 (注意:安装脚本负责实际的编译过程,不需要担心自己编译的事情)。 对于linux和mac,这应该不是问题。对于Windows用户,如果正确的二进制安装 在pypi上不可用,您还需要编译它,这可能有点麻烦。 在这个平台上。您必须确保所需的工具允许您编译python扩展模块 已安装(Visual Studio或VC++生成工具)。

这些python绑定、miniaudio和解码器的软件许可证:mit

合成器,modplayer?

如果你喜欢这个库,你也可能对我的软件fm合成器感兴趣。 或者使用libxmp的mod player

示例

最基本的音频文件播放

importminiaudiostream=miniaudio.stream_file("samples/music.mp3")device=miniaudio.PlaybackDevice()device.start(stream)input("Audio file playing in the background. Enter to stop playback: ")device.close()

播放不支持的文件格式

本例使用ffmpeg作为外部工具以某种格式解码音频文件 miniAudio本身无法解码(本例中为m4a/aac):

importsubprocessimportminiaudiochannels=2sample_rate=44100sample_width=2# 16 bit pcmfilename="samples/music.m4a"# AAC encoded audio filedefstream_pcm(source):required_frames=yieldb""# generator initializationwhileTrue:required_bytes=required_frames*channels*sample_widthsample_data=source.read(required_bytes)ifnotsample_data:breakprint(".",end="",flush=True)required_frames=yieldsample_datadevice=miniaudio.PlaybackDevice(ma_output_format=miniaudio.ma_format_s16,nchannels=channels,sample_rate=sample_rate)ffmpeg=subprocess.Popen(["ffmpeg","-v","fatal","-hide_banner","-nostdin","-i",filename,"-f","s16le","-acodec","pcm_s16le","-ac",str(channels),"-ar",str(sample_rate),"-"],stdin=None,stdout=subprocess.PIPE)stream=stream_pcm(ffmpeg.stdout)next(stream)# start the generatordevice.start(stream)input("Audio file playing in the background. Enter to stop playback: ")device.close()ffmpeg.terminate()

API

枚举类后端 名称:wasapidsoundwinmmcoreadiosndioaudio4osspulseaudioalsajackaaudioopenslwebaudionull

< Buff行情>

要使用的操作系统音频后端(只有一个子集可用)

枚举类>频道混合模式 名称:矩形简单自定义权重

< Buff行情>

转换时如何混合频道

枚举类设备类型 名称:回放捕获双工

< Buff行情>

音频设备的类型

枚举类dithermode 名称:矩形三角形

< Buff行情>

转换时如何抖动

枚举类文件格式 姓名:未知wavflacvorbismp3

< Buff行情>

音频文件格式

枚举类sampleformat 名称:未知未签名8已签名16已签名24已签名32浮动32

< Buff行情>

内存中的示例格式

枚举类seekorigin 名称:开始当前

< Buff行情>

如何在源中查找()

枚举类threadpriority 名称:空闲最低正常最高实时

< Buff行情>

工作线程的优先级(默认值=最高值)

函数转换帧(from_fmt:miniaudio.sampleformat,from_numchannels:int,from_samplerate:int,sourcedata:bytes,to_fmt:miniaudio.sampleformat,to_numchannels:int,to_samplerate:int)->;bytearray

< Buff行情>

将具有一定数量通道的源示例格式的音频帧转换为另一个示例 格式化并可能向下/向上混合频道的数量。

函数转换采样格式(从_fmt:miniaudio.sample format,sourcedata:bytes,到_fmt:miniaudio.sampleformat,dither:miniaudio.dithermode=<;dithermode.none:0>;)->;字节数组

< Buff行情>

将pcm样本的原始缓冲区转换为另一个样本格式。结果作为另一个返回 原始pcm样本缓冲区

函数解码(数据:字节,输出格式:miniaudio.sample format=<;sampleformat.signed16:2>;,通道:int=2,采样率:int=44100,抖动:miniaudio.dithermode=<;dithermode.none:0>;)->;miniaudio.decodedsoundfile < Buff行情>

方便的功能,可以将内存中任何支持的音频文件解码为您的 所选格式。

函数解码文件(文件名:str,输出格式:miniaudio.sample format=<;sampleformat.signed16:2>;,通道:int=2,采样率:int=44100,抖动:miniaudio.dithermode=<;dithermode.none:0>;)->;miniaudio.decodedsoundfile < Buff行情>

方便的功能可将任何支持的音频文件解码为所选格式的原始PCM样本。

函数flac_get_file_info(文件名:str)->;miniaudio.soundfileinfo

< Buff行情>

获取有关音频文件(flac格式)的一些信息。

函数flac_get_info(数据:字节)->;miniaudio.soundfileinfo

< Buff行情>

获取有关音频数据的一些信息(flac格式)。

函数flac_read_f32(数据:字节)->;miniaudio.decodedsoundfile

< Buff行情>

读取并解码整个flac音频文件。结果样本格式为32位浮点。

函数flac_read_file_f32(文件名:str)->;miniaudio.decodedsoundfile

< Buff行情>

读取并解码整个flac音频文件。结果样本格式为32位浮点。

函数flac_read_file_s16(文件名:str)->;miniaudio.decodedsoundfile

< Buff行情>

读取并解码整个flac音频文件。结果样本格式为16位有符号整数。

函数flac_read_file_s32(文件名:str)->;miniaudio.decodedsoundfile

< Buff行情>

读取并解码整个flac音频文件。结果样本格式为32位有符号整数。

函数flac_read_s16(数据:字节)->;miniaudio.decodedsoundfile

< Buff行情>

读取并解码整个flac音频数据。结果样本格式为16位有符号整数。

函数flac_read_s32(数据:字节)->;miniaudio.decodedsoundfile

< Buff行情>

读取并解码整个flac音频数据。结果样本格式为32位有符号整数。

函数flac_stream_文件(文件名:str,frames_to_read:int=1024,seek_frame:int=0)->;生成器[数组,非类型,非类型]

< Buff行情>

将flac音频文件作为交错16位有符号整数采样阵列段流。这种用途 固定块大小,不能用作通用小型音频解码器输入流。考虑使用 改为stream_file()。

函数获取文件信息(文件名:str)->;miniaudio.soundfileinfo

< Buff行情>

获取有关音频文件的一些信息。

函数mp3获取文件信息(文件名:str)->;miniaudio.soundfileinfo

< Buff行情>

获取有关音频文件(MP3格式)的一些信息。

功能MP3获取信息(数据:字节)->;迷你音频。声音文件信息

< Buff行情>

获取有关音频数据(MP3格式)的一些信息。

函数MP3读取_f32(数据:字节,想要的频道:int=0,想要的采样率:int=0)->;迷你音频。解码声音文件

< Buff行情>

读取和解码整个MP3音频数据。结果样本格式为32位浮点。

函数MP3读取文件_f32(文件名:str,want_nchannels:int=0,want_sample_rate:int=0)->;miniAudio.decodedsoundfile

< Buff行情>

读取并解码整个MP3音频文件。结果样本格式为32位浮点。

函数mp3读取文件

< Buff行情>

读取并解码整个MP3音频文件。结果样本格式为16位有符号整数。

函数mp3读取16(数据:字节,要通道:int=0,要采样率:int=0)->;迷你音频。解码声音文件

< Buff行情>

读取和解码整个MP3音频数据。结果样本格式为16位有符号整数。

函数MP3流文件(文件名:str,frames-to-u read:int=1024,want-nchannes:int=0,want-sample-rate:int=0,seek-frame:int=0)->;生成器[数组,非类型,非类型]

< Buff行情>

将MP3音频文件作为交错16位有符号整数采样阵列段进行流式处理。这种用途 固定块大小,不能用作通用小型音频解码器输入流。考虑使用 改为stream_file()。

函数读取文件(filename:str,convert_to_16bit:bool=false)->;miniaudio.decodedsoundfile

< Buff行情>

读取并解码整个音频文件。MiniAudio将尝试准确返回声音数据 与文件中的格式相同。除非将convert_convert_to_16bit设置为true,否则结果是 始终为16位样本格式。

函数stream_any(源:miniaudio.streamablesource,源格式:miniaudio.fileformat=<;fileformat.unknown:0>;,输出格式:miniaudio.sampleformat=<;sampleformat.signed16:2>;,n通道:int=2,采样率:int=44100,帧读取:int=1024,抖动:miniaudio.dithermode=<;dithermode.none:0>;,seek_frame:int=0)->;生成器[数组,int,nonetype]

< Buff行情>

方便的生成器功能,用于解码和流式传输任何编码音频数据源(例如 网络流)。流结果是所选格式的原始pcm样本块。如果你发送 在生成器中输入数字,而不仅仅是在生成器上使用next(),您将得到给定的 帧,而不是默认配置的数量。这对于插入此流特别有用 进入一个音频设备回调,该回调要求每次调用的帧数可变。

函数流文件(文件名:str,输出格式:miniaudio.sample format=<;sampleformat.signed16:2>;,通道:int=2,采样率:int=44100,帧到读取:int=1024,抖动:miniaudio.dithermode=<;dithermode.none:0>;,查找帧:int=0)->;生成器[array.array,int,nonetype]

< Buff行情>

方便的生成器函数,将任何支持的音频文件解码并流式处理为原始pcm的块。 所选格式的示例。如果您将一个数字发送到生成器中,而不是仅仅使用 下一步,您将得到给定的帧数,而不是默认的配置数量。这个 将此流插入到需要变量的音频设备回调中特别有用 每次呼叫的帧数。

函数流存储(数据:字节,输出格式:miniaudio.sample format=<;sampleformat.signed16:2>;,通道:int=2,采样率:int=44100,帧到读取:int=1024,抖动:miniaudio.dithermode=<;dithermode.none:0>;)->;生成器[数组,int,非键入]

< Buff行情>

方便的生成器函数,将内存中任何支持的音频文件解码并流式处理为块 所选格式的原始pcm样本。如果你在生成器中发送一个数字而不是 对它使用next()可以得到给定的帧数,而不是默认的配置 数量。这对于将此流插入到需要 每次呼叫的帧数可变。

函数vorbis_get_file_info(文件名:str)->;miniaudio.soundfileinfo

< Buff行情>

获取有关音频文件的一些信息(vorbis格式)。

函数vorbis_get_info(数据:字节)->;miniaudio.soundfileinfo

< Buff行情>

获取有关音频数据的一些信息(vorbis格式)。

函数vorbis_read(数据:字节)->;miniaudio.decodedsoundfile

< Buff行情>

读取并解码整个Vorbis音频数据。结果样本格式为16位有符号整数。

函数vorbis_read_file(文件名:str)->;miniaudio.decodedsoundfile

< Buff行情>

读取并解码整个vorbis音频文件。结果样本格式为16位有符号整数。

函数vorbis_stream_文件(文件名:str,seek_frame:int=0)->;生成器[数组.数组,非类型,非类型]

< Buff行情>

将ogg vorbis音频文件作为交错16位有符号整数采样阵列段进行流式处理。 它使用固定块大小,不能用作通用小型音频解码器输入流。 考虑改用stream_file()。

函数wav获取文件信息(文件名:str)->;miniaudio.soundfileinfo

< Buff行情>

获取有关音频文件(WAV格式)的一些信息。

函数wav_get_info(数据:字节)->;miniaudio.soundfileinfo

< Buff行情>

获取有关音频数据(WAV格式)的一些信息。

功能ad_f32(数据:字节)->;miniAudio.decodedsoundfile

< Buff行情>

读取和解码整个wav音频数据。结果样本格式为32位浮点。

函数wav_read_file_f32(文件名:str)->;miniaudio.decodedsoundfile

< Buff行情>

读取并解码整个wav音频文件。结果样本格式为32位浮点。

函数wav_read_file_s16(文件名:str)->;miniaudio.decodedsoundfile

< Buff行情>

读取并解码整个wav音频文件。结果样本格式为16位有符号整数。

函数wav_read_file_s32(文件名:str)->;miniaudio.decodedsoundfile

< Buff行情>

读取并解码整个wav音频文件。结果样本格式为32位有符号整数。

函数wav_read_s16(数据:字节)->;miniaudio.decodedsoundfile

< Buff行情>

读取和解码整个wav音频数据。结果样本格式为16位有符号整数。

函数wav_read_s32(数据:字节)->;miniaudio.decodedsoundfile

< Buff行情>

读取和解码整个wav音频数据。结果样本格式为32位有符号整数。

函数wav_stream_文件(文件名:str,frames_to_read:int=1024,seek_frame:int=0)->;生成器[数组,非类型,非类型]

< Buff行情>

将wav音频文件作为交错16位有符号整数采样阵列段流。这种用途 固定块大小,不能用作通用小型音频解码器输入流。考虑使用 改为stream_file()。

函数wav_write_file(文件名:str,声音:miniaudio.decodedsoundfile)

< Buff行情>

将pcm声音写入wav文件

捕获设备

捕获设备(self,input_format:miniaudio.sampleformat=<;sampleformat.signed16:2>;,n通道:int=2,采样率:int=44100,缓冲区大小:int=200,设备ID:union[\u cffi_backend.cdata,nonetype]=none,回调周期:int=0,后端:union[list[miniaudio.backend],nonetype]=none,thread优先:miniaudio.threadpriority=<;threadpriority.highest:0>;,app_name:str='')

< Buff行情>

MiniAudio提供的音频设备,用于音频捕获(录制)。

< Buff行情>

方法关闭(自行)

< Buff行情>

停止播放或捕获并关闭设备。

< Buff行情>

方法开始(self,回调生成器:生成器[nonetype,union[bytes,array.array],nonetype],停止回调:union[callable,nonetype]=none)

< Buff行情>

启动音频设备:开始捕获(录制)。录制的音频数据被发送到给定的 作为原始字节的回调生成器。(之前应该已经启动了)

< Buff行情>

方法停止(自行)

< Buff行情>

停止播放或捕获。

解码错误

解码错误(self,/,*args,**kwargs)

< Buff行情>

当解码音频文件时出错。

decodedsoundfile

解码声音文件(self,name:str,nchannels:int,sample-rate:int,sample-format:minioudio.sampleformat,samples:array.array)

< Buff行情>

包含各种属性以及完全解码音频文件的pcm帧。

设备

设备(self,后端:union[list[minioudio.backend],nonetype]=none)

< Buff行情>

查询miniAudio提供的音频播放和录制设备

< Buff行情>

< EM >d获取捕获(self)->;列表[dict[str,any]]

< Buff行情>

获取捕获设备的列表及其一些详细信息

< Buff行情>

方法获取回放(self)->;列表[dict[str,any]]

< Buff行情>

获取播放设备的列表及其一些详细信息

双工流

双工流(self,播放格式:miniaudio.sample format=<;sampleformat.signed16:2>;,播放频道:int=2,捕获格式:miniaudio.sampleformat=<;sampleformat.signed16:2>;,捕获频道:int=2,采样率:int=44100,缓冲区大小:int=200,播放设备ID:union[\u cffi_backend.cdata,nonetype]=none,捕获设备ID:union[\u cffi_backend.cdata,nonetype]=none,回调周期:int=0,后端:union[list[miniaudio.backend],nonetype]=none,线程优先级:miniaudio.threadpriority=<;threadpriority.highest:0>;,应用程序名称:str='')

< Buff行情>

连接捕获设备和播放设备。

< Buff行情>

方法关闭(自行)

< Buff行情>

停止播放或捕获并关闭设备。

< Buff行情>

方法开始(self,回调生成器:generator[union[bytes,array.array],union[bytes,array.array],nonetype],stop\u回调:union[callable,nonetype]=none)

< Buff行情>

启动音频设备:开始播放和捕获。播放的音频数据由 给定的回调生成器,它同时发送录制的音频数据。(应该) 在传入之前已启动)

< Buff行情>

方法停止(自行)

< Buff行情>

停止播放或捕获。

微型音频错误

迷你音频错误(self,/,*args,**kwargs)

< Buff行情>

当发生特定于MiniAudio的错误时。

playbackdevice

playbackdevice(self,output_format:miniaudio.sampleformat=<;sampleformat.signed16:2>;,nchannes:int=2,sample_rate:int=44100,buffersize_msec:int=200,device_id:union[\u cffi_backend.cdata,nonetype]=none,callbackback_periods:int=0,后端:union[list[miniaudio.backend],nonetype]=none,thread优先:miniaudio.threadpriority=<;threadpriority.highest:0>;,app_name:str='')

< Buff行情>

MiniAudio提供的音频设备,用于音频播放。

< Buff行情>

方法关闭(自行)

< Buff行情>

停止播放或捕获并关闭设备。

< Buff行情>

方法开始(self,回调生成器:生成器[union[bytes,array.array],int,nonetype],停止回调:union[callable,nonetype]=none)

< Buff行情>

启动音频设备:开始播放。音频数据由给定的回调提供 发电机。生成器将收到所需的帧数,并应将样本数据作为 原始字节、内存视图、array.array或具有形状的numpy数组(numframes、numchannels)。 发电机在进入前应已启动。

< Buff行情>

方法停止(自行)

< Buff行情>

停止播放或捕获。

soundfileinfo

soundfileinfo(self,name:str,file_format:miniaudio.fileformat,nchannels:int,sample_rate:int,sample_format:miniaudio.sampleformat,duration:float,num_frames:int)

< Buff行情>

包含音频文件的各种属性。

streamablesource

streamablesource(self,/,*args,**kwargs)

<封锁】T>

表示数据字节的源。

流式转换器

streamingconverter(self,in_format:miniaudio.sampleformat,in_channels:int,in_samplerate:int,out_format:miniaudio.sampleformat,out_channels:int,out_samplerate:int,frame_producer:generator[union[bytes,array.array],int,nonetype],dither:miniaudio.dithermode=<;dithermode.none:0>;)

< Buff行情>

在流流流上工作的示例格式转换器,而不是同时执行所有操作。

< Buff行情>

方法读取(self,num_frames:int)->;array.array

< Buff行情>

从源中读取一段帧并返回给定数量的已转换帧。

wavfilereadstream

wavfilereadstream(self,pcm_sample_gen:generator[union[bytes,array.array],int,nonetype],sample_rate:int,nchannels:int,output_format:miniaudio.sampleformat,max_frames:int=0)

< Buff行情>

作为.wav文件读取的一种输入输出流,它从提供的生产者那里获取其pcm样本

< Buff行情>

方法关闭(自行)

< Buff行情>

关闭文件

< Buff行情>

方法读取(self,amount:int=9223372036854775807)->;联合[字节,非类型]

< Buff行情>

从文件中读取指定的字节数。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javascript问题:通过URL用网站数据填充Textview   java TabLayout Android,如何用几个标签填充整个屏幕宽度,并用大量标签滚动?   Eclipse Java运行的文件不再存在于我的工作区中   安装两个Java版本时,使用Java的windows链接不起作用   java将多个图形添加到单个JPanel   java Kafka ConsumerFactory,带有两个Desiarizer   使用反射更改java类超类   当一致性测试失败时,java有没有办法让堆栈跟踪显示在控制台中   java映射到基元类型的HashMap的快速替代方案是什么?   java关闭一个jframe所有剩余的打开jframe都将关闭。   java为什么不推荐“使用getString()获取设备标识符”?   java值比较和值赋值之间有什么性能差异吗?   Java实体数组到JavaScript数组   java使用流将一个列表转换为另一个列表   在JTree中保存对象,但更改显示的名称(java swing)?   java“Hello world”Android应用程序,文件尽可能少,没有IDE,只有文本编辑器   java在方法之间传递值   java如何为项目数组创建ParseQuery?