<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Wave on My Blog</title><link>/tags/wave/</link><description>Recent content in Wave on My Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 17 Nov 2018 00:00:00 +0000</lastBuildDate><atom:link href="/tags/wave/index.xml" rel="self" type="application/rss+xml"/><item><title>wave librosa pyaudio</title><link>/2018/11/17/wave-librosa-pyaudio/</link><pubDate>Sat, 17 Nov 2018 00:00:00 +0000</pubDate><guid>/2018/11/17/wave-librosa-pyaudio/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h1 id="wave"&gt;wave&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://docs.python.org/zh-cn/3/library/wave.html#module-wave"&gt;&lt;code&gt;wave&lt;/code&gt;&lt;/a&gt; 模块提供了一个处理 WAV 声音格式的便利接口。它不支持压缩/解压，但是支持单声道/立体声。&lt;/p&gt;
&lt;h2 id="install"&gt;install&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip install wave
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="example"&gt;example&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 读取音频文件数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;read_wav&lt;/span&gt;(audio_name):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; wave&lt;span style="color:#f92672"&gt;.&lt;/span&gt;open(audio_name, &lt;span style="color:#e6db74"&gt;&amp;#39;rb&amp;#39;&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; rf:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; frames &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; frame &lt;span style="color:#f92672"&gt;=&lt;/span&gt; rf&lt;span style="color:#f92672"&gt;.&lt;/span&gt;readframes(&lt;span style="color:#ae81ff"&gt;3200&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; frame:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; frames&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append(frame)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; frame &lt;span style="color:#f92672"&gt;=&lt;/span&gt; rf&lt;span style="color:#f92672"&gt;.&lt;/span&gt;readframes(&lt;span style="color:#ae81ff"&gt;3200&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; frames
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 保存音频文件数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;write_wav&lt;/span&gt;(save_file, frames, CHANNELS&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, SIMPLE_SIZE&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, RATE&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;16000&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; save_file &lt;span style="color:#f92672"&gt;is&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;None&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; wf &lt;span style="color:#f92672"&gt;=&lt;/span&gt; wave&lt;span style="color:#f92672"&gt;.&lt;/span&gt;open(save_file, &lt;span style="color:#e6db74"&gt;&amp;#39;wb&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; wf&lt;span style="color:#f92672"&gt;.&lt;/span&gt;setnchannels(CHANNELS)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; wf&lt;span style="color:#f92672"&gt;.&lt;/span&gt;setsampwidth(SIMPLE_SIZE)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; wf&lt;span style="color:#f92672"&gt;.&lt;/span&gt;setframerate(RATE)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; wf&lt;span style="color:#f92672"&gt;.&lt;/span&gt;writeframes(&lt;span style="color:#e6db74"&gt;b&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join(frames))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; wf&lt;span style="color:#f92672"&gt;.&lt;/span&gt;close()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;wave可以读取和保存音频文件，但是不能做时频处理、特征提取等问题，如果你读取rate=16000的文件，保存为rate=8000的文件，音频的时长增加了一倍，播放速度降低了一倍。&lt;/p&gt;
&lt;p&gt;参考：https://docs.python.org/zh-cn/3/library/wave.html#module-wave&lt;/p&gt;
&lt;h1 id="librosa"&gt;Librosa&lt;/h1&gt;
&lt;p&gt;&lt;a href="http://librosa.github.io/librosa/tutorial.html"&gt;Librosa&lt;/a&gt; 是一个用于音频、音乐分析、处理的python工具包，一些常见的时频处理、特征提取、绘制声音图形等功能应有尽有，功能十分强大。&lt;/p&gt;
&lt;h2 id="install-1"&gt;install&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pip install librosa
# conda install
conda install -c conda-forge librosa
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="example-1"&gt;example&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# 改变频谱并保存
def change_sample_rate(read_file, save_file, orig_sr=48000, target_sr=8000):
y, sr = librosa.load(read_file, sr=orig_sr)
y_16k = librosa.resample(y, sr, target_sr)
librosa.output.write_wav(save_file, y_16k, target_sr)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;参考： &lt;a href="http://librosa.github.io/librosa/tutorial.html"&gt;http://librosa.github.io/librosa/tutorial.html&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>