ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 导航 - [索引](../genindex.xhtml "总目录") - [模块](../py-modindex.xhtml "Python 模块索引") | - [下一页](chunk.xhtml "chunk --- Read IFF chunked data") | - [上一页](sunau.xhtml "sunau --- 读写 Sun AU 文件") | - ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png) - [Python](https://www.python.org/) » - zh\_CN 3.7.3 [文档](../index.xhtml) » - [Python 标准库](index.xhtml) » - [多媒体服务](mm.xhtml) » - $('.inline-search').show(0); | # [`wave`](#module-wave "wave: Provide an interface to the WAV sound format.") --- 读写WAV格式文件 **源代码:** [Lib/wave.py](https://github.com/python/cpython/tree/3.7/Lib/wave.py) \[https://github.com/python/cpython/tree/3.7/Lib/wave.py\] - - - - - - [`wave`](#module-wave "wave: Provide an interface to the WAV sound format.") 模块提供了一个处理 WAV 声音格式的便利接口。它不支持压缩/解压,但是支持单声道/立体声。 [`wave`](#module-wave "wave: Provide an interface to the WAV sound format.") 模块定义了以下函数和异常: `wave.``open`(*file*, *mode=None*)如果 *file* 是一个字符串,打开对应文件名的文件。否则就把它作为文件类对象来处理。*mode* 可以为以下值: `'rb'`只读模式。 `'wb'`只写模式。 注意不支持同时读写WAV文件。 *mode* 设为 `'rb'` 时返回一个 `Wave_read` 对象,而 *mode* 设为 `'wb'` 时返回一个 `Wave_write` 对象。如果省略 *mode* 并指定 *file* 来传入一个文件类对象,则 `file.mode` 会被用作 *mode* 的默认值。 如果操作的是文件对象,当使用 wave 对象的 `close()` 方法时,并不会真正关闭文件对象,这需要调用者负责来关闭文件对象。 The [`open()`](#wave.open "wave.open") function may be used in a [`with`](../reference/compound_stmts.xhtml#with) statement. When the `with` block completes, the [`Wave_read.close()`](#wave.Wave_read.close "wave.Wave_read.close") or [`Wave_write.close()`](#wave.Wave_write.close "wave.Wave_write.close") method is called. 在 3.4 版更改: 添加了对不可搜索文件的支持。 `wave.``openfp`(*file*, *mode*)同 [`open()`](#wave.open "wave.open"),用于向后兼容。 Deprecated since version 3.7, will be removed in version 3.9. *exception* `wave.``Error`当不符合WAV格式或无法操作时引发的错误。 ## Wave\_read对象 由 [`open()`](#wave.open "wave.open") 返回的 Wave\_read 对象,有以下几种方法: `Wave_read.``close`()关闭 [`wave`](#module-wave "wave: Provide an interface to the WAV sound format.") 打开的数据流并使对象不可用。当对象销毁时会自动调用。 `Wave_read.``getnchannels`()返回声道数量(`1` 为单声道,`2` 为立体声) `Wave_read.``getsampwidth`()返回采样字节长度。 `Wave_read.``getframerate`()返回采样频率。 `Wave_read.``getnframes`()返回音频总帧数。 `Wave_read.``getcomptype`()返回压缩类型(只支持 `'NONE'` 类型) `Wave_read.``getcompname`()[`getcomptype()`](#wave.Wave_read.getcomptype "wave.Wave_read.getcomptype") 的通俗版本。使用 `'not compressed'` 代替 `'NONE'`。 `Wave_read.``getparams`()返回一个 [`namedtuple()`](collections.xhtml#collections.namedtuple "collections.namedtuple")`(nchannels, sampwidth, framerate, nframes, comptype, compname)`,与 `get*()` 方法的输出相同。 `Wave_read.``readframes`(*n*)读取并返回以 [`bytes`](stdtypes.xhtml#bytes "bytes") 对象表示的最多 *n* 帧音频。 `Wave_read.``rewind`()设置当前文件指针位置。 后面两个方法是为了和 [`aifc`](aifc.xhtml#module-aifc "aifc: Read and write audio files in AIFF or AIFC format.") 保持兼容,实际不做任何事情。 `Wave_read.``getmarkers`()返回 `None`。 `Wave_read.``getmark`(*id*)引发错误异常。 以下两个方法都使用指针,具体实现由其底层决定。 `Wave_read.``setpos`(*pos*)设置文件指针到指定位置。 `Wave_read.``tell`()返回当前文件指针位置。 ## Wave\_write 对象 For seekable output streams, the `wave` header will automatically be updated to reflect the number of frames actually written. For unseekable streams, the *nframes* value must be accurate when the first frame data is written. An accurate *nframes* value can be achieved either by calling [`setnframes()`](#wave.Wave_write.setnframes "wave.Wave_write.setnframes") or [`setparams()`](#wave.Wave_write.setparams "wave.Wave_write.setparams") with the number of frames that will be written before [`close()`](#wave.Wave_write.close "wave.Wave_write.close") is called and then using [`writeframesraw()`](#wave.Wave_write.writeframesraw "wave.Wave_write.writeframesraw") to write the frame data, or by calling [`writeframes()`](#wave.Wave_write.writeframes "wave.Wave_write.writeframes") with all of the frame data to be written. In the latter case [`writeframes()`](#wave.Wave_write.writeframes "wave.Wave_write.writeframes") will calculate the number of frames in the data and set *nframes* accordingly before writing the frame data. 由 [`open()`](#wave.open "wave.open") 返回的 Wave\_write 对象,有以下几种方法: 在 3.4 版更改: 添加了对不可搜索文件的支持。 `Wave_write.``close`()Make sure *nframes* is correct, and close the file if it was opened by [`wave`](#module-wave "wave: Provide an interface to the WAV sound format."). This method is called upon object collection. It will raise an exception if the output stream is not seekable and *nframes* does not match the number of frames actually written. `Wave_write.``setnchannels`(*n*)设置声道数。 `Wave_write.``setsampwidth`(*n*)设置采样字节长度为 *n*。 `Wave_write.``setframerate`(*n*)设置采样频率为 *n*。 在 3.2 版更改: A non-integral input to this method is rounded to the nearest integer. `Wave_write.``setnframes`(*n*)Set the number of frames to *n*. This will be changed later if the number of frames actually written is different (this update attempt will raise an error if the output stream is not seekable). `Wave_write.``setcomptype`(*type*, *name*)设置压缩格式。目前只支持 `NONE` 即无压缩格式。 `Wave_write.``setparams`(*tuple*)*tuple* 应该是 `(nchannels, sampwidth, framerate, nframes, comptype, compname)`,每项的值应可用于 `set*()` 方法。设置所有形参。 `Wave_write.``tell`()返回当前文件指针,其指针含义和 [`Wave_read.tell()`](#wave.Wave_read.tell "wave.Wave_read.tell") 以及 [`Wave_read.setpos()`](#wave.Wave_read.setpos "wave.Wave_read.setpos") 是一致的。 `Wave_write.``writeframesraw`(*data*)写入音频数据但不更新 *nframes*。 在 3.4 版更改: Any [bytes-like object](../glossary.xhtml#term-bytes-like-object) is now accepted. `Wave_write.``writeframes`(*data*)Write audio frames and make sure *nframes* is correct. It will raise an error if the output stream is not seekable and the total number of frames that have been written after *data* has been written does not match the previously set value for *nframes*. 在 3.4 版更改: Any [bytes-like object](../glossary.xhtml#term-bytes-like-object) is now accepted. 注意在调用 `writeframes()` 或 `writeframesraw()` 之后再设置任何格式参数是无效的,而且任何这样的尝试将引发 [`wave.Error`](#wave.Error "wave.Error")。 ### 导航 - [索引](../genindex.xhtml "总目录") - [模块](../py-modindex.xhtml "Python 模块索引") | - [下一页](chunk.xhtml "chunk --- Read IFF chunked data") | - [上一页](sunau.xhtml "sunau --- 读写 Sun AU 文件") | - ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png) - [Python](https://www.python.org/) » - zh\_CN 3.7.3 [文档](../index.xhtml) » - [Python 标准库](index.xhtml) » - [多媒体服务](mm.xhtml) » - $('.inline-search').show(0); | © [版权所有](../copyright.xhtml) 2001-2019, Python Software Foundation. Python 软件基金会是一个非盈利组织。 [请捐助。](https://www.python.org/psf/donations/) 最后更新于 5月 21, 2019. [发现了问题](../bugs.xhtml)? 使用[Sphinx](http://sphinx.pocoo.org/)1.8.4 创建。