首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在py音频中启用WASAPI排他性模式

如何在py音频中启用WASAPI排他性模式
EN

Stack Overflow用户
提问于 2015-07-09 00:12:11
回答 1查看 3.8K关注 0票数 2

我使用的是带有WASAPI支持的这些预编译的pyaudio二进制文件。我想通过WASAPI播放一个wav文件。我为这个api找到了默认输出设备的索引:

代码语言:javascript
复制
import pyaudio

p = pyaudio.PyAudio()

print p.get_host_api_info_by_index(3)
>>{'index': 3, 'name': u'Windows WASAPI', 'defaultOutputDevice': 11L, 'type': 13L, 'deviceCount': 3L, 'defaultInputDevice': 12L, 'structVersion': 1L}

然后我通过这个设备播放一个wav文件:

代码语言:javascript
复制
import pyaudio
import wave

CHUNK = 1024

wf = wave.open('test.wav', 'rb')

# instantiate PyAudio (1)
p = pyaudio.PyAudio()

# open stream (2)
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output_device_index=11,
                output=True)

# read data
data = wf.readframes(CHUNK)

# play stream (3)
while data != '':
    stream.write(data)
    data = wf.readframes(CHUNK)

# stop stream (4)
stream.stop_stream()
stream.close()

# close PyAudio (5)
p.terminate()

当文件播放时,我仍然能够听到系统中的其他声音,但在专用WASAPI模式下,必须阻止所有其他声音。那么,如何使WASAPI排他性模式在吡喃?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-10 03:07:09

有必要改变吡喹酮的来源。我们需要修改_portaudiomodule.c。

包括pa_win_wasapi.h:

代码语言:javascript
复制
#include pa_win_wasapi.h

更改这一行:

代码语言:javascript
复制
outputParameters->hostApiSpecificStreamInfo = NULL;

在这方面:

代码语言:javascript
复制
struct PaWasapiStreamInfo wasapiInfo;
wasapiInfo.size = sizeof(PaWasapiStreamInfo);
wasapiInfo.hostApiType = paWASAPI;
wasapiInfo.version = 1;
wasapiInfo.flags = (paWinWasapiExclusive|paWinWasapiThreadPriority);
wasapiInfo.threadPriority = eThreadPriorityProAudio;

outputParameters->hostApiSpecificStreamInfo = (&wasapiInfo);

现在我们需要编译py音频。

  1. 将port音频dir放在pyaudio中,名称是port音频-v19,名称非常重要。
  2. 安装MinGW/ MSYS : gcc,make和MSYS控制台我们需要
  3. 在MSYS控制台cd到port音频-V19
  4. ./configure --with-winapi=wasapi --enable-shared=no
  5. make
  6. cd ..
  7. 更改这些行: external_libraries += ['winmm'] extra_link_args += ['-lwinmm'] 在setup.py中是这样的: external_libraries += ["winmm","ole32","uuid"] extra_link_args += ["-lwinmm","-lole32","-luuid"]
  8. python setup.py build --static-link -cmingw32
  9. python setup.py install --skip-build

就这样。现在pyadio可以在WASAPI排他性模式下播放声音。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31306010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档