将波形文件(wav或aiff)转换为矢量图形(svg、postscript或cvs)的python包

wav2vec的Python项目详细描述


:toc:
:toc放置!:

=wav2vec.py


==简介

`wav2vec'是一个python脚本和包,用于将波形文件(wav或aiff)转换为矢量图形(svg或postscript)。用例包括在图形设计中将音频波形用作元素或在文档中包含波形。

==features

*portable:在python 2.7+和python 3上运行,不依赖于任何第三方包。
*支持的pcm输入文件格式:
**8位有符号aiff
**8位无符号wav
**16位有符号wav和aiff
**32位有符号wav和aiff
*自动检测和处理输入文件格式(文件名/扩展名不重要)
*输出文件格式:
**scalable vector graphics(svg)
**postscript
**comma-separated values(csv)
*易于编写自定义输出格式化程序
*用于缩放输出数据的选项
*可以处理成块的输入文件,以便用最少的内存处理大文件

==安装

===来自具有pip的pypi
==安装"wav2vec"的最简单方法是se`pip`要从python包索引安装:

[source,sh]
----
$pip install wav2vec
----


==根据您的系统,要在python 3路径中安装,可能必须使用'pip3'而不是'pip'。

==从git repo克隆git存储库



[source,sh]


$git克隆https://github.com/cristoper/wav2vec.git
$cd wav2vec






[source,sh]


[source,sh]

[source,sh]





=$git克隆https://github.com/cristoper/wav2vec.py现在您可以直接运行`wav2vec.py:








/>----
$pip install.
$wav2vec-h
----

==用法


一旦使用pip安装包(见上文),该命令就可以作为"wav2vec"调用。它接受一个输入文件并输出(SVG,默认情况下)到stdout:

[source,sh]
----
$wav2vec filename.wav>;filename.svg
----


run`wav2vec-h`以获取使用摘要:

----usage:wav2vec[-h][--format{postscript,svg,csv}][--width]
[--height height][--stream bs][--downtoss n]
[--log{debug,info,warning,error,critical}]
filename

filename将wav和aiff文件转换为矢量(svg,postscript,cvs)图形。

位置参数:
filename要重新生成的wav文件ad

可选参数:
-h,--帮助显示此帮助消息并退出
--格式{postscript,svg,csv},-f{postscript,svg,csv}
输出格式,其中之一:svg,csv,postscript。
默认值为svg。
--宽度生成的SVG的最大宽度(图形将按比例缩小到PX中的该大小)
--生成的SVG的高度-高度-最大高度(图形将按比例缩小到PX中的该大小)。注意,这是根据最大可能的振幅(给定
采样位深度)来缩放
,而不是根据
实际出现在数据中的最大振幅来缩放的。
--流bs流c中的输入文件大小分别处理/格式化每个块。当
处理大型文件时,对于节省内存很有用,但请注意,多通道
路径将被分割成bs大小的块。通过
默认bs=0,这将导致在处理之前将整个文件读入内存。
--通过在每个n个示例中只保留1个来缩小n的大小。
--日志{debug,info,warning,error,critical}
设置日志记录级别。

输出被发送到stdout。

---

===选项
===输出格式


标记--format设置输出格式。` wav2vec包括三个格式化程序:`svg`(如果未指定"--格式",则为默认值)、`postscript`和`cvs`.

[source,sh]
----
$wav2vec filename.wav--format postscript>;output.ps
---

==缩放输出

使用"--宽度"和"--高度"选项缩放ou使其最大界限等于或小于标志后面的值。在svg中,这些值是像素("用户单位");在postscript中,这些值被解释为pts(1/72英寸)。默认情况下(如果未给定标志),宽度设置为1000,高度设置为500。

[source,sh]
----
$wav2vec filename.wav--width 500--height 350>;output.svg
----

===流输入文件

然后在处理输出时将其流式传输到stdout。传递"--stream"标志将导致"wav2vec"分块处理输入文件。如果输入文件非常大,无法放入可用内存,则这可能非常有用。"--stream"标志需要一个参数,即一次要读取和处理的帧数(每个帧包括来自每个通道的一个样本)。大约1024的值似乎工作得很好。

[source,sh]
----
$wav2vec filename.aiff--stream 1024>;output.svg
----


注意,对具有多个通道的文件使用"--stream"标志将导致输出中的路径不连续(因为通道数据是交错的)隐藏在wav/aif文件中)。

还要注意,将非常大的音频文件转换为svg可能不实用:大多数svg编辑器无法很好地处理几十万或数百万个点的路径。

====下采样

AMPLE。这是一种残酷的下采样形式,它会破坏高频并添加混叠噪声。最好在处理前(或处理后的绘图程序中)在波形记录器/编辑器中缩小采样。

===api


您还可以"导入wav2vec",以便将波形文件转换为您自己的python脚本中支持的输出格式。包提供了两个主要类:"wavdecoder"和抽象的"formatter"(以及具体实现:"svgformatter"、"psformatter"和"csvformatter")。文档当前包含在源文件中;请查看链接:./wav2vec/main.py[main.py]以获取用法示例。


"wavdecoder"类包装标准库的"wave"和"aifc"模块,并提供读取和解码wav/aiff文件的简单方法。将其用作上下文管理器以确保调用"close()"。使用它作为迭代器来处理所有帧:

[源,python]
----
>;>;wd=wavdecoder('filename')
>;>;使用wd作为数据:
>;>;对于数据帧:
>;>;打印(帧)
----

参见链接:./wav2vec/wavdecoder.py[wav2vec/wavdecoder.py]。

formatter类是一个抽象基类,它为所有以文本格式输出wav数据的格式化程序定义接口。"formatter"的每个具体子类在其构造函数中都有一个"wavdecoder"对象,该对象负责从wav或aiff文件读取/解码数据。

e`u str_uu()`方法。

[source,python]
----
>;>wd=wavdecoder("文件名")
>;>svgformatter=svgformatter(wd)
>;>svgformatter.output();将svg输出到stdout
>;----

请参阅链接:./wav2vec/formatter/[格式化程序包]。

===示例

====svg


以下是链接内容:tests/valfiles/snd/test-16-stereor.wav[test s/valfiles/snd/test-16-stereor.wav]文件在audacity中看起来像:


image:。/readme-imgs/audacity.png[]


我们可以将其转换为SVG,然后在inkscape中打开:

[source,sh]
----$wav2vec tests/valfiles/snd/test-16-stereor.wav>;test.svg
$inkscape test.svg
----


image:。/readme-imgs/inkscape.png[]


>然后我们可以使用inkscape以非破坏性方式添加过滤器和路径效果,或者将波形合并到设计中:


==postscript

转换为Postscript而不是SVG:

[source,sh]
----
$wav2vec tests/valfiles/snd/test-16-stereor.wav-f postscript>;test.ps
$ps2pdf test.ps
$evince test.pdf
----

df,然后在evince pdf阅读器中打开它(如下面的屏幕截图所示)。相反,您可以直接在Postscript查看器中打开"test.ps"(或将其发送到打印机/绘图仪,或嵌入乳胶文档等)。

工作表:

[source,sh]
----$wav2vec tests/valfiles/snd/test-16-stereore.wav-f csv--height 0>;test.csv
$libreoffice test.csv
----

注意防止"wav2vec"缩放原始pcm值的"--height 0"选项。

==hacking

==run tests

要运行单元和验证测试(需要python3):

[source,sh]
----
$python-m unittest discover
---

==编写自定义格式化程序

罚款。使用附带的svgformatter、psformatter或csvformatter作为模板(请参阅链接:./wav2vec/formatter/formatters.py[wav2vec/formatter/formatters.py])。

==问题


请随意使用github问题跟踪程序作为支持论坛,以解决任何问题、建议、错误报告或fe自然法则要求。谢谢!https://github.com/cristoper/wav2vec/issues

==另请参见

-http://www.audacityteam.org/[audacity]是一个很好的免费音频记录器和波形编辑器。
-https://inkscape.org/en/[inkscape]是一个免费的基于svg的绘图程序
-https://www.ghostscript.com/[ghostscript]是一个free Postscript解释器,可提取为PDF格式。

==支持作者

如果此脚本对您有用,请考虑通过一次性捐款支持我在这一项目和其他开源项目上的工作:https://www.paypal.com/cgi-bin/webscr?CMD=-S xCalpand;HoestdButoNothIDID=E78W4LH2NADXE [通过PayPal捐赠]。
BR/>如果你想与Python开发者签约,我可能会有所帮助。联系我,chris,dev@orangenoiseproduction.com



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

推荐PyPI第三方库


热门话题
使用导入范围函数下载文件时发生java错误   java是否提供内置的静态字符串。比较方法?   添加“再次播放?”Java中我的随机数猜测游戏的功能   java在tomcat 8中配置JPDA   编译器构造Java:检查编译时是否存在给定的方法名   当RedistreLimiter阻止请求时,java Spring云网关全局筛选器未执行   java无法将带有Gradle的单片Spring Boot应用程序转换为多模块   Eclipse(IDE)如何在没有公共类的情况下在Java中运行main方法?   用Java上传Youtube帖子   没有css和javascript的html Java httpGet页面正文   具有相同哈希代码的java Equal对象不会映射到HashMap中的相同值   字符串格式在Java中如何向数字中添加左填充的零?   java表示XML/DOM对象中attributesvalues或textnodes上的“条件”   JavaSpringJPA根据从POST请求体获取的列和值查询数据库   java BouncyCastle编码差异   java从intellij idea中提取运行命令   java类型、属性、实例和值之间的关系   java除了一个复选框外,屏幕上没有显示任何内容