如何从内存中播放WAV数据?

Jor*_*les 5 python wav

我正在进行一项声音实验,我遇到过一个问题.我将一组波形数据保存到.wav文件并播放它,但有没有办法跳过这一步,只是从内存中播放声音?我正在寻找一种跨平台工作的解决方案.

mac*_*mac 3

我想你正在使用wave库,对吧?

\n

文档说:

\n
\n

wave.open(文件[,模式])

\n

如果文件是字符串,则按该名称打开文件,否则将其视为可查找的类文件对象。

\n
\n

这意味着您应该能够执行以下操作:

\n
>>> import wave\n>>> from StringIO import StringIO\n>>> file_on_disk = open(\'myfile.wav\', \'rb\')\n>>> file_in_memory = StringIO(file_on_disk.read())\n>>> file_on_disk.seek(0)\n>>> file_in_memory.seek(0)\n>>> file_on_disk.read() == file_in_memory.read()\nTrue\n>>> wave.open(file_in_memory, \'rb\')\n<wave.Wave_read instance at 0x1d6ab00>\n
Run Code Online (Sandbox Code Playgroud)\n
\n

编辑(参见评论):以防万一你的问题不仅是从内存中读取文件,而且是从 python 中播放它......

\n

一个选择是使用pymedia

\n
import time, wave, pymedia.audio.sound as sound\nf= wave.open( \'YOUR FILE NAME\', \'rb\' ) # \xe2\x86\x90 you can use StrinIO here!\nsampleRate= f.getframerate()\nchannels= f.getnchannels()\nformat= sound.AFMT_S16_LE\nsnd= sound.Output( sampleRate, channels, format )\ns= f.readframes( 300000 )\nsnd.play( s )\nwhile snd.isPlaying(): time.sleep( 0.05 )\n
Run Code Online (Sandbox Code Playgroud)\n

[来源:pymedia 教程(为了简洁起见,我省略了他们的解释性评论]

\n